使用SymPy进行迭代计算,为不同的参数值求解相同的方程

时间:2018-04-13 10:08:16

标签: python sympy

我想用sympy进行电子设计计算。我有一个等式,我解决了某些电阻值。我只能使用标准电阻值,所以我在等式中再次设置选择值,并得到最终结果。

'''Example calculations for LMZ22010 switching regulator'''
from IPython import get_ipython
get_ipython().magic('reset -sf')

from sympy.solvers import solve
from sympy import Symbol, Eq, symbols, var

syms = ['Rent, Renb, Vuvlo']

var(','.join(syms))

Eq_uvlo = Eq(Rent/Renb, (Vuvlo/1.274) -1).subs({Rent:47e3, Vuvlo:8})
Renb = solve(Eq_uvlo, Renb)[0]
print(Renb)
>>> 8902.46

现在我想为Renb尝试9100。 但我无法计算最终的Vuvlo值,因为它已经被替换了。

Vuvlo = solve(Eq_uvlo.subs({Renb:9.1}), Vuvlo)

有没有更好的方法来进行这样的计算?

1 个答案:

答案 0 :(得分:2)

您有Renb作为符号,但随后为其分配了一个值。这意味着你丢失了那个符号,你就再也没有它了。使用不同的Python变量来保存与该符号相关的任何数值,如下面的Renb_sol

此外,数值的替换可以在以后进行,获得解决方案之后。这允许您使用相同的方程求解其中的不同变量。

Eq_uvlo = Eq(Rent/Renb, (Vuvlo/1.274) -1)
Renb_sol = solve(Eq_uvlo, Renb)[0].subs({Rent: 47e3, Vuvlo: 8})
print(Renb_sol)
Vuvlo_sol = solve(Eq_uvlo, Vuvlo)[0].subs({Rent: 47e3, Renb: 9100})
print(Vuvlo_sol)

打印

8902.46803449301
7.85400000000000