1. 畫Manderbrot集
寫的時候在主程序中沒有寫具體的函數,而是直接在Iterateb函數中對於z的迭代進行賦值
Main code:
xspace=linspace(-2,2,1000);
yspace=linspace(-2,2,1000);
[x,y]=meshgrid(xspace,yspace);
logics=arrayfun(@(c)Iterateb(c,50),x+y*sqrt(-1));
figure;
pcolor(logics);
colormap(hot); //用了hot進行塗色
shading flat;
function result=Iterateb(z0,times)
z=0;
result=0;
for i=1:times
z=z^2+z0;
if abs(z)>10
result=abs(z);
return
end
end
End
將iterateb函數修改成
function result=Iterateb(z0,times)
z=0;
result=0;
for i=1:times
z=sin(z).^3+z0;
%z=z.^2+z0;
if abs(z)>10
result=i;
%result=abs(z);
return
end
end
end
關於iterateb的說明:
將程序改進了一下,記錄的是跳出的步數,這樣再用pcolor畫的時候,就有更多的顏色是相同的數字,從而圖像更好看。
可得到演變後的Manderbrot集(用了copper的配色)(這個真的有點難看)
2. 畫Juliet變形(金龍狂舞造型)
不知道哪個更好看一點。
左圖配色條如下:
程序:
fun=@(z)sin(z).^3-0.72*sqrt(-1)+0.125;
xspace=linspace(-2,2,500);
yspace=linspace(-2,2,500);
[x,y]=meshgrid(xspace,yspace);
logics=arrayfun(@(z)iterateJuliet2(fun,z,50),x+y*sqrt(-1));
figure;
pcolor(logics);
colormap(gray);
shading flat;
functionresult=iterateJuliet2(ff,z0,times)
z=z0;
result=0;
for i=1:times
z=ff(z);
ifabs(z)>2&&abs(real(z))<2//根據函數的可能取值定參考範圍
result=i;
return;
end
end
end
3. 畫小花
主程序:
c = 0+0.6*sqrt(-1);
fun=@(z)z.^5+c;//5次方的圖像傾向於小花
xspace=linspace(-2,2,500);
yspace=linspace(-2,2,500);
[x,y]=meshgrid(xspace,yspace);
logics=arrayfun(@(z)iterateJuliet2(fun,z,100),x+y*sqrt(-1));
figure;
pcolor(logics);
colormap(bone);
shading flat;
functionresult=iterateJuliet2(ff,z0,times)
z=z0;
result=0;
for i=1:times
z=ff(z);
if abs(z)>100&&abs(real(z))<100
result=i;
return;
end
end
end
畫出來之後需要調色,為了使得圖像好看,需要調色,雖然在colormap上用了bone,但是我還是自己手動調了色,加入了一個紫色在偏左邊的地方。
4. 畫一群奇怪的生物
我個人比較鍾愛冪函數,所以在前面嘗試了小花後,多嘗試了幾個。
三次方(與前面相同,也手動配了色,用了靚粉和紅棕,效果還行)
Main code:
fun=@(z)z.^3+0.3*sqrt(-1)+0.7;
xspace=linspace(-2,2,500);
yspace=linspace(-2,2,500);
[x,y]=meshgrid(xspace,yspace);
logics=arrayfun(@(z)iterateJuliet2(fun,z,50),x+y*sqrt(-1));
figure;
pcolor(logics);
colormap(gray);
shading flat;
function result=iterateJuliet2(ff,z0,times)
z=z0;
result=0;
for i=1:times
z=ff(z);
if abs(z)>100&&abs(real(z))<100//r取值比較大,這樣可以有更多的i值
result=i;
return;
end
end
end
然後只改了前面的冪,畫出了下面兩張。
(第1個圖)四次方:
fun=@(z)z.^4+0.3*sqrt(-1)+0.7;
其他的完全一致,用colormap(gray)保留gray的配色。
(第2個圖)六次方:
fun=@(z)z.^6+0.3*sqrt(-1)+0.7;
其他的完全一致,自定義將配色(下圖)改成太陽色的方案,可得到小太陽。
通過畫圖我們相當容易發現,冪決定了圖形有多少個凸點。在大的(三角、四邊、五邊、六邊)裡面的具體情況,則時由初始參數的位置決定的。
5. 畫風格奇怪的裝飾圖
fun=@(z)z-(sin(z).^4+2)/(4*sin(z).^3.*cos(z))
xspace=linspace(-2,2,500);
yspace=linspace(-2,2,500);
[x,y]=meshgrid(xspace,yspace);
logics=arrayfun(@(z)iterateJuliet2(fun,z,50),x+y*sqrt(-1));
figure;
pcolor(logics);
colormap(jet);
shading flat;
functionresult=iterateJuliet2(ff,z0,times)
z=z0;
result=0;
for i=1:times
z=ff(z);
ifabs(z)>10&&abs(real(z))<10
result=i;
return;
end
end
End
配色方案:
還有奇怪的夏威夷風格:
fun=@(z)(2*sin(z).^3+2)/(3*cos(z).^2;
xspace=linspace(-2,2,500);
yspace=linspace(-2,2,500);
[x,y]=meshgrid(xspace,yspace);
logics=arrayfun(@(z)iterateJuliet2(fun,z,50),x+y*sqrt(-1));
figure;
pcolor(logics);
colormap(colorcube);
shading flat;
functionresult=iterateJuliet2(ff,z0,times)
z=z0;
result=0;
for i=1:times
z=ff(z);
ifabs(z)>10&&abs(real(z))<10
result=i;
return;
end
end
end
在colorcube的基礎上小調一下色條:
說明:本作品的作者是北師大政府管理學院2014級學生張唯佳,作品出自北師大系統科學學院張江老師為政府管理學院本科生開設的《matlab基礎與應用》課程的課後作業。