| 查看: 1045 | 回复: 1 | |||
[求助]
高等反应工程教程例题与习题 例1-2matlab程序 已有1人参与
|
|
function ChemEqui2 %最小自由能法计算甲烷水蒸气转化反应的化学平衡组成 % format long %x(1):CH4物质的量;x(2):H2O物质的量;x(3):CO物质的量;x(4):CO2物质的量; %x(5):H2物质的量;x(6):拉格朗日乘子1;x(7):拉格朗日乘子2;x(8):拉格朗日乘子3 x0=[0.10,0.7,1.2,0.3,6,5000,1500,180000]; % op=optimset('MaxFunEvals',100000); x=fsolve(@equi2,x0); function f=equi2(x) f1=19.3*1000+8314*log(x(1)/(x(1)+x(2)+x(3)+x(4)+x(5)))+x(6)+4*x(7); f2= -192.6*1000+8314*log(x(2)/(x(1)+x(2)+x(3)+x(4)+x(5)))+2*x(7)+x(8); f3=-200.6*1000+8314*log(x(3)/(x(1)+x(2)+x(3)+x(4)+x(5)))+x(6)+x(8); f4=-395.9*1000+8314*log(x(4)/(x(1)+x(2)+x(3)+x(4)+x(5)))+x(6)+2*x(8); f5=8314*log(x(5)/(x(1)+x(2)+x(3)+x(4)+x(5)))+2*x(7); f6=x(1)+x(3)+x(4)-2; f7=4*x(1)+2*x(2)+2*x(5)-14; f8=x(3)+2*x(4)+x(2)-3; f=[f1,f2,f3,f4,f5,f6,f7,f8]; 按照教程上的算法,运行得到如下 fsolve stopped because the relative size of the current step is less than the default value of the step size tolerance squared and the vector of function values is near zero as measured by the default value of the function tolerance. 这个是初始值设置的问题还是求不出解? |
» 猜你喜欢
自然基金已经彻底沦为学术资源的交换工具
已经有4人回复
小木虫没落了,除了祈祷帖子,几乎看不到有价值的帖子
已经有17人回复
面上的水很深
已经有25人回复
国社科通讯评审
已经有7人回复
5个%2F,非固定段22个字母
已经有13人回复
生命口面上会评结束了吗大家有知道结果吗?现在还没有结果正常不?
已经有9人回复
投英文期刊如何查重
已经有6人回复
生生命学部会评
已经有4人回复
H口,面上,时间戳7月7日。
已经有3人回复
会评
已经有5人回复
【答案】应助回帖
★
感谢参与,应助指数 +1
jjdg: 金币+1, 感谢参与 2017-09-21 22:07:46
感谢参与,应助指数 +1
jjdg: 金币+1, 感谢参与 2017-09-21 22:07:46
|
我在matlab 2017里运行了上述的程序,没有问题,完全有解,而且求解出来的结果也合理。有一个警告是因为最后一步的步骤很小,程序怀疑可能函数在零点处有突变。不过从最后一步函数的值来看,最后结果为[-4.54747350886464e-12 0 0 5.82076609134674e-11 -1.36424205265939e-12 0 0 4.44089209850063e-16],很接近于零。另外求出来的解也有物理意义。 你的matlab是哪个版本?在大概2007版之后,函数function就可以直接在matlab脚本script文件中定义。而高等反应工程中matlab代码是老版本,所以编写的代码都是以大的函数function写成的。此时函数文件既不能调用workspace里的变量,生成的变量也在函数返回时自动清除。要查看运行解的结果可以把代码改成如下(那个书上所有的源码都可以那么改): %最小自由能法计算甲烷水蒸气转化反应的化学平衡组成 % format long %x(1):CH4物质的量;x(2):H2O物质的量;x(3):CO物质的量;x(4):CO2物质的量; %x(5):H2物质的量;x(6):拉格朗日乘子1;x(7):拉格朗日乘子2;x(8):拉格朗日乘子3 x0=[0.10,0.7,1.2,0.3,6,5000,1500,180000]; % op=optimset('MaxFunEvals',100000); x=fsolve(@equi2,x0); function f=equi2(x) f1=19.3*1000+8314*log(x(1)/(x(1)+x(2)+x(3)+x(4)+x(5)))+x(6)+4*x(7); f2= -192.6*1000+8314*log(x(2)/(x(1)+x(2)+x(3)+x(4)+x(5)))+2*x(7)+x(8); f3=-200.6*1000+8314*log(x(3)/(x(1)+x(2)+x(3)+x(4)+x(5)))+x(6)+x(8); f4=-395.9*1000+8314*log(x(4)/(x(1)+x(2)+x(3)+x(4)+x(5)))+x(6)+2*x(8); f5=8314*log(x(5)/(x(1)+x(2)+x(3)+x(4)+x(5)))+2*x(7); f6=x(1)+x(3)+x(4)-2; f7=4*x(1)+2*x(2)+2*x(5)-14; f8=x(3)+2*x(4)+x(2)-3; f=[f1,f2,f3,f4,f5,f6,f7,f8]; end |
2楼2017-09-21 16:53:05











回复此楼