摘要:詳細(xì)推導(dǎo)了復(fù)平面上Newton迭代法的原理和計(jì)算公式,用MATLAB編制程序?qū)崿F(xiàn)了Newton迭代算法,得到了一些奇異、絢麗的分形圖形。對(duì)《數(shù)學(xué)實(shí)驗(yàn)》課程有一定的參考價(jià)值。
關(guān)鍵詞:Newton迭代法;分形;Matlab;數(shù)學(xué)實(shí)驗(yàn)
中圖分類號(hào):TP312文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2009)24-6997-03
The Principles of Newton Fractal and it's Realization Using MATLAB
ZHANG Jian, XU Cong-quan, FU Yong-zhi
(Department of Basic Courses, Southwest Forestry College, Kunming 650224, China)
Abstract: The Principles and formulas of Newton fractal was explained,fractal graphics of Newton iteration was created using Matlab.
Key words: newton iteration; fractal; Matlab; mathematical experimental
分形是非線性科學(xué)的一個(gè)重要分支,應(yīng)用于自然科學(xué)和社會(huì)科學(xué)的眾多領(lǐng)域。其中,分形圖形以其奇異、絢麗多彩的特點(diǎn),廣泛應(yīng)用于紡織印染、廣告設(shè)計(jì)、裝潢設(shè)計(jì)、計(jì)算機(jī)美術(shù)教學(xué)等領(lǐng)域[1]。
很多分形圖形都是用迭代的方式實(shí)現(xiàn)的,Newton迭代法就是其中的一種。由Newton迭代法產(chǎn)生的分形圖形稱為Newton分形[2]。很多文獻(xiàn)都對(duì)Newton分形進(jìn)行了介紹,但都沒有詳細(xì)的計(jì)算公式和算法說明,讀者很難編制相應(yīng)程序。本文詳細(xì)介紹了復(fù)平面上Newton迭代法的原理和計(jì)算公式,設(shè)計(jì)了相應(yīng)的實(shí)現(xiàn)算法,并用Matlab編制程序?qū)崿F(xiàn)了Newton分形的繪制,生成了一些奇異、瑰麗的分形圖形。
由于國內(nèi)高校《數(shù)學(xué)實(shí)驗(yàn)》課程大多采用Matlab軟件,同時(shí)很少涉及分形圖形的實(shí)驗(yàn),因此,Newton分形的Matlab實(shí)現(xiàn)可以豐富《數(shù)學(xué)實(shí)驗(yàn)》課程的內(nèi)容,對(duì)數(shù)學(xué)類、計(jì)算機(jī)類、藝術(shù)類學(xué)生和教師有一定的參考價(jià)值。
1 Newton迭代法
17世紀(jì),牛頓創(chuàng)立了一種依靠簡(jiǎn)單迭代計(jì)算求方程f(x)=0的根的方法[3]:
任取一點(diǎn)x0,利用公式(1)進(jìn)行迭代,若存在,則序列xt收斂于方程f(x)=0在x0附近的一個(gè)根。
我們把復(fù)數(shù)z應(yīng)用到公式(1)上,就得到了復(fù)平面上的Newton迭代公式:
現(xiàn)在,取一個(gè)較簡(jiǎn)單的函數(shù)f(z)=zn-1,則f(z)的一階導(dǎo)數(shù)f’(z)=nzn-1,代入公式(2)得:
根據(jù)復(fù)數(shù)的三角表示式,可記zt為:
zt=xt+iyt=|zt|(cosθ+isinθ) (4)
其中,稱為復(fù)數(shù)zt的模,θ為復(fù)數(shù)zt的輻角的主值,-π≤θ≤π。
輻角主值θ的計(jì)算方法如下[1]:
由復(fù)變函數(shù)知識(shí)可知:
將(5)、(6)兩式代入(3)得:
即有:
(8)
式(8)就是編寫程序時(shí)需要的迭代計(jì)算公式。
2 Newton分形的生成算法
在復(fù)平面上取定一個(gè)窗口,將此窗口均勻離散化為有限個(gè)點(diǎn),將這些點(diǎn)記為初始點(diǎn)z0,按公式(8)進(jìn)行迭代。其中,大多數(shù)的點(diǎn)都會(huì)很快收斂到方程f(z)=zn-1的某一個(gè)零點(diǎn),但也有一些點(diǎn)經(jīng)過很多次迭代也不收斂。為此,可以設(shè)定一個(gè)正整數(shù)M和一個(gè)很小的數(shù)δ,若果當(dāng)?shù)螖?shù)小于M時(shí),就有兩次迭代的兩個(gè)點(diǎn)的距離小于δ,即
則認(rèn)為z0是收斂的,即點(diǎn)z0被吸引到方程f(z)=zn-1=0的某一個(gè)根上;反之,當(dāng)?shù)螖?shù)達(dá)到了M,而|zt+1-zt|>δ時(shí),則認(rèn)為點(diǎn)z0是發(fā)散(逃逸)的。這就是逃逸時(shí)間算法的基本思想。
當(dāng)點(diǎn)z0比較靠近方程f(z)=zn-1的根時(shí),迭代過程就很少;離得越遠(yuǎn),則迭代次數(shù)越多甚至不收斂[2]。
由此設(shè)計(jì)出函數(shù)f(z)=zn-1的Newton分形生成算法步驟如下:
1)設(shè)定復(fù)平面窗口范圍,實(shí)部范圍為[a1,a2],虛部范圍為[b1,b2],并設(shè)定最大迭代步數(shù)M和判斷距離δ;
2)將復(fù)平面窗口均勻離散化為有限個(gè)點(diǎn),取定第一個(gè)點(diǎn),將其記為z0,然后按公式(8)進(jìn)行M次迭代。
每進(jìn)行一次迭代,按公式(9)判斷迭代前后的距離是否小于δ,如果小于δ,根據(jù)當(dāng)前迭代的次數(shù)M選擇一種顏色在復(fù)平面上繪出點(diǎn)z0;如果達(dá)到了最大迭代次數(shù)M而迭代前后的距離仍然大于δ,則認(rèn)為z0是發(fā)散的,選擇白色(也可換為其他顏色)在復(fù)平面上繪出點(diǎn)z0。
3)在復(fù)平面窗口上取定第二個(gè)點(diǎn),將其記為z0,按第(2)步的方法進(jìn)行迭代和繪制。直到復(fù)平面上所有點(diǎn)迭代完畢。
3 Matlab程序設(shè)計(jì)
Matlab是由MathWorks公司與1984年推出的數(shù)學(xué)軟件,原意為“矩陣實(shí)驗(yàn)室”。Matlab以其強(qiáng)大的功能和良好的開放性、面向問題性、易學(xué)易用等特點(diǎn),越來越被廣大科研人員和工程計(jì)算人員以及高校學(xué)生和老師所重視[4]。國內(nèi)外《數(shù)學(xué)實(shí)驗(yàn)》課程大多采用Matlab軟件作為計(jì)算工具,為此,我們使用Matlab編制了繪制Newton分形的程序。
程序由3個(gè)函數(shù)組成:
1)主函數(shù)newton.m:
function f = newton(n)
m=13;%迭代次數(shù)
a1=-2;%復(fù)平面窗口實(shí)部范圍
a2=2;
b1=-1.5; %復(fù)平面窗口虛部范圍
b2=1.5;
delta=0.01 %收斂判定距離
hold on
for i = a1:0.02:a2
for j =b1:0.02:b2
%對(duì)每一個(gè)點(diǎn),調(diào)用迭代函數(shù),返回收斂時(shí)間(即判斷為收斂時(shí)的迭代次數(shù)M)
f=f_iterat(i,j,n,m,delta);
if f > 0%用7種顏色(不含白色)繪制收斂點(diǎn)
switch rem(f,7) %求f除以7的余數(shù)
case 0
plot(i,j,'b.')%藍(lán)色
case 1
plot(i,j,'c.')%青色
case 6
plot(i,j,'y.')%黃色
end
end
end
end
hold off
2)Newton迭代函數(shù)f_iterat.m:
%參數(shù)說明:(x,y)為點(diǎn)的實(shí)部與虛部,n為方程的冪次,m為最大迭代次數(shù),delta為收斂判斷距離
function f=f_iterat(x,y,n,m,delta)
delta = 0.01;%收斂判斷距離
f=0; %賦初值為0,表示發(fā)散
for i = 1:m
p = sqrt(x*x+y*y);%計(jì)算復(fù)數(shù)的模
seta = f_arg(x,y); %計(jì)算復(fù)數(shù)的輻角
x2=((n-1)*p*cos(seta)+p^(1-n)*cos((1-n)*seta))/n;%實(shí)部
y2=((n-1)*p*sin(seta)+p^(1-n)*sin((1-n)*seta))/n;%虛部
dis = sqrt((x2-x)^2+(y2-y)^2); %計(jì)算迭代前后兩點(diǎn)的距離
if dis < delta %收斂
f=i; %返回收斂時(shí)間
break%結(jié)束循環(huán)
end
x=x2;
y=y2;
end
其中,函數(shù)f_arg(x,y)為計(jì)算復(fù)數(shù)z=x+iy的輻角主值θ的函數(shù),根據(jù)公式(5)不難寫出。
4 實(shí)驗(yàn)結(jié)果
在MATLAB命令窗口中,輸入“>> newton(3)”或“>> newton(4)”,即可繪制出函數(shù)f(z)=z3-1或f(z)=z4-1對(duì)應(yīng)的Newton分形的圖形:
在圖1中,白色區(qū)域表示發(fā)散點(diǎn)所組成的區(qū)域,彩色區(qū)域?yàn)槭諗奎c(diǎn)組成的區(qū)域。收斂區(qū)域內(nèi)的點(diǎn),由于收斂時(shí)間的不同,所呈現(xiàn)的顏色不同,構(gòu)成了一幅五彩斑斕、奇異復(fù)雜的圖形。
輸入其他的n,則可繪制出函數(shù)f(z)=zn-1對(duì)于的Newton分形,舉例如下:
5 結(jié)論
用VB、VC等程序設(shè)計(jì)語言編寫的Newton分形生成程序需要兩個(gè)窗口:繪圖窗口和參數(shù)窗口,然后要建立繪圖窗口到參數(shù)窗口之間的映射[5-6]。而用MATLAB編制的程序直接在參數(shù)窗口(復(fù)平面窗口)中繪圖,所編制的程序簡(jiǎn)單易懂,所繪制的圖形奇異瑰麗、絢麗多彩,體現(xiàn)了數(shù)學(xué)、計(jì)算機(jī)、藝術(shù)三者的結(jié)合,學(xué)生有很大的吸引力,對(duì)有關(guān)專業(yè)的教師、學(xué)生以及分形愛好者有一定的參考作用。
而且,只要稍微改動(dòng)迭代參數(shù),如迭代次數(shù)M、判斷距離?啄、復(fù)窗口范圍等,所得到的圖形會(huì)出現(xiàn)很多意想不到的變化,很適合做為理工科《數(shù)學(xué)實(shí)驗(yàn)》課程的內(nèi)容。
參考文獻(xiàn):
[1] 秦宣云,任波.逃逸時(shí)間法生成Julia集的算法分析和具體實(shí)現(xiàn)[J].計(jì)算機(jī)工程與應(yīng)用,2007,43(5):30-32.
[2] 李水根.分形[M].北京:高等教育出版社,2004:20-30.
[3] 孫博文.分形算法與程序設(shè)計(jì)[M].北京:科學(xué)出版社,2004:61-91.
[4] 曾建軍,李世航,王永國 等.MATLAB語言與數(shù)學(xué)建模[M].合肥:安徽大學(xué)出版社,2005:1-30.
[5] 姜卓睿,宋中山,蘇斌.基于重根牛頓迭代法和比較算法實(shí)現(xiàn)的分形圖形的研究 [J].電腦開發(fā)與應(yīng)用,2008;21(7):12-13.
[6] 吳運(yùn)兵,李勇.牛頓迭代法在分形圖形生成上的應(yīng)用研究[J].西安科技大學(xué)學(xué)報(bào),2005,25(3):365-367.