所在的位置: c++ >> 学习资料 >> Manderbrot集的绘制

Manderbrot集的绘制

Manderbrot集是复数分形中的一种,Manderbrot图像中每个位置都对应于公式n=x+y*i中的一个复数,其中x为实部,y为虚部,在迭代的复平面内各个位置的x,y坐标对应一个虚数的实虚部。Manderbrot通过反复迭代公式F(z)=f(z)+c,得到固定初始点下的一系列复数序列。对所有复平面上不同的c进行划分。每个位置的abs(z)值若大于10,则其对应的位置值设为1,否则为零。

基于以上规则,可以画出不同函数下的基础Manderbrot集图像(如下图)。

在abs(z)10的条件上再加上“abs(real(z))10

abs(imag(z))10”这一条件,即要求被标记的点其实部绝对值或虚部绝对值小于零。这就得出了类似Manderbrot集的一种分形图。

上图为反复利用f(z)=zz+z6+c进行迭代得到的类似Manderbrot集,实虚部变化区间在(-2,2)之间,取个数,迭代次数为50。画出光滑曲面后使用colormap的hot色图进行调色。

上图为反复利用f(z)=z3+c进行迭代得到的类似Manderbrot集,实虚部变化区间在(-8,8)之间,取个数,迭代次数为。画出光滑曲面后使用colormap的copper色图进行调色。

上两张图均为反复利用f(z)=zz+z4+c进行迭代得到的类似Juliet集,初始点的c每次固定,且皆为c=0+4*sqrt(-1),实虚部变化区间在(-2,2)之间,等间距取个数,迭代次数为60。第一张图画出光滑曲面后使用colormap的bone色图进行调色,第二张图在函数中设置了彩色渐变,并用colormap的prism进行着色,删去使曲面光滑的设置,得到描边。

上图为反复利用f(z)=z5+c进行迭代得到的类似Juliet集,初始c=0+6*sqrt(-1),实虚部变化区间在(-2,2)之间,取个数,迭代次数为50。画出光滑曲面后使用colormap的cool色图进行调色。

上图为反复利用f(z)=zz+sin(z)+c进行迭代得到的类似Juliet集,初始c=0+3*sqrt(-1),实虚部变化区间在(-10,10)之间,取个数,迭代次数为。画出光滑曲面后使用colormap的hot色图进行调色。

上图为反复利用f(z)=z6+z4+c进行迭代得到的类似Juliet集,初始c=0+5*sqrt(-1),实虚部变化区间在(-4,4)之间,取个数,迭代次数为。设置彩色渐变,画出光滑曲面后使用colormap的flag色图进行调色。

(附)部分图形的matlab代码:

Manderbrot集:

“iterateManderbrot.m”

functionr=iterateManderbrot(func,c,times)%定义函数,func为迭代函数,c为初始值,times为迭代次数

z=c;%z初始值为c

r=0;

fori=1:times

z=func(z,c);%循环迭代

ifabs(z)10(abs(real(z))10

abs(imag(real(z))10)

r=1;%z的矢量长度大于10时标记为1

return;

end

end

end

“iterateManderbrot2.m”

functionr=iterateManderbrot2(func,z0,times)%定义函数,func为迭代函数,z0为初始值,times为迭代次数

z=z0;%z初始值为z0

r=abs(real(z));%渐变

fori=1:times

z=func(z);%循环迭代

ifabs(z)10(abs(real(z))10

abs(imag(real(z))10)

r=0;%z的矢量长度大于10时标记为1

return;

end

end

end

“iterateManderbrot3.m”

functionr=iterateManderbrot3(func,z0,times)%定义函数,func为迭代函数,z0为初始值,times为迭代次数

z=z0;%z初始值为z0

r=abs(z);%渐变

fori=1:times

z=func(z);%循环迭代

ifabs(z)10(abs(real(z))10

abs(imag(real(z))10)

r=0;%z的矢量长度大于10时标记为1

return;

end

end

end

Manderbrot1:

f=

(z,c)z.^z+z.^6+c;%迭代函数定义

xspace=linspace(-2,2,);%定义横坐标空间

yspace=linspace(-2,2,);%定义纵坐标空间

[x,y]=meshgrid(xspace,yspace);%定义区域横纵坐标矩阵

logics=arrayfun(

(c)iterateManderbrot(f,c,50),x+y*sqrt(-1));%c取不同值进行周期50次的迭代,提取矢量长度小于10的点

figure;

contourf(logics);%绘制图

colormap(hot);

shadingflat;

说明:本作品的作者是北师大政府管理学院级学生黄雯锦,作品出自北师大系统科学学院张江老师为政府管理学院本科生开设的《matlab基础与应用》课程的课后作业。









































白癜风治疗最好方法
北京看白癜风效果好专科医院



转载请注明:http://www.nydjfy.com/xxzl/3959.html