实验六_非线性方程求解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1 ai ln P 0, i 1, 2,3, 4
求解上述非线性方程组即可得出均相共沸混合物的沸点和组成。 编写 M 文件 azeofun.m function f=azeofun(XT,n,P,a,b,c,Q) x(n)=1; for i=1:n-1 x(i)=XT(i); x(n)=x(n)-x(i); end T=XT(n); p=log(P); for i=1:n d(i)=x*Q(i,1:n)'; dd(i)=x(i)/d(i); end for i=1:n f(i)=x(i)*(b(i)/(T+c(i))+log(x*Q(i,1:n)')+dd*Q(1:n,i)-a(i)-1-p); end 编写程序生成 ai , bi , ci 和 Q n=4; P=760; a=[18.607,15.841,20.443,19.293]'; b=[2643.31,2755.64,4628.96,4117.07]'; c=[239.73,219.16,252.64,227.44]'; Q=[1.0,0.192,2.169,1.611;0.316,1.0,0.477,0.524;0.377,0.360,1.0,0.296;0.524,0.282,2.06 5,1.0]; 利用不同初值计算(仅展示有限结果) 编写程序 XT0=[0.5,0.5,0,90]; XT=fsolve(@azeofun,XT0,[],n,P,a,b,c,Q) 得到如下结果 XT =
在压强 p 760 mmHg 下,为了形成均相共沸混合物,温度和组分分别是多少?请 尽量找出所有可能的解。 共沸混合物,是指由两种或两种以上物质组成的液体混合物,当在某种压力下被蒸 馏或局部汽化时,在气体状态下和液体状态下保持相同的组分。 该混合物由 4 个组分组成,组分 i 所占的比例为 xi i 1, 2,3, 4 ,则
命令 初值 0 0.3 0.6 0.9 1.2 1.5 fzero 根的近似值 0 0 0 1.4044148241 1.4044148241 1.4044148241 迭代次数 0 7 8 7 6 5 fsolve 根的近似值 0 0 -0.0000000002 1.4044148244 1.4044148241 1.4044148249 迭代次数 0 4 6 6 4 3
10
,取不同
的初值计算,输出初值、根的近似值和迭代次数,分析不同根的收敛域;自己构造 某个迭代公式用迭代法求解,并自己编写牛顿法的程序进行求解和比较。 编写程序确定根的大致位置 x=-1.5:0.01:1.5; y=sin(x)-x.^2/2; z=0*x; plot(x,y,'b',x,z,'k') 画出 sin x x 2 在区间 -1.5,1.5 上的图像
2
由图像可知 sin x x 2 0 有两个根,一个在 x 0 附近,另一个在 x 1.5 附近。
2
取不同初值 0,0.1,0.2,
1.4,1.5 用 fzero 和 fsolve 求解 sin x x 2 2 0 的所有根
初值取 0 编写程序 [x1,fv1,ef1,out1]=fzero(inline('sin(x)-x^2/2'),0) [x2,fv2,ef2,out2]=fsolve(inline('sin(x)-x^2/2'),0)
x2 = 1.4044 out2 = iterations: 6 初值取 1.2 编写程序 [x1,fv1,ef1,out1]=fzero(inline('sin(x)-x^2/2'),1.2) [x2,fv2,ef2,out2]=fsolve(inline('sin(x)-x^2/2'),1.2) 得到如下结果 x1 = 1.4044 out1 = iterations: 6 x2 = 1.4044 out2 = iterations: 4 初值取 1.5 编写程序 [x1,fv1,ef1,out1]=fzero(inline('sin(x)-x^2/2'),1.5) [x2,fv2,ef2,out2]=fsolve(inline('sin(x)-x^2/2'),1.5) 得到如下结果 x1 = 1.4044 out1 = iterations: 5 x2 = 1.4044 out2 = iterations: 3 查 workspace 得到精确结果
a4 19.293;
b4 4117.07;
c1 239.73,
c2 219.16,
c3 252.64,
c4 227.44;
1.0 0.192 2.169 1.611 0.316 1.0 0.477 0.524 Q 0.377 0.360 1.0 0.296 0.524 0.282 2.065 1.0
4 4
, i 1, 2,3, 4
其中 qij 表示组分 i 与组分 j 的交互作用参数, qij 构成交互作用矩阵 Q 。 对 P iP i 两边取对数,并带入 P i ,i
xq bi ln x j qij 4 j ji T ci j 1 j 1 x q k jk k 1
4 4
1 ai ln P 0, i 1, 2,3, 4
பைடு நூலகம்
由于只有当组分 i 参与到该共沸混合物中时才需要满足上式,所以将上式进一步写 成
b xq 4 4 j ji xi i ln x j qij 4 T ci j 1 j 1 x q k jk k 1
x
i 1
4
i
1, xi 0
均相共沸混合物应该满足稳定条件,即共沸混合物的每个组分在气体状态下和在液 体状态下具有相同的化学势能。在压强 P 不大的情况下,这个条件可以表示为:
P iP i , i 1, 2,3, 4
Pi 是组分 i 的饱和气相压强,与温度 T 有关,可以根据如下表达式确定:
-0.0000 编写程序
0.7803
-0.0000
76.9613
XT0=[0,0.5,0.5,70]; XT=fsolve(@azeofun,XT0,[],n,P,a,b,c,Q) 得到如下结果 XT = 0.0000 0.5858
0.4142
71.9657
用大量初值计算后除了纯物质的沸点外仅得到以上两组有效数据。 列表显示可能的解
k
0 1 2 3
xk a 5
得到如下结果 x1 = 0 out1 = iterations: 0 x2 = 0 out2 = iterations: 0 初值取 0.3 编写程序 [x1,fv1,ef1,out1]=fzero(inline('sin(x)-x^2/2'),0.3) [x2,fv2,ef2,out2]=fsolve(inline('sin(x)-x^2/2'),0.3) 得到如下结果 x1 = -2.4455e-029 out1 = iterations: 7 x2 = -9.6022e-012 out2 = iterations: 4 初值取 0.6 编写程序 [x1,fv1,ef1,out1]=fzero(inline('sin(x)-x^2/2'),0.6) [x2,fv2,ef2,out2]=fsolve(inline('sin(x)-x^2/2'),0.6) 得到如下结果 x1 = -1.0173e-026 out1 = iterations: 8 x2 = -2.4368e-010 out2 = iterations: 6 初值取 0.9 编写程序 [x1,fv1,ef1,out1]=fzero(inline('sin(x)-x^2/2'),0.9) [x2,fv2,ef2,out2]=fsolve(inline('sin(x)-x^2/2'),0.9) 得到如下结果 x1 = 1.4044 out1 = iterations: 7
从以上结果可知,牛顿法的收敛速度要快于根据方程直接构造迭代式的迭代法。 2. 给定 4 种物质对应的参数 ai , bi , ci 和交互作用矩阵 Q 如下:
a1 18.607,
b1 2643.31,
a2 15.841,
b2 2755.64,
a3 20.443, b3 4628.96,
从上表可以看出,对于方程求根,fzero 命令求出的解的稳定性要好于 fsolve 命令。 构造迭代公式 x
2sin x 用迭代法求解
编写程序 x(1)=1;b=1;k=1; while or(k==1,abs(b)>1e-10*abs(x(k))) x(k+1)=sqrt(2*sin(x(k))); b=x(k+1)-x(k); k=k+1; end n=k-1 得到如下结果 n= 12 用牛顿法求解 编写程序 x(1)=1;b=1;k=1; while or(k==1,abs(b)>1e-10*abs(x(k))) x(k+1)=x(k)-(sin(x(k))-(x(k)^2)/2)/(cos(x(k))-x(k)); b=x(k+1)-x(k); k=k+1; end n=k-1 得到如下结果 n= 6 两种方法所求结果如下
迭代次数 1 2 3 4 5 6 7 8 9 10 11 12 普通迭代法(迭代次数 12) 1.2972825327 1.3876798689 1.4023415974 1.4041688094 1.4043857914 1.4044114001 1.4044144203 1.4044147765 1.4044148185 1.4044148234 1.4044148240 1.4044148241 牛顿法(迭代次数 6) 1.7428163969 1.4640982835 1.4070280250 1.4044202764 1.4044148241 1.4044148241
x1
0 0
x2
0.7803 0.5858
x3
0 0.4142
x4
0.2197 0
T
76.9613 71.9657
3. 用迭代公式 xk 1 axk exp bxk 计算序列 xk ,分析其收敛性,其中 a 分别取 5, 11,15; b (>0)任意,初值 x0 1 。观察是否有混沌现象出现,并找出前几个分叉 点,观察分叉点的极限趋势是否符合 Feigenbaum 常数揭示的规律。 编写 M 文件 iter.m function x=iter(a,b) x0=1; x(1)=x0; for i=2:50 x(i)=a*x(i-1)*exp(-b*x(i-1)); end x=x'; 令 b 1 ,分别计算 a 5,11,15 时的 xk 编写程序 x1=iter(5,1); x2=iter(11,1); x3=iter(15,1); 不同 a 的计算结果如下
取不同初值01021415用fzero和fsolve求解的所有根初值取0编写程序x1fv1ef1out1fzeroinline?sinxx22?0x2fv2ef2out2fsolveinline?sinxx22?0得到如下结果x1初值取03编写程序x1fv1ef1out1fzeroinline?sinxx22?03x2fv2ef2out2fsolveinline?sinxx22?03得到如下结果x124455e029out196022e012out2初值取06编写程序x1fv1ef1out1fzeroinline?sinxx22?06x2fv2ef2out2fsolveinline?sinxx22?06得到如下结果x110173e026out124368e010out2初值取09编写程序x1fv1ef1out1fzeroinline?sinxx22?09x2fv2ef2out2fsolveinline?sinxx22?09得到如下结果x114044out114044out2初值取12编写程序x1fv1ef1out1fzeroinline?sinxx22?12x2fv2ef2out2fsolveinline?sinxx22?12得到如下结果x114044out114044out2初值取15编写程序x1fv1ef1out1fzeroinline?sinxx22?15x2fv2ef2out2fsolveinline?sinxx22?15得到如下结果x114044out114044out2查workspace得到精确结果命令初值fzerofsolve根的近似值迭代次数根的近似值迭代次数091404414824112140441482411514044148241从上表可以看出对于方程求根fzero命令求出的解的稳定性要好于fsolve命令
实验六 非线性方程求解
材料系 材 93 2009011976 邓陟
一.
实验目的
1. 用 MATLAB 软件掌握求解非线性方程的迭代法和牛顿法,并对结果作初步分析。 2. 通过实例练习用非线性方程求解的实际问题。
二.
实验内容
2
1. 分别用 fzero 和 fsolve 程序求方程 sin x x 2 0 的所有根,准确到 10
ln Pi ai bi , i 1, 2,3, 4 T ci
其中 ai , bi , ci 为常数。 i 是组分 i 的液相活度系数,可以根据如下表达式确定:
xq j ji ln i 1 ln x j qij 4 j 1 j 1 x q k jk k 1
相关文档
最新文档