迭代函数系统(IFS)

迭代函数系统(IFS)

IFS库源码已经上传GitHub fractal,需查看源码的请挪步。

自定义概率迭代函数

代码:

# Sier三角变换
from fractal import IFS
from random import randint


def ifsp(x, y):
    p = randint(1, 3)
    if p == 1:
        return (0.5 * x, 0.5 * y)
    elif p == 2:
        return (0.5 * x + 0.5, 0.5 * y + 0.5)
    else:
        return (0.5 * x + 0.5, 0.5 * y)

ob = IFS([460, 450], title="Sier")
ob.setPx(400, 0, 10)
ob.setIfsp(ifsp)
ob.doIFS(200000)
ob.wait()

结果:

代码:

# 蕨类IFS生成

from fractal import IFS
from random import random


def ifsp(x, y):
    p = random()
    if p < 0.01:
        return (0, 0.16 * y)
    elif p < 0.07:
        if random() > 0.5:
            return (0.21 * x - 0.25 * y, 0.25 * x + 0.21 * y + 0.44)
        else:
            return (-0.2 * x + 0.26 * y, 0.23 * x + 0.22 * y + 0.6)
    else:
        return (0.85 * x + 0.1 * y, -0.05 * x + 0.85 * y + 0.6)

ob = IFS([400, 500], title = "")
ob.setPx(100, 100, 100)
ob.setIfsp(ifsp)
ob.doIFS(200000)
ob.wait()

结果:

代码:

# Box IFS
from fractal import IFS
from random import randint


def ifsp(x, y):
    p = randint(1, 5)
    if p == 1:
        return (x / 3, y / 3)
    elif p == 2:
        return (x / 3 + 2 / 3, y / 3)
    elif p == 3:
        return (x / 3 + 1 / 3, y / 3 + 1 / 3)
    elif p == 4:
        return (x / 3, y / 3 + 2 / 3)
    else:
        return (x / 3 + 2 / 3, y / 3 + 2 / 3)

ob = IFS([500, 500], title="Box")
ob.setPx(490, 5, 5)
ob.setIfsp(ifsp)
ob.doIFS(200000)
ob.wait()

结果:

使用IFS码进行迭代

代码:

from fractal.IFS import IFS

ifscode = [
    [0.879, 0.054, -0.051, 0.878, 0.077, 0.123, 0.123],
    [0.1, -0.193, 0.285, 0.224, 0.174, 0.169, 0.169],
    [0.008, 0.135, 0, 0.204, 0.075, 0.074, 0.074],
    [0.402, 0.045, 0.016, -0.197, 0.111, 0.193, 0.193]
]

ifs = IFS([500, 500])
# ifs.setCoordinate()
ifs.setPx(700, 0, 0)
ifs.setIfsCode(ifscode)
ifs.doIFS(200000)
ifs.wait()

结果:

代码:

from fractal.IFS import IFS

code = [
    [0.195, -0.488, 0.344, 0.443, 0.4431, 0.2452, 0.2],
    [0.462, 0.414, -0.252, 0.361, 0.2511, 0.5692, 0.2],
    [-0.637, 0, 0, 0.501, 0.8562, 0.2512, 0.2],
    [-0.035, 0.07, -0.469, 0.022, 0.4884, 0.5069, 0.2],
    [-0.058, -0.07, -0.453, -0.111, 0.5976, 0.0969, 0.2]
]

ifs = IFS([500,500])
ifs.setCoordinate()
ifs.setPx(500, 0, 0)
ifs.setIfsCode(code)
ifs.doIFS(200000)
ifs.wait()

结果:

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
分形插值方法是一种基于分形理论的插值方法,它可以用于重构、插值、压缩和处理时间序列数据。其中,IFS(Iterated Function System)是分形插值方法中的一种迭代函数系,它可以将一个图形分解成若干个子图形,并利用一组线性或非线性的变换迭代生成新的子图形,从而实现对原图形的重构、插值和压缩。 在时间序列数据的处理中,可以采用IFS方法对数据进行重构和插值。具体步骤如下: 1. 将时间序列数据分解成若干个子序列。 2. 利用一组线性或非线性的变换对子序列进行迭代,生成新的子序列。 3. 将生成的新子序列合并成一个新的时间序列,作为重构或插值结果。 例如,可以采用以下的迭代函数系对时间序列数据进行插值: $$x_{n+1} = \begin{cases} a_1 x_n + b_1 x_n^2 + c_1 x_n^3 + d_1 x_n^4 + e_1 & p_1 \\ a_2 x_n + b_2 x_n^2 + c_2 x_n^3 + d_2 x_n^4 + e_2 & p_2 \\ a_3 x_n + b_3 x_n^2 + c_3 x_n^3 + d_3 x_n^4 + e_3 & p_3 \\ \cdots \\ a_m x_n + b_m x_n^2 + c_m x_n^3 + d_m x_n^4 + e_m & p_m \end{cases}$$ 其中,$p_i$ 表示第 $i$ 个变换的概率,$a_i,b_i,c_i,d_i,e_i$ 是参数,$m$ 是变换的个数。每次迭代时,根据概率 $p_i$ 随机选择一个变换,并利用该变换对序列中的每个数据点进行变换,得到新的序列。多次迭代后,生成的新序列可以作为原序列的插值结果。 在实际应用中,IFS方法可以用于时间序列数据的重构、插值和压缩。例如,可以利用IFS方法对缺失值进行插值,或者对不稳定的时间序列数据进行重构和平滑处理。此外,IFS方法还可以用于时间序列的压缩,即将原始数据压缩成一组IFS参数,从而实现数据的压缩和存储。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值