方程及方程组解法.ppt

上传人:牧羊曲112 文档编号:6298441 上传时间:2023-10-15 格式:PPT 页数:27 大小:215KB
返回 下载 相关 举报
方程及方程组解法.ppt_第1页
第1页 / 共27页
方程及方程组解法.ppt_第2页
第2页 / 共27页
方程及方程组解法.ppt_第3页
第3页 / 共27页
方程及方程组解法.ppt_第4页
第4页 / 共27页
方程及方程组解法.ppt_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《方程及方程组解法.ppt》由会员分享,可在线阅读,更多相关《方程及方程组解法.ppt(27页珍藏版)》请在三一办公上搜索。

1、第八讲 方程及方程组解法,本讲教学目标 掌握线性方程解法 掌握线性方程组的直接解法 掌握线性方程组的迭代解法 了解非线性方程和方程组的函数解法 了解非线性方程和方程组的迭代解法,线性方程组的求解不仅在工程技术领域涉及,而且在其他许多领域也经常碰到,因此它的应用相当广泛。线性方程组的解法一般分为两类:一类是直接法,另一类是迭代法。非线性方程组的解法主要采用迭代法求解,常用的有不动点迭代法、牛顿迭代法和Broyden迭代法等几种。,8.1 线性方程及方程组的解法 8.1.1 线性方程的解法通过调用函数 roots 求解。例1 求解方程 的根。p=1,-6,-72,-27 r=roots(p)p=1

2、-6-72-27 r=12.1229-5.7345-0.3884,8.1.2 线性方程组的解法 1.直接解法(1)利用左除和右除运算符。通过这两个运算符,程序会自动根据输入的系数矩阵判断选用哪种方法进行求解。对线性方程组 Ax=b,利用左除运算符“”求解:x=Ab右除同样。,例2:求解以下方程组。a=1 2;2 3;b=8;13;x=ab x=2.0000 3.0000,(2)利用矩阵分解方法 LU分解将非奇异的方阵分解为一个下三角矩阵L和一个上三角矩阵U的乘积,即A=L*U。Ax=b 可变换为 x=U(Lb)或 x=U(LPb)分解格式:L,U=lu(A)产生三角阵U和下三角阵L。L,U,P

