MATLAB,子函数和未知变量

时间:2017-02-26 03:13:13

标签: matlab

基本上,我试图使用fplot在数组[1,40]上绘制两个函数的错误。

错误功能显而易见:E = (V2-V1)/V2 因此,我将使用fplot(E,1,40)

然而,问题是该函数是根据P而不是V定义的,我无法用代数方式求解V

的等式

公式:

  

P1 =(R T)/(V-b) - x1 /(V (V + b))

     

P2 =(R T)/(V-b) - x2 /(V (V + b))

其中x1x2特定于每个等式,所有其他常量都已定义。

我可以使用solve()函数,或fzero使用for循环,以便查找V的值P从1到40不等吗?

我也很困惑fplot函数在一个主函数下定义多个subfunctions时如何工作。

1 个答案:

答案 0 :(得分:0)

正如你所说的,这两个方程隐含在V中。如果你想在改变P时绘制它们的误差,我建议你用多项式形式写出它们(这是Van der Waals状态方程,对吧?)。

例如,您可以这样做:

syms RT V b x1 x2 P1 P2
f = (RT)/(V-b) - x1/(V*(V+b))-P1
sol=solve(f,V)

它会给你

sol =
 root(P1*z^3 - RT*z^2 - P1*b^2*z - RT*b*z + x1*z - b*x1, z, 1)
 root(P1*z^3 - RT*z^2 - P1*b^2*z - RT*b*z + x1*z - b*x1, z, 2)
 root(P1*z^3 - RT*z^2 - P1*b^2*z - RT*b*z + x1*z - b*x1, z, 3)

通过求解此多项式(例如,使用函数polysolve)并选择正确的根,您可以为每个P获得V的值,然后您可以计算E并绘制数组的结果。