【问题标题】:Cubic Equation solver in a loop: Python循环中的三次方程求解器:Python
【发布时间】:2021-04-21 16:57:47
【问题描述】:

我正在开发一个范德华状态方程计算器,它可以从电子表格中导入关键属性数据,并使用这些属性来计算用户指定的物质的体积和压缩系数。到目前为止,代码可以读取工作表、检索值并使用它们执行基本计算。我在求解可压缩因子的三次方程并使用该解来求解体积时遇到了麻烦。需要注意的是,我使用了一系列的压力和温度循环,这样我就有了一系列的可压缩性值,以及在各种条件下的体积范围。

问题:三次方程求解器将返回一个虚根列表,并且我很难将我的体积方程设置为等于我的可压缩性值列表来求解体积。

我对 python 完全陌生,感谢任何帮助!

from sympy import var,solve,Eq
import sympy 
y = var('y', real=True)
x = var('x', real=True)
VANDERWALS
#Finds critical values based on substance
value = df[df[0] == name][1].values[0]
value2 = df[df[0] == name][2].values[0]
value3 = df[df[0] == name][3].values[0]
value4 = df[df[0] == name][4].values[0]
#Solves for compressability factor
pc = value3*10 #conversion to bar
R = 8.314e-5
a = (27*(pow(R,2))*(pow(value2,2)))/(64*pc)
b = (R*value2)/(8*pc)
print(a)
print(b)
#Solves of volume across require temp and pressure range
for tloop in range(7):
    tempval = (tloop-2)*10
    temp = tempval+273
    for ploop in range(30):
        presval = (ploop+1)
        R = 8.314E-5
        A = (a*presval)/pow(R*temp,2)
        B = (b*presval)/(R*temp)
        eq1 = Eq((pow(y,3))-(pow(y,2)*(1+B))+(A*y)-(A*B),0)
        sol = solve(eq1)
        print(sol[0])
        eq2= Eq(((presval*x)/(R*temp)),sol)
        sol2 = solve(eq2)
        

【问题讨论】:

  • 嗨奥斯汀,你想做什么?从解决方案中过滤出复杂的根源?三次函数也有解或判别,你可以用它来隔离复杂的解。
  • 如果你能用 Mathjax 写出你正在求解的方程。
  • df[df[0] == name] 要么是 df[True] 要么是 df[False],这就是你想要的。
  • 我正在尝试过滤掉复数/虚数根,然后使用实数解来求解另一个方程。我应该有一个从 1-30 bar/253-313 Kelvin 的 Z 值列表以及对应于这些 Z 值的交易量列表。这有意义吗?
  • 在 sympy 中有一个 real_roots 函数,例如real_roots(x**3 + x + 2)

标签: python sympy cubic


【解决方案1】:

real_roots(eq) 将给出真实根的列表;如果所有数字都是有理数或nsolve(eq, guess-for-solution),则效果最好。在您的情况下,在一个循环中,您将获得最后一个已知的解决方案,因此也许您可以将其用作下一组参数的初始猜测。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-30
    • 1970-01-01
    • 2018-11-06
    • 2012-03-16
    • 1970-01-01
    相关资源
    最近更新 更多