功能:二维分形之Mandelbrot迭代

格式:
[k,x,y]=FractalMandelbrot(f,x0,x1,y0,y1,m,n,Sum,R,Old)
[k,x,y]=FractalMandelbrot(f,x0,x1,y0,y1,m,n,Sum,R)
[k,x,y]=FractalMandelbrot(f,x0,x1,y0,y1,m,n,Sum)
[k,x,y]=FractalMandelbrot(f,x0,x1,y0,y1,m,n)
[k,x,y]=FractalMandelbrot(f,x0,x1,y0,y1,m)
[k,x,y]=FractalMandelbrot(f,x0,x1,y0)
[k,x,y]=FractalMandelbrot(f,x0,x1)
[k,x,y]=FractalMandelbrot(f,x0)
[k,x,y]=FractalMandelbrot(f)

f:字符串储存的函数表达式,其中里面的变量为x
x0:横坐标起始值,默认为-1.5
x1:横坐标结束值,默认为1.5
y0:纵坐标起始值,默认与x0一致
y1:纵坐标结束值,默认与x1一致
m:横坐标均分数,默认400
n:纵坐标均分数,默认与m一致
Sum:迭代最大次数,默认为100
R:Mandelbrot迭代半径,默认为512
Old:表示相对原坐标,此变量为一个1*2的矩阵变量.其里分别储存原坐标的横纵坐标,默认横纵原坐标均为0

k:返回m*n的矩阵变量,表示最终迭代次数
x:返回m*n的矩阵变量,表示最终复平面横向值
y:返回m*n的矩阵变量,表示最终复平面纵向值

原理:
记Old=[x_0,y_0]本函数对每一个点x,y进行如下迭代
    z.real = x
    z.imag = y
    k = 1
    不满足条件时( (z.real-x_0)^2+(z.imag-y_0)^2)^0.5<R  And  k<Sum  )进行如下迭代
    {
       z = f(z)
       k = k+1
    }
    x = z.real
    y = z.imag

注意:本函数与{FractalMandelbrot2<矩阵运算\FractalMandelbrot2>}函数不同的是本函数返回的第一个参数代表迭代次数而非距离

PS:有时为了绘图,可以将 z=k-log(log(sqrt(x^2+y^2)))/Log(2) 作为结果的一种度量

参考:{Mandelbrot<http://linas.org/art-gallery/escape/escape.html>}
例子:

f="x^2+0.3";
[a,x0,y0]=FractalMandelbrot(f,-1.5,1.5,-1.5,1.5,400,400,100,512);
x={MeshGrid2<矩阵运算\MeshGrid2>}(1,400,400,400);
y=x';
{Cloud<矩阵运算\Cloud>}(x,y,a);

//依次执行上面5条命令可得到如下的分形图像

{<http://img2.ph.126.net/OKB6CGrIApIwaIRBKuTRwQ==/6630191454932527043.png>}

//如果把迭代次数与最终迭代半径作为度量考虑,继续执行如下2条命令得到如下结果
z=a-log(log(sqrt(x0^2+y0^2)))/Log(2);
cloud(x,y,z)
{<http://img0.ph.126.net/Iqhk6sxyMk2FZqMYigiQmg==/6630499318188335778.png>}