Mandelbrot集和Julia集的分形图之matlab实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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中完成同样的操作,矩阵效率要远远优于循环效率。本文的两个程序均包含循环,当数据量大时,运行时间会很长。