预览加载中,请您耐心等待几秒...
1/2
2/2

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

5matlab牛顿法求解非线性方程组的数值解问题 5matlab牛顿法求解非线性方程组的数值解问题 5matlab牛顿法求解非线性方程组的数值解问题 P184牛顿法求解非线性方程组的数值解问题:-—5 牛顿法只可以求解方程个数和未知数个数相等的非线性方程组;;; 程序:注意xx1x2的形式: 程序一(NewtonS.m) functions=NewtonS(x,eps) ifnargin==1 eps=1e-6; elseifnargin<1 error(’pleaseinputtwoshu’); return; end end n=1;a=[0]; x1=NewtonSfun1(x);a=[n,x,x1]; x2=—NewtonSdfFun(x);x3=inv(x2);x0=x1*x3; whilenorm(x0)>=eps x=x0+x; x1=NewtonSfun1(x);n=n+1;a=[a;n,x,x1]; x2=-NewtonSdfFun(x);x3=inv(x2);x0=x1*x3; end a 程序2M文件(NewtonSfun1 .m)求解方程组的函数值: functiony=NewtonSfun1(x) y(1)=x(1)*x(1)-10*x(1)+x(2)*x(2)+8; y(2)=x(1)*x(2)*x(2)+x(1)-10*x(2)+8; y=[y(1),y(2)]; 程序3M文件求解方程组对每个参数的导数值(NewtonSdfFun.m) functiony=NewtonSdfFun(x) y(11)=2*x(1)—10; y(12)=2*x(2); y(21)=x(2)*x(2)+1; y(22)=2*x(1)*x(2)-10; y=[y(11),y(13);y(21),y(22)]; 调用语句:NewtonS([0.8,0.88]) 结果:a= 迭代次数y1函数值y2函数值y1导数值y2导数值 1。00000.80000.88001。41440.6195 2.00000.98360。95210.03790。3542 3.00000.99870。99570.00200.0319 4。00000。99990.99970.00000.0025 5。00001。00001。00000。00000。0002 6。00001。00001。00000.00000.0000 另一个简便方法: 程序一(NewtonS1.m): functions=NewtonS1(x,eps) ifnargin==1 eps=1e—6; elseifnargin〈1 error(’pleaseinputtwoshu’); return; end end n=1;a=[0]; [ffdff]=NewtonSfun(x); x1=ff; a=[n,x,x1]; x2=-dff;x3=inv(x2);x0=x1*x3; whilenorm(x0)〉=eps x=x0+x;[ffdff]=NewtonSfun(x); x1=ff;n=n+1;a=[a;n,x,x1]; x2=—dff;x3=inv(x2);x0=x1*x3; end a 将方程组的函数值和方程组的导数值写到同一个M文件中,借助于符号函数的应用,subs(函数,old,new) docsubs 程序二(NewtonSfun.m) function[ffdff]=NewtonSfun(x) symsx1x2 symsy1y2 symsy symsy11y12 symsy21y22dy y1=x1*x1-10*x1+x2*x2+8; y2=x1*x2*x2+x1-10*x2+8; y=[y1y2]; ff=subs(y,[x1,x2],x); y11=diff(y1,x1);y12=diff(y1,x2); y21=diff(y2,x1);y22=diff(y2,x2); dy=[y11,y12;y21,y22]; dff=subs(dy,[x1,x2],x); 调用语句: NewtonS1([0。8,0。88]) 结果: a= 1.00000。80000.88001。41440。6195 2.00000。99190。99140。04760.0527 3。00001.00001.00000。00010.0002 4.00001.00001.00000.00000。0000