3、=lu(A)产生三角阵U和下三角阵L以 及一个置换矩阵P。,QR分解:把矩阵A分解为一个正交矩阵Q和一个上三角矩阵R的乘积,即A=Q*R。Ax=b 可变换为 x=R(Qb)或 x=E(R(Qb)分解格式:Q,R=qr(A)产生正交阵Q和上三角阵R。Q,R,E=qr(A)产生正交阵Q、上三角阵R及置换阵E。,Cholesky 分解:把对称正定的矩阵A分解成一个上三角矩阵R和其转置矩阵R的乘积,即A=RR。Ax=b 可变成 x=R(Rb)分解格式:R=chol(A)产生一个上三角阵R。R,p=chol(A)A对称正定时,p=0;否则p为一个正整数。如果A满秩,则R为一个阶为p-1的上三角阵,且满足

4、RR=A(1:p-1,1:p-1)。,例3:求解方程组。a=12-3 3;-16 3-1;1 1 1;b=15;-13;6;L,U=lu(a);x=U(Lb)x=1.0000 2.0000 3.0000,2.迭代解法迭代解法适合求解大型系数矩阵的方程组。迭代解法主要包括:Jacobi迭代法 Gauss-Serdel迭代法 超松弛迭代法 两步迭代法,(1)Jacobi迭代法对线性方程组Ax=b,若A为非奇异方阵,则可分解 A=D-L-U,其中D为对角阵,其元素为A的对角元素,L、U为A的下三角阵和上三角阵,Ax=b 可化为 x=D-1(L+U)x+D-1b。对应的迭代公式为:x(k+1)=D-1

5、(L+U)x(k)+D-1b如果序列 x(k+1)收敛于 x,则 x 必是方程Ax=b 的解。,function y,n=jacobi(A,b,x0,eps)if nargin=3 eps=1.0e-6;elseif nargin=eps x0=y;y=B*x0+f;n=n+1;end,Jacobi 迭代法的Matlab 函数文件Jacobi.m如下:,例4:用Jacobi迭代法求解线性方程组。设迭代初值为0,迭代精度为10-6。在命令中调用函数文件Jacobi.m,命令如下:A=10,-1,0;-1,10,-2;0,-2,10;b=9,7,6;x,n=jacobi(A,b,0,0,0,1.0

6、e-6),(2)Gauss-Serdel 迭代法将Jacobi迭代公式 Dx(k+1)=(L+U)x(k)+b 改为 Dx(k+1)=Lx(k+1)+Ux(k)+b,得到:x(k+1)=(D-L)-1Ux(k)+(D-L)-1b即 Gauss-Serdel迭代公式。和Jacobi迭代相比,Gauss-Serdel迭代用新分量代替旧分量,精度会高些。,function y,n=gauseidel(A,b,x0,eps)if nargin=3 eps=1.0e-6;elseif nargin=eps x0=y;y=G*x0+f;n=n+1;end,Gauss-Serdel迭代法的Matlab函数文

7、件gauseidel.m如下:,例5:用Gauss-Serdel迭代法求解线性方程组。设迭代初值为0,迭代精度为10-6。在命令中调用函数文件gauseidel.m,命令如下:A=10,-1,0;-1,10,-2;0,-2,10;b=9,7,6;x,n=gauseidel(A,b,0,0,0,1.0e-6),8.2 非线性方程及方程组的解法 8.2.1 调用函数求解1.使用fzero函数求解,其格式为:z=fzero(fname,x0,tol,trace)其中fname是函数文件名,x0为搜索起点。一个函数可能有多个根,但只给出离 x0 最近的根。tol 控制结果的相对精度,缺省取eps,tr

8、ace指定迭代信息是否在运算中显示,为1时显示,为0时不显示,缺省时取0。,例6:求 f(x)=x-10 x+2=0 在 0.5 附近的根。步骤如下:x0=0.5;%初值 z=fzero(x-10 x+2,x0)z=0.3758 x1=0 1;%定义包含根的区间 z=fzero(x-10 x+2,x1)z=0.3758,函数调用式如下:建立函数文件funx.m。function fx=funx(x)fx=x-10 x+2;调用fzero函数求根。z=fzero(funx,0.5)z=0.3758,2.使用fsolve函数求解 调用格式:x=fsolve(fun,x0,option)其中fun是

9、函数文件名,x0是初值,option为最优化工具箱的选项设定,默认缺省。最优化工具箱提供了 20 多个选项,用户可以使用optimset 命令将它们显示出来。如果想改变其中某个选项,则可以调用optimset()函数来完成。,例7:求解方程 在0,10内的解。首先作图如下:fplot(5*x2*sin(x)-exp(-x),0,0,10)发现在0,10区间中有4个解,分别在0,3,6,9附近,所以 用命令:fun=inline(5*x.2.*sin(x)-exp(-x);fsolve(fun,0 3 6 9,1e-6)ans=0.5018 3.1407 6.2832 9.4248,例8:求非线

10、性方程组在(0.5,0.5)附近的解。首先编制函数文件fc.m如下:function y=fc(x)y=x(1)-0.7*sin(x(1)-0.2*cos(x(2);x(2)-0.7*cos(x(1)+0.2*sin(x(2);然后在命令窗口输入:x0=0.5 0.5;fsolve(fc,x0)或 fsolve(fc,x0),结果如下:ans=0.5265 0.5079,8.2.2 其他解法 非线性方程(1)对分法(2)迭代法 非线性方程组(1)不动点迭代法(2)牛顿迭代法(3)Broyden迭代法,具体使用格式和方法参考教材P86-94。,例 9 编制程序,对任何函数求根,在运行该程序时将显

11、示函数与零点的图形,用户在可能的零点附近用鼠标点击采点,程序通过循环计算每个采集点的根,并输出结果。以函数 求零点为例,综合叙述相关命令的用法。,y=inline(sin(t)2*exp(-a*t)-b*abs(t),t,a,b);a=0.1;b=0.5;t=-10:0.01:10;%对自变量采样y_char=vectorize(y);Y=feval(y_char,t,a,b);clf%作人机对话界面plot(t,Y,r);hold on,plot(t,zeros(size(t),k);%画坐标横轴xlabel(t);ylabel(y(t),hold off title(用鼠标在函数零点附近连续点五点),%循环使用命令fzero,求鼠标采集点附近的函数根。for i=1:5 t1,y1=ginput(1);ttt(i),yyy(i),exitflag=fzero(y,t1,a,b)%在ttt(i)附近搜索0点endA(:,1)=ttt;A(:,2)=yyy;A,计算结果为:A=x f(x)-2.0074 0.0000-2.0074 0.0000-0.5198 0.0000 1.6738 0.0000 1.6738-0.0000,本节完,谢谢!,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号