第七章 非线性方程解法
2. Newton-下山法.
每次迭代在改变量前加一因子以保证收敛:
x n+1=xn-λn f(xn)/f′(xn)
这儿λn在0,1间,可用各种方法搜索,例如用分半法取1,1/2,1/4,…试探,使 下山条件∣f(xn+1)∣<∣f(xn)∣成立为止。
牛顿下山实验⑷
上机题目:牛顿下山法上机实验 实验目的:编制求单变量非线性方程组的程序.
实验要求: ①上机前充分准备,复习有关内容,写出计算步骤,查对程序; ②完成实验后写出完整的实验报告,内容应该包括:所用的算法语言,算法步
骤陈述,变量说明,程序清单,输出计算结果,结果分析等等;③用编好的程 序在Matlab环境中执行。利用Newton下山法来解方程;
计算步骤:①准备 选定初始近似值x0,计算f0=f(x0),f?0?f?(x0)。 ②迭代 按公式 x1?x0??f0f0?迭代一次,得新的近似值x1, 计算
f1?f(x1),f1??f?(x1).最初?=1,之后奖?减半进行试算直到下山条件 ∣
f(xn+1)∣<∣f(xn)∣成立。
③控制 如果满足∣f(xn+1)∣<∣f(xn)∣则终止迭代,;否则转步骤4; ④修改 如果迭代次数达到预先指定的次数N,或者f?=0,则方程失败;否则以(x1,f1,f1?)代替(x0,f0,f0?)转步骤2继续迭代。
算法例题:用牛顿下山方法解方程 x3-x-1=0,取迭代初值 x0=1.5, d=10?6. Newton下山法的Matlab程序:
function x=newton_xiashanfa(f,x0,d,max)
y=diff(f); %取导数 y=inline(y); %定义y f=inline(f); %定义f x(1)=x0; l=1;
disp('k l x '); %以指定格式输出'k','x'.
for k=1:max
x(k+1)=x(k)-l*f(x(k))/y(x(k)); % 计算公式
if abs(f(x(k+1))) else if abs(f(x(k+1)))>abs(f(x(k))) l=l/2; end w=k; end for k=1:w disp(sprintf('%d %f f ',k,l,x(k))) %输出算结果 end x=x(k+1); 运行结果: x=newton_xiashanfa('x^3-x-1',1.5,10^(-6),3) max =3 k x f(x(K+1)) f(x(k)) 3 1.325213 0.662708 0.463111 x = 1.5000 1.3478 1.3252 1.3247 Newton下山法的流程图:: 流程图解释:1) 输入x0,??;2)把1 赋给?;3)把x(0)??f(x(0))f?(x(0))赋给x1;4) 判断f(x1)?f(x0),若f(x1)?f(x0)那么表明下山成功,停止;若f(x1)?f(x0),那么到步骤5);5)判断???? ,若 ????,重迭x0;否则把步骤3); 3. 用差商代导数: x n+1=xn-f(xn)(xn-x n-1)/(f(xn)- f(xn-1)) 它免除了计算导数. ?腻给? ,到2⒋ Newton法解方程组 试以二个未知数的非线性方程组为例介绍. ?f1(x,y)?0??f2(x,y)?0 与一维情况一样,在初始近似(x0, y0)用Taylor展开线性化.取线性部分的零点为新的近似,即解方程组 ?f1??f1?x?00?y??f10???x?y??f?f?20?x?20?y??f20??y??x 求出Δx,Δy,再计算x1= x0+Δx, y1=y0+Δy 求出1次近似后,再用同样方法求2次近似,再求3次近似,4次近似,…直到相邻两次近似之差(的范数)在预定许可范围内. 下面看个例子; 例7 用Newton法解方程组, ?f1(x,y)?x2?y2?5?0??f2(x,y)?(x?1)y?(3x?1)?0 解:取初始近似(1,1)T 计算结果如下表: n x f1 J y (系数矩阵) f2 0 1.0000 2.0000 2.0000 -3.0000 1.0000 -2.0000 2.0000 -2.0000 1 1.2500 2.5000 4.5000 1.6250 2.2500 -0.7500 2.2500 0.3125 2 1.0000 2.0000 4.0556 0.1119 2.0278 -0.9722 2.0000 0.0556 3 1.0002 2.0004 4.0002 0.0007664 2.0001 -0.9999 2.0002 -0.0000054 4 1.0000 2.0000 4.0000 0.4666×10-7 2.0000 -1.0000 2.0000 0.1835×10-7