用SymPy求解方程的两边
我有一个公式可以用来计算电子电路中的边界电感。使用SymPy这个工具,我可以通过 Lb.evalf(subs={...})
来计算 Lb
的值,只要我知道 D
、f
和 R
的值。
Lb = ((1-D)**2*D*R)/(2*f)
如果我已经知道了 Lb
的值,想要计算 D
、f
或 R
,有没有办法在不重新排列公式的情况下做到这一点?比如说,我知道公式中的所有值,除了 D
。
1 个回答
2
你可以使用sympy这个工具来求解变量。比如说:
import sympy
from sympy.abc import d,f,r,l
equation = sympy.Eq( ((1-d)**2*d*r)/(2*f), l )
print sympy.solve(equation,"f")
print sympy.solve(equation,"r")
print sympy.solve(equation,"d")
这样就可以得到关于f和r的方程解析解。
[d*r*(d - 1)**2/(2*l)]
[2*f*l/(d*(d - 1)**2)]
需要注意的是,求解d会得到一堆复杂的解,这个是正常的,因为这个方程是关于d的三次方程。
[-(-1/2 - sqrt(3)*I/2)*(-f*l/r + sqrt((-2*f*l/r + 2/27)**2/4 - 1/729) + 1/27)**(1/3) + 2/3 - 1/(9*(-1/2 - sqrt(3)*I/2)*(-f*l/r + sqrt((-2*f*l/r + 2/27)**2/4 - 1/729) + 1/27)**(1/3)), -(-1/2 + sqrt(3)*I/2)*(-f*l/r + sqrt((-2*f*l/r + 2/27)**2/4 - 1/729) + 1/27)**(1/3) + 2/3 - 1/(9*(-1/2 + sqrt(3)*I/2)*(-f*l/r + sqrt((-2*f*l/r + 2/27)**2/4 - 1/729) + 1/27)**(1/3)), -(-f*l/r + sqrt((-2*f*l/r + 2/27)**2/4 - 1/729) + 1/27)**(1/3) + 2/3 - 1/(9*(-f*l/r + sqrt((-2*f*l/r + 2/27)**2/4 - 1/729) + 1/27)**(1/3))]