资源描述:
《非线性方程组迭代解法》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、非线性方程组迭代解法不动点法(unmovepoints.m)%非线性方程组的不动点法function[x,n]=unmovepoints(fun,x0,eps)ifnargin<3eps=1e-3;endx1=feval(fun,x0);n=1;while(norm(x1-x0))>=epsx0=x1;x1=feval(fun,x0);n=n+1;ifn>100000disp('无法收敛!');breakendendx=x1;Newton迭代法(newtons.m)%非线性方程组的Newton迭代法fun
2、ction[x,n]=newtons(fun1,fun2,x0,eps)ifnargin<4eps=1e-3;endx1=x0-feval(fun1,x0)/feval(fun2,x0);n=1;whilenorm(x1-x0)>=epsx0=x1;x1=x0-feval(fun1,x0)/feval(fun2,x0);n=n+1;ifn>100000disp('无法收敛!');breakendendx=x1;注:方程组的迭代与方程迭代不同之处在于收敛的判断不能用abs而应用norm(范数,默认值为向量各
3、元素的平方和的开方;norm(x1-x0)即为向量x1与x0对应元素差的平方和的开方。在对应的函数程序中应注意向量的运算与数量运算的区别。)用以上方法求解下列非线性方程组:函数:%非线性方程组函数(适用于不动点法)functionf=nonlinerequs1(x)f(1)=0.7*sin(x(1))+0.2*cos(x(2));f(2)=0.7*cos(x(1))-0.2*sin(x(2));%非线性方程组函数(适用于Newton迭代法)functionf=nonlinerequs2(x)f(1)=x(
4、1)-0.7*sin(x(1))-0.2*cos(x(2));f(2)=x(2)-0.7*cos(x(1))+0.2*sin(x(2));%非线性方程组函数导数(适用于Newton迭代法)functionf=nonlinerequs3(x)f=[1-0.7*cos(x(1)),0.2*sin(x(2));0.7*sin(x(1)),1+0.2*cos(x(2))];导数为,对多方程则类似。命令:fsolve(@nonlinerequs2,[0.5,0.5])[x,n]=unmovepoints(@nonl
5、inerequs1,[0,0],1e-6)[x,n]=newtons(@nonlinerequs2,@nonlinerequs3,[0,0],1e-6)计算结果:(eps=0.000001)迭代方法迭代次数解析解[0.526522621918180.50791971903685]-fsolve[0.526522661712950.50791973020932]-不动点法[0.526521300913880.50792028463452]30Newton迭代法[0.526522793690200.50791
6、961189450]16在某操作条件下,有如下四个独立的反应:其平衡常数分别为:0.08,0.06,0.001,0.05;反应前只有组分,没有其他物质,试求反应平衡时组分的摩尔分率为多少?解:设反应前组分的总摩尔数为1,反应平衡后四反应过程分别消耗组分的摩尔数为、、、,所以反应平衡时各组分的摩尔数为:::::::故有:reaction.m%非线性方程组函数(化学平衡,适用于fsolve)functionf=reaction(x)f(1)=x(1)/(1-x(1)-x(2)-x(3)-x(4))-0.08;
7、f(2)=(x(2)+x(4))*(x(2)+x(3))/(1-x(1)-x(2)-x(3)-x(4))/(1+x(2)+x(3)+x(4))-0.06;f(3)=x(3)*(x(2)+x(3))/(1-x(1)-x(2)-x(3)-x(4))/(1+x(2)+x(3)+x(4))-0.001;f(4)=x(4)*(x(2)+x(4))/(1-x(1)-x(2)-x(3)-x(4))/(1+x(2)+x(3)+x(4))-0.05;命令:x=fsolve(@reaction,[0.3,0.2,0.1,0]
8、)或x=fsolve(@reaction,[0.3,0.2,0.1,0],foptions)计算结果:x=[0.0514,0.1621,0.0050,0.1392]因此组分的摩尔分率为:reaction1.m%非线性方程组函数(化学平衡,适用于不动点法)functionf=reaction1(x)f(1)=(1-x(1)-x(2)-x(3)-x(4))*0.08;f(2)=(1-x(1)-x(2)-x(3)-x(4))*(1+