Mandelbrot集和Julia集的分形图之matlab实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Mandelbrot集和Julia集的分形图之matlab实现

基于逃逸时间算法

1. Mandelbrot集

function Mandelbrot(res,iter,xc,yc,xoom)

%Mandelbrot

% res是目标分辨率,iter是循环次数,(xc,yc)是图像中心,xoom是放大倍数

x0=xc-2/xoom;x1=xc+2/xoom;

y0=yc-2/xoom;y1=yc+2/xoom;

x=linspace(x0,x1,res);

y=linspace(y0,y1,res);

[xx,yy]=meshgrid(x,y);

z=xx+yy*1i;

C=z;

N=zeros(res,res); %初始化N,最终根据N,对各点进行染色

tic %显示tic和toc间的程序运行时间

for k=1:iter

z=z.^2+C; %对空间上每点都进行迭代

N(abs(z)>4)=k; %逃逸半径为4,诺某点逃逸,记录逃逸时间k,未逃逸则时间为0 z(abs(z)>4)=0;

C(abs(z)>4)=0;

end

imshow(N,[]);

toc

end

>>Mandelbrot(512,100,0,0,1)

>>Mandelbrot(512,128,-1.478,0,300)

2.Julia集

function Julia(c,res,iter,xc,yc,xoom)

%Julia集

%c为参数, res是目标分辨率,iter是循环次数,(xc,yc)是图像中心,xoom是放大倍数x0=xc-2/xoom;x1=xc+2/xoom;

y0=yc-2/xoom;y1=yc+2/xoom;

x=linspace(x0,x1,res);

y=linspace(y0,y1,res);

[xx,yy]=meshgrid(x,y);

z=xx+yy*1i;

N=zeros(res,res);

C=c*ones(res,res);

for k=1:iter

z=z.^2+C;

N(abs(z)>2)=k;

C(abs(z)>2)=0;

z(abs(z)>2)=0;

end

colormap jet;

image(x,y,N);

axis square;

end

>>Julia(i,512,200,0,0,1) >> Julia(i,512,200,0,0,2000)

上面两张图很好的反映分形的自相似性,右图是左图关于原点放大2000倍的情况。>>Julia(0.1+0.7i,512,200,0,0,1)

>>Julia(-0.8-0.21i,512,200,0,0,1)

3.newton分形

参考:

附注:

4*.matlab的矩阵运算和循环运算比较function test(N)

A=rand(N);

tic

B=A>0.5;

toc

tic

for i=1:N

for j=1:N

if A(i,j)>0.5

B(i,j)=1;

else B(i,j)=0;

end

end

end

toc

运行程序:

>> test(100)

Elapsed time is 0.000108 seconds.

Elapsed time is 0.000476 seconds.

>> test(1000)

Elapsed time is 0.029430 seconds.

Elapsed time is 0.053551 seconds.

>> test(10000)

Elapsed time is 0.565822 seconds.

Elapsed time is 24.152359 seconds.

从中可知在matlab中完成同样的操作,矩阵效率要远远优于循环效率。本文的两个程序均包含循环,当数据量大时,运行时间会很长。

相关文档
最新文档