我无法使用Mathematica中的NSolve或Solve特征获取两个未知数的两个非线性方程的值。我确信必须有一种方法来解决这个问题,但我不确定它是什么。这是我遇到问题的地方:
bco2=29.6833
bdec=209.891
aco2=2.75447*10^6
bco2=7.94935*10^7
P=41.4
T=411
R=83.1446
Solve[{P = (R*T)/(vliq - (xco2*bco2 + (1 - xco2)*bdec))
- (xco2^2*aco2 + 2*xco2*(1 - xco2)*0.87*Sqrt[aco2*adec]
+ (1 - xco2)^2*adec)/(vliq*(vliq + (xco2*bco2 + (1 - xco2)*bdec))),
xco2 = yco2*phivap/(Exp[Log[vliq/(vliq - (xco2*bco2 + (1 - xco2)*bdec))]
+ bco2/(vliq - (xco2*bco2 + (1 - xco2)*bdec))
- (2*(xco2*(aco2 + (1 - 0.13) Sqrt[aco2 + adec])))/(R*T*(xco2*bco2 + (1 - xco2)*bdec))*
Log[(vliq + (xco2*bco2 + (1 - xco2)*bdec))/vliq] + ((xco2^2*aco2 +
2*xco2*(1 - xco2)*0.87*Sqrt[aco2*adec] + (1 - xco2)^2*adec)*bco2)/(R*
T*(xco2*bco2 + (1 - xco2)*bdec)^2)*(Log[(vliq + (xco2*bco2 + (1 - xco2)*bdec))/vliq]
- (xco2*bco2 + (1 - xco2)*bdec)/(vliq + (xco2*bco2 + (1 - xco2)*bdec)))
- Log[(P*vliq)/(R*T)]])}, {xco2, vliq}]
我也试过使用NSolve功能但没有成功。我在mathematica中有点生疏,所以如果有人有任何见解,我会非常感激;提前谢谢你的帮助!
答案 0 :(得分:1)
你不能使用NSolve(或任何其他N函数,因为你有变量adec,phivap和yco2,它们没有被指定值),除非你要解决所有尚未分配的变量值。如果您知道这三个的值并且不包含它们,那么您可以成功使用NSolve。
如果没有,那么这种方法通常似乎适用于复杂的功能。
In[1]:= bco2 = 29.6833;
bdec = 209.891;
aco2 = 2.75447*10^6;
bco2 = 7.94935*10^7;
P = 41.4;
T = 411;
R = 83.1446;
NMinimize[{Norm[P - (R*T)/(vliq - (xco2*bco2 + (1 - xco2)*bdec)) - (xco2^2*aco2 +
2*xco2*(1 - xco2)*0.87*Sqrt[aco2*adec] + (1 - xco2)^2*adec)/(vliq*(vliq +
(xco2*bco2 + (1 - xco2)*bdec)))] + Norm[xco2 - yco2*phivap/(Exp[Log[vliq/(vliq-
(xco2*bco2 + (1 - xco2)*bdec))] + bco2/(vliq - (xco2*bco2 + (1 - xco2)*bdec)) -
(2*(xco2*(aco2 + (1 - 0.13) Sqrt[aco2 + adec])))/(R*T*(xco2*bco2 + (1 - xco2)*
bdec))*Log[(vliq + (xco2*bco2 + (1 - xco2)*bdec))/vliq] + ((xco2^2*aco2 +
2*xco2*(1 - xco2)*0.87*Sqrt[aco2*adec] + (1 - xco2)^2*adec)*bco2)/(R*T*(xco2*
bco2 + (1 - xco2)*bdec)^2)*(Log[(vliq + (xco2*bco2 + (1 - xco2)*bdec))/vliq] -
(xco2*bco2 + (1 - xco2)*bdec)/(vliq + (xco2*bco2 + (1 - xco2)*bdec))) -
Log[(P*vliq)/(R*T)]])]},
{xco2, vliq, adec, phivap , yco2}]
Out[8]= {0.00652106, {xco2 -> -0.0000130274, vliq -> -0.154973,
adec -> -0.0437708, phivap -> 0.45787, yco2 -> 0.271248}}
通过使左手侧和右手侧的差异尽可能小来起作用。如果你的函数有一些局部最小值,那么这可能会被困在其中一个。如果您有关于结果可能位置的信息,那么您可以添加约束并帮助它找到合适的解决方案。