牛顿逼近法
求代数方程f(x)=0的精确解是很难的事情,特别地当f(x)是 高于5次的多项式时,不能通过多项式系数的有限次运算得到根的表达式。在这种情况下求 方程的近似解却是可以的,牛顿法就是一种比较好的逐次逼近法。牛顿法在求根过程中逼近很快,用计算机计算是十分方便的。
牛顿法的本质仍然是“以直代曲”,首先猜测一个值x1,用它近似方程的根 c,用过(x1,f(x1))点的切线y=f(x1)+f’(x1)(x-x1)近似代替曲线f(x),然后用切线方程y=f(x1)+f’(x1)(x-x1)=0的根x=x2=x1-f(x1)/f’(x1)近似代替曲线方程的根c,这样就得到c的第二个近似值。依此类推可得到迭代公式
在复平面上选定一个区域,对于任意初始点(除去(0,0)点),讨论它在牛顿法迭代过程中的行为。一般选f(x)=xp-1,其中p是大于2的正整数。这样,迭代公式还可以 改写为
对于x3-1=0,有三个根:x1=1,x2=[-1+SQR(3)i]/2,x3=[-1-SQR(3)i]/2,三个根均匀地分布在单位圆上。这三个根周围构成三个“吸引盆”(attractor basin),初始点迅速被吸引到盆内,最后停止在三点之一。用计算机迭代,以当前点到三个终点的距离远近为标准,标上不同的颜色,就能得到美丽的分形图,特别是在120?线、240?线附近有复杂的“项链”结构。
迭代过程照例要先将复数分解为实部和虚部:
x→2x/3+(x2-y2)/[3(x2+y2)2],
y→2y/3-2xy/[3(x2+y2)2]
以f(x)=x3-1为例,用牛顿法生成分形图形的一个简单的matlab源程序如下:
% 牛顿求根法
N=160;
warning off
[X,Y]=meshgrid((-N:N)/N*2);
[m,n]=find(X==0&Y==0);
X(m,n)=1;
Y(m,n)=1;
R=zeros(321);
G=R;
B=R;
for k=1:30;
Xn=2*X/3+(X.^2-Y.^2)./(3*(X.^2+Y.^2));
Yn=2*Y/3-2*X.*Y./(3*(X.^2+Y.^2));
X=Xn;
Y=Yn;
end
R(X>0.8)=1;
G(Y<-0.5)=1;
B(Y>0.5)=1;
imshow(cat(3,R,G,B))