资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,非线性方程组求解及matlab实现,复习与练习,按以下要求编写一个函数计算 的值,其中x0时,y=;x4时,则没有通解公式可用,对于超越方程既不知有几个根,也没有同样的求解方式。实际上,对于n3代数方程以及超越方程都采用数值方法求近似根。,非线性方程数值求解原理,逐步扫描法,逐步扫描法效率较低,常用于求根的初始近似值,逐步扫描法计算示例,-方程x,2,-2=0的正数解,计算方程 的正数解,二分法,若函数f(x)在区间a,b内单调连续,且f(a)f(b)eps,x=(a+b)/2;,if,sign(f(x)=sign(f(b),b=x;,else,a=x;,end,k=k+1;,end,二分法的图形解释,二分法的MATLAB程序,二分法是一种可靠的算法,但计算速度较慢,二分法计算示例,-方程x,2,-2=0的正数解,计算方程 的正数解,求方程根的精确解,非线性方程(组)的求解一般采用迭代法进行。,迭代法,是一种重要的逐次逼近方法。这种方法用某个固定公式反复校正根的近似值,使之逐步精确化,最后得到满足精度要求的结果。,常见的迭代算法有,不动点迭代,牛顿法,弦截法,抛物线法,威格斯坦法(Wegstein),不动点迭代法,我们可以通过多种方法将方程式,转化为,例如方程,可以转化为以下不同形式,(1),(2),(3),不动点迭代法,从给定的初值,x,0,按上式可以得到一个数列:,x,0,x,1,x,2,x,k,如果这个数列有极限,则迭代格式是收敛的。这时数列,x,k的极限 就是方程的根,上述求非线性代数方程式数值解的方法称为直接迭代法(或称为不动点迭代法)。这个方法虽然简单,但根本问题在于当k-时,xk是否收敛于x*,也就是必须找出收敛的充分条件,例题,:,正确的收敛的迭代格式,例题,:,发散的迭代格式,例题,:,错误的收敛迭代格式,不动点,定义,:函数g(x)的一个不动点(fixed point)是指一个实数,P,,满足,P,=,g,(,P,),从图形角度分析,函数y=g(x)的不动点是y=g(x)和y=x的交点,不动点定理,设有(i)g,g,Ca,b,(ii),K,是一个正常数,(iii)p,0,(a,b),(iv)对所有x a,b,有g(x)a,b,如果对于所有x a,b,有|g(x)|K1,则迭代p,n,=g(p,n-1,)将不会收敛到,P,点。在这种情况下,,P,称为排斥(repelling)不动点,而且迭代显示出局部发散性,不动点迭代的图形解释,单调收敛,振荡收敛,不动点迭代的图形解释,单调发散,振荡发散,牛顿法,牛顿法也称为牛顿-拉普森法或者切线法。由于这个方法的计算结果颇佳,而计算过程也比较简单,所以被普遍采用。,牛顿法的核心内容是通过泰勒级数将非线性方程式转化为线性方程式,然后用迭代法求解。,牛顿法原理,设方程式 的近似根为,则 对 的泰勒级数展开式为,牛顿法的几何意义,Y,O,X,切线方程,例:牛顿法计算,x2-25=0的解,f(x)=x,2,-25,则f(x)=2x,可构造迭代公式如下:,取x,0,=2代入上式,得x,1,=7.25,继续递推,,依次得5.35、5.0114、5.000001、5.0000000001,牛顿法注意事项,在有根区间a,b上,连续且不变号,则只要选取的初始近似根x,0,满足 ,切线法必定收敛。,在单根附近,牛顿公式恒收敛,而且收敛速度很快。但是需要注意如果初始值不在根的附近,牛顿公式不一定收敛,在实际使用中,牛顿法最好与逐步扫描法结合起来,先通过逐步扫描法求出根的近似值,然后用牛顿公式求其精确值,以发挥牛顿法收敛速度快的优点,牛顿迭代法收敛速度快,但它要求计算函数导数的值,弦截法,牛顿迭代法收敛速度快,但它要求计算函数导数的值。在科学与工程计算中,常会碰到函数导数不易计算或者算式复杂而不便计算的情况,弦截法的基本思想与牛顿法相似,即将非线性函数线性化后求解。两者的差别在于弦截法实现函数线性化的手段采用的是两点间的弦线(用差商代替导数),而不是某点的切线,弦截法示意图,弦截法注意事项,与牛顿法只需给出一个初值不同,弦截法需要给出两个迭代初值。如果与逐步扫描法结合起来,则最后搜索的区间的两个端点值常可作为初值,弦截法虽比牛顿法收敛速度稍慢,但在每次迭代中只需计算一次函数值,又不必求函数的导数,且对初值要求不甚苛刻,是工程计算中常用的有效计算方法之,一,弦截法虽比牛顿法收敛速度稍慢,但计算量小,逆二次插值,(IQI),若已知三个点a,b,c,及其函数值f(a),f(b),f(c),可以将这三点插值为关于y的二次函数。此抛物型一定与x轴有交点,在交点处y=0,对应点x=P(0)为下一步迭代解。,IQI法在迭代终点时收敛速度很快,但整个过程中速度不稳定,松弛迭代法,有些非线性方程用前面的不动点迭代法求解时,迭代过程是发散的。这时可以引入松弛因子,利用松弛迭代法。通过选择合适的松弛因子,就可以使迭代过程收敛,迭代法是计算数学的一种重要方法,用途很广,求解线性方程组和矩阵特征值时也要用到这种方法,松弛法注意事项,由上式可知,当松弛因子,=1,时,松弛迭代法变为不动点迭代法;当松弛因子,1,时,松弛法使迭代步长加大,可加速迭代,但有可能使原理收敛的迭代变为发散;当,0,1,时,松弛法使迭代步长减小,这适合于迭代发散或振荡收敛的情况,可使振荡收敛过程加速;当,0,时,将使迭代反方向进行,可使一些迭代发散过程收敛,松弛迭代法是否有效的关键因素是松弛因子的值能否正确选定。如果值选用适当,能使迭代过程加速,或者使原来不收敛的过程变成收敛;但如果值选用不合适,则效果相反,有时甚至会使原来收敛的过程变得不收敛。,松弛因子的数值往往要根据经验选定,,但选用较小的松弛因子,一般可以保证迭代过程的收敛,威格斯坦法,威格斯坦法在化工流程模拟中得到了广泛应用,威格斯坦法是一种迭代加速方法,Wegstein法注意事项,应注意,如果,x1,和,x2,两点选择不当,则连线的斜率等于,1,,与直线,y=x,无交点,从而迭代无法进行,这就是,Wegstein,法应当避免的陷井。引入一个量,C,Wegstein法注意事项,令,q,1-,C,当,q,0,时,,Wegstein,法退化为简单的不动点迭代,当,0,q,0,时,迭代能稳定收敛,但收敛较慢,当,q,0,可以加速收敛,但易导致不稳定,为了加速收敛又避免不稳定,常取,-5,q,c=1-1 0-1;,r=roots(c),r=,1.4656,-0.2328+0.7926i,-0.2328-0.7926i,polyval(c,r(1),ans=,-2.5535e-015,非线性方程求解函数,fzero,fzero,对于一般的单个超越方程,可以采用fzero函数求解,fzero函数结合使用二分法、割线法和可逆二次内插法,从两个函数值异号的点,a,b,开始,利用,a,b,获得割线点,c,重复以下步骤直至,abs(b,-a),*,abs(b,),或,f(b,)=0,重新排列,a,b,c,使得,f(a,),和,f(b,),异号,abs(f(b,)0,程序收敛于解;Cha2demo1,则得到结果,function,y=myfun(x),y=x3-2*sin(x);,1.编写函数,2.将上述文件保存为myfun的m文件,3.在命令窗口中键入,x=fzero(fun,1),则得结果,利用函数求解,1.编写文件,x=fzero(fun,1),function,y=fun(x),y=x3-2*sin(x);,2.,将上述文件保存为,excer1,的,m,文件,3.,在命令窗口键入,excer1,为求解此方程,有人编写如下程序,请问能得到正确结果吗?,例题8,求 的零点,,以t为自变量,取值范围为-10t10,a,b为参数,本例取值分别为0.1,0.5,function Cha2demo2,a=0.1;b=0.5;t=-10:0.01:10;,Y=sin(t).2.*exp(-a*t)-b*abs(t);,clf,plot(t,Y,r);hold on;plot(t,zeros(size(t),k);,xlabel(t);ylabel(y(t),hold off,zoom on,n=input(How many zero points are there?);,tt,yy=,ginput,(n);zoom off,for i=1:n,t0(i),y(i),exitflag=fzero(t)sin(t)2*exp(-a*t)-b*abs(t),tt(i);,end,disp(The zero points are:),fprintf(%.4ft,t0),fprintf(n),例题9,:,在945.36kPa(9.33atm)、300.2K时,容器中充以2mol氮气,试求容器体积。已知此状态下氮气的P-V-T关系符合范德华方程,其范德华常数为a4.17atmL/mol,2,,b0.0371L/mol。,数学模型:范德华方程变形可得,这是关于V的三次方程,可以由roots或fzero求解,P=9.33;%atm,T=300.2;%K,n=2;%mol,a=4.17;,b=0.0371;,R=0.08206;,Eq=P,-(P*n*b+n*R*T),a*n2,-a*n3*b;,roots(Eq),Script文件,函数文件,function Cha2demo3,P=9.33;%atm,T=300.2;%K,n=2;%mol,a=4.17;,b=0.0371;,R=0.08206;,V0=n*R*T/P%,5.2807,V,fval=fzero(PVTeq,V0,P,T,n,a,b,R),%-,function f=PVTeq(V,P,T,n,a,b,R),f=(P+a*n2/V2)*(V-n*b)-n*R*T;,函数文件,函数,fsolve,与fzero函数只能求解单个方程的根不同,fsolve函数可求解非线性方程组的解。其算法采用的是,最小二乘法,。,调用格式:,x,fval,exitflag,output,jacobian=fsolve(fun,x0,options,p1,p2,.),输入输出变量的意义同fzero函数,输出变量中的jacobian为函数fun在x处的Jacobian矩阵,定义待求解方程时,fun函数表示F(X)=0的形式!,例题10:,在命令窗口输入:,x0=1 1 1;,x=fsolve(fun,x0),function y=fun(x),y(1)=sin(x(1)+x(2)2+log(x(3)-7;,y(2)=3*x(1)+2x(2)-x(3)3+1;,y(3)=x(1)+x(2)+x(3)-5;,x=0.5991 2.3959 2.0050,fsolve函数的应用,在铜管内在1 atm下将异丙醇加热到400。已知铜是生产丙酮和丙醛的催化剂,或许还有某些异丙醇异构化为正丙醇。这三种产物的生成可用如下三个独立反应表示:,i,C3H7OH(IP)=,n,C3H7OH(NP),K,1=0.064,i,C3H7OH(IP)=(CH3)CO(AC)+H2,K,2=0.076,i,C3H7OH(IP)=CHHO(PR)+H2,K,3=0.00012,后续加工步骤需要正丙醇,虽然可含丙酮,但丙醛含量不能超过0.05(mol)%。在上述反应条件下,是否存在违反这种规定的可能性?,数学模型:各反应的化学平衡方程如下,function Cha2demo7,x0=0.05 0.2 0.01;,x=fsolve(EquiC3,x0);,CAC=x(3)/sum(x),if CAC0.05,disp(The AC concentration could not be over 0.05%),else,disp(The AC concentration could be over 0.05%),end,function f=EquiC3(x),f1=x(1)-0.064*(1-x(1)-x(2)-x(3);,f2=x(2)*(x(2)+x(3)-0.076*(1-x(1)-x(2)-x(3)*(1+x(2)+x(3);,f3=x(3)*(x(2)+x(3)-0.00012*(1-x(1)-x(2)-x(3)*(1+x(2)+x(3);,f=f1 f2 f3;,fsolve函数的应用,练习,求解:,初始值(-5,-5),1.,2.,复习,不动点迭代及其收敛性,roots、fzero、fsolve,表示待求解方程的函数编写方法与规定,函数的调用方法,初值的选取原则,
展开阅读全文