方程式的数组输入在 Python 中得到数组输出

Array input into an equation get array output in Python

我是一名 python 初学者,我正在尝试求解具有两个自变量和一个因变量的三次方程。这是我试图求解 v:

的方程式

3pv^3−(p+8t)v^2+9v−3=0

如果我将 p 和 t 设置为单独的值,我可以用我当前的代码求解方程。但我想做的是设置一个 t 并求解一系列 p 值。我曾尝试将 p 设为数组,但是当我 运行 我的代码时,我得到的唯一 return 是“[]”。我认为这是我尝试打印解决方案的方式的问题,即我没有要求程序将解决方案打印为数组,但我不确定如何执行此操作。

到目前为止,这是我的代码:

# cubic equation for solution to reduced volume 

## define variables ##
# gas: specify

tc = 300
t1 = 315
t = t1/tc

from sympy.solvers import solve
from sympy import Symbol

v = Symbol('v')

import numpy as np
p = np.array(range(10))
print(solve(3*p*(v**3)-(v**2)*(p+8*t)+9*v-3,v))

关于如何正确打印出各种 p(在常数 t 下)的 v 解的任何提示?

我认为您可以简单地使用 for 循环。这似乎有效:

for p in range(10):
    solution = solve(3*p*(v**3)-(v**2)*(p+8*t)+9*v-3, v)
    print(solution)

此外,请注意范围 (10) 从 0 到 9(含)

与之前的答案相同的想法,但我认为将导入放在顶部并将方程和解决方案分开到单独的行等通常是一种很好的做法。让它更容易阅读

from sympy.solvers import solve
from sympy import Symbol
import numpy as np

tc = 300
t1 = 315
t = t1/tc

v = Symbol('v') # Variable we want to solve
p = np.array(range(10)) # Range of p's to test

for p_i in p: # Loop through each p, call them p_i
  print(f"p = {p_i}")
  equation = 3*p_i*(v**3)-(v**2)*(p_i+8*t)+9*v-3
  solutions = solve(equation,v)
  print(f"v = {solutions}\n")