方程的图形法迭代法直接法.ppt
第二讲 方程及方程组解法(上),方程 工程计算和科学分析的发动机。若干世纪来,方程是工程师和数学家花费大量时间进行研究的课题,即有古老的算法(如二分法),也有新颖的发现(如迭代的分形与混沌现象)本讲主要介绍非线性方程的实用解法,对线性方程组及数值分析中的矩阵分解法略作介绍:图形放大法(不要苛求精确解!)简单迭代法(迭代函数的选取)加速迭代法(加权平均的思想),线性方程组解的存在性,线性方程组的矩阵形式:AX=BAX=B的解可能出现三种情况:有解/无解/无穷解A=1 2 1;2 3 1;1-1-2;B=1;3;0;AB=A,B;rank(A)=rank(AB)%ans=0 故原方程组无解A=0 1-3 4;1 0-2 3;3 2 0-5;4 3-5 0;B=-5;-4;12;5;AB=A,B;rank(A)=rank(AB)%ans=1 有唯一解,线性方程组AX=B的求解,A=0 1-3 4;1 0-2 3;3 2 0-5;4 3-5 0;B=-5;-4;12;5;rank(A)=rank(A,B)x=AB%方法1:矩阵左除运算x=inv(A)*B%方法2:逆矩阵求解法(须方阵)L,U=lu(A);%方法3:LU分解法x=U(LB)Q,R=qr(A);%方法4:QR分解法x=R(QB)rref(A,B)%方法5:rref化行最简形 p13,非线性是更一般的属性?,我们面对的大多数方程(组)都是非线性的。定义:一些由实际问题列出的方程中常常包含三角函数、指数函数等,它们与n=2代数方程一起统称为非线性方程(组)例如:3x-ex=0;xsinx=1所以,求解这一类方程(组)更具现实意义:计算机技术和数学软件技术的飞速发展为我们实现经典方法(比如二分法)、创新新方法(比如图形放大法)提供了极大便利,甚至衍生出一些崭新的学科方向(比如课本第3章提到的 分形与混沌),最简捷和最一目了然的方法?,毫无疑问,图形放大法体现了现代数学软件在数据可视化方面无以伦比的优点:简捷和直观演练:p10,2.1x=-6:.001:6;plot(x,x.5+2*x.2+4,x,0,r-)grid onaxis(-2 2-200 200)追加练习:%8x5-12x4-26x3-13x2+58x+30=0fplot(8*x5-12*x4-26*x3-13*x2+58*x+30,-1,3);hold on;line(-5 5,0 0,color,r);grid on,图形放大法的步骤和技巧:,方程f(x)=0(1)建立坐标系,画曲线f(x)(2)观察曲线f(x)与x轴的交点(3)将其中一个交点局部放大(4)该交点的横坐标值就是方程的根技巧关键字(提高你的效率):步进精度选择(要足够适应放大倍数)坐标区域设定(方便直观准确地读数)交点追踪(强调x轴、双击重置,放大适可而止)延展:能不能写出不需人工干预的图形放大法?,简单迭代法(迭代收敛的情形),回到早先我们接触的引例:3x-ex=0 xn+1=(xn),n=0,1,2.,x0,迭代过程的图形化体现.,迭代过程体现在图像上如下图所示:,迭代算法的步骤与技巧:,方程f(x)=0(1)经过简单变形,化为xn+1=(xn),n=0,1,2.(2)*绘出y=x和y=(x)的图形,并观察(3)确定迭代初值x0,并代入程序进行迭代(4)序列发散回到第1步;收敛获得求解技巧关键字(提高你的效率):迭代格式的确定(是否唯一,是否一定收敛?)迭代初值的选择(迭代与初值选择是否有关?)迭代存在的缺陷(迭代能否逼近所有的解?)演练:在讲解加速迭代法后一齐举例,简单迭代法的改进,当遇到迭代格式不收敛怎么办?如何加快迭代速度?加速迭代法就是为了解决上述问题而产生的改进型迭代法:若迭代格式xn+1=(xn),n=0,1,2.,不收敛,则我们不直接用(x)迭代,改用(x)与x的加权平均 h(x)=(x)+(1-)x 进行迭代,基于某个确定原则,比如:=1/(1-(xn)改进后的加速迭代格式如下:附注:确定原则一般来自理论和经验,更多形式参见P13,简单迭代与加速迭代的比较1,用两种方法迭代方法求解方程x3-x2-x-1=0构造迭代格式:初值x0=0 x1=1;x2=1;x3=1;for k=1:20 x1=x13-x12-1;x2=(x22+x2+1)(1/3);x3=1+1/x3+1/x32;endx1,x2,x3,简单迭代与加速迭代的比较2,格式1发散,格式2,3收敛,具体细节为:,迭代格式1选取失败!迭代格式2,3成功收敛,收敛速度2快于3,简单迭代与加速迭代的比较3,改进前面已经被判定为“失败的”迭代格式1:x=(x)=x3-x2-1由前述确定原则有:,实验发现改进后的迭代格式1能够收敛,但速度仍然不如迭代格式2和3,相对自身而言“加速”注意:改进后的迭代格式1在迭代103次后才渐近至1.8393,并且需要在变量空间中双击查看 why?,通用的可控精度迭代程序,以方程 3x-ex=0 为例,演示如何将程序通用化:diedai.m 为固定计算x=1/3*exp(x)的可控精度程序diedais.m 为改写后的可适应一类方程的通用程序diedait.m 为增强后的加可选绘图参数的程序通用关于线性方程组的迭代算法参见数值计算:高斯消去法;szp42雅克比迭代法;szp54,p59高斯-赛德尔迭代法;szp53,实验一:图形放大法实验二:简单迭代法和加速迭代法Thats all3Q!,第二讲 方程及方程组解法(下),内容:本讲继续探讨针对方程组的迭代算法,主要 讲解、演练方程(组)求解的MATAB直接解法。目的:掌握几个方程(组)求解的相关函数。要求:能够处理带应用背景的方程问题。非线性方程组的迭代法(承接第二讲上)MATLAB软件直接求解法:solve fsolve fzero roots引例波音飞机定价策略(实验室讲解),除了简单迭代和加速迭代.,我们知道,简单迭代法和加速迭代法在迭代格式xn+1=(xn)的选取上都是基于方程自身的,其实基于存根区间、基于函数曲线解析性还有多种算法,下面略作介绍:介绍:p1213这些算法形式多样,目标只有一个逼近基于隔离存在根的区间,区间逼近:如二分法基于函数曲线解析特性,解析逼近:如牛顿法,隔离存在根的区间,区间逼近,二分法:简单,但效率很高的一种算法,函数曲线解析特性,解析逼近,牛顿切线法:可变形为多种迭代格式,如割线法,基于解析性质的迭代思路.,单点割线法的几何意义,非线性方程组的迭代法1,类似于单变量方程的简单迭代法,方程组要求一次迭代过程完成对n个变量的迭代.,非线性方程组的迭代法2,下面以实例促进对方法的理解和掌握:问题:一次迭代过程x1的代入可以有几种途径?,例1,非线性方程组的迭代法3,例1 用迭代法求解非线性方程组(格式1)x=0,0;2,0;3,3;n=input(选择初值 1/0,0 2/2,0 3/3,3:);x=x(n,:);%指定不同的初值,以考察初值对迭代的影响hold onfor k=1:10 x(1)=0.1*x(1)2+0.1*x(2)2+0.8;x(2)=0.1*x(1)*x(2)2+0.1*x(1)+0.8;disp(x)plot(k,x(1),ro,linewidth,2);plot(k,x(2),bp,linewidth,2);endgrid on,方程(组)直接求解函数:solve,利用MATLAB内置函数,我们可以直接对一些方程或方程组进行求解,免去书写代码的时间,但并不意味着可以取代迭代编程 why?solve 对单变量方程f(x)=0求解(解析解):例2 求解方程 ax2+bx+c=0 x=solve(a*x2+b*x+c)或者x=solve(a*x2+b*x+c=0)pretty(x),方程(组)直接求解函数:solve,solve 对单变量方程f(x)=0求解(数值解):例3 求解方程x3-2x2=x-1x=solve(x3-2*x2=x-1)double(x)fplot(x3-2*x2-x+1,-5,5);grid onaxis(-1 3-10 10)solve 对单变量方程f(x)=0求解(无穷解?):例4 求解方程tan(x)=sin(x)x=solve(tan(x)=sin(x)fplot(tan(x)-sin(x),-10*pi,10*pi);grid on,方程(组)直接求解函数:solve,solve 对多变量方程fn(xn)=0求解(解析解):例5 求解方程组 x2y2=0 x-1/2y=bs=solve(x2*y2,x-y/2=b);s.x,s.y solve 对多变量方程f(xn)=0求解(数值解):例6 求解方程组 x2y2-2x-1=0 x2-y2-1=0s=solve(x2*y2-2*x-1,x2-y2-1=0);s.x,s.y注意:solve要小心使用,因为其可能因为算法本身的原因,而“增加”一些根或“漏掉”一些根。在解决实际问题时,最好结合多种方法求解,比如先用作图法观察方程的解析性态,方程(组)直接求解函数:fsolve,fsolve 对非线性方程组的求解例7 求解方程组 sinx+y2+lnz-7=03x+2y-z3+1=0 x+y+z-5=0解法1:直接用solve函数求解s=solve(sin(x)+y2+log(z)-7,3*x+2y-z3+1,x+y+z-5);s.x,s.y,s.z,方程(组)直接求解函数:fsolve,解法2:编写被调函数,供fsolve调用求解function eq=nxxf(x)eq(1)=sin(x(1)+x(2)2+log(x(3)-7;eq(2)=3*x(1)+2x(2)-x(3)3+1;eq(3)=x(1)+x(2)+x(3)-5;y=fsolve(nxxf,1,1,1,1)%此句为主调语句,直接执行补充:编写内联函数,供fsolve调用求解fun=inline(1/3*exp(x)-x);ezplot(fun)grid ony=fsolve(fun,1,1),方程直接求解函数:fzero,针对一元函数方程,求零点 fzero例8 求解方程:x=(cosx)2x=fzero(x-(cos(x)2,1)例9 求解方程:xsinx=1 在0,5内的所有根fplot(x*sin(x)-1,0,5)grid onx1=fzero(x*sin(x)-1,1)x2=fzero(x*sin(x)-1,3),方程直接求解函数:roots,专用于多项式方程求解 roots例10 求解多项式方程x9+x8+1=0p=1,1,0,0,0,0,0,0,0,1;poly2str(p,x)%将数组形式的多项式转换成字符形式x=roots(p)fplot(x9+x8+1,-3,3)grid onaxis(-2 2-100 100)复平面范围的根,在二维实平面上不能表现注意:缺位系数以0补足!,实验一:编程实现课本引例实验二:编写二分法和牛顿法通用程序Thats all3Q!,