【问题标题】:How can I solve a simultaneous equation in Python using sympy如何使用 sympy 在 Python 中求解联立方程
【发布时间】:2020-04-15 16:16:13
【问题描述】:

我有以下两个等式:

40 = Vmax*5.041667 + (Vmax**2/Amax)*sympy.exp((-Amax/Vmax)*5.041667) - (Vmax**2/Amax)
20 = Vmax*2.897628 + (Vmax**2/Amax)*sympy.exp((-Amax/Vmax)*2.897628) - (Vmax**2/Amax)   

我在 sympy 中编写了以下代码来求解这个联立方程来求解 Vmax 和 Amax

import sympy as sp
Vmax, Amax = symbols('Vmax, Amax')

eq1 = Vmax*5.041667 + (Vmax**2/Amax)*sympy.exp((-Amax/Vmax)*5.041667) - (Vmax**2/Amax)
eq2 = Vmax*2.897628 + (Vmax**2/Amax)*sympy.exp((-Amax/Vmax)*2.897628) - (Vmax**2/Amax)         

print(nsolve((eq1, eq2), (Vmax, Amax), (40,20)))

此代码给出了错误的答案。而且我认为正确的以下代码计算时间太长。

from sympy import *
Vmax, Amax = symbols('Vmax, Amax')
eq1 = Vmax*5.041667 + (Vmax**2/Amax)*sympy.exp((-Amax/Vmax)*5.041667) - (Vmax**2/Amax)
eq2 = Vmax*2.897628 + (Vmax**2/Amax)*sympy.exp((-Amax/Vmax)*2.897628) - (Vmax**2/Amax)
solve([eq1-40, eq2-20], (Vmax, Amax))

知道我可以做些什么来修复我的代码以便得到正确的答案吗?

【问题讨论】:

    标签: python sympy


    【解决方案1】:

    您误解了nsolve 的工作原理。第三个参数是用于启动寻根算法的初始猜测。这里[1, 1] 可以正常工作:

    In [26]: from sympy import symbols, Eq, nsolve, exp                                                                                                            
    
    In [27]: Vmax, Amax = symbols('Vmax, Amax')                                                                                       
    
    In [28]: eq1 = Eq(Vmax*5.041667 + (Vmax**2/Amax)*exp((-Amax/Vmax)*5.041667) - (Vmax**2/Amax), 40) 
        ...: eq2 = Eq(Vmax*2.897628 + (Vmax**2/Amax)*exp((-Amax/Vmax)*2.897628) - (Vmax**2/Amax), 20)                           
    
    In [29]: nsolve([eq1, eq2], [Amax, Vmax], [1, 1])                                                                                 
    Out[29]: 
    ⎡11.8641453843429⎤
    ⎢                ⎥
    ⎣9.41244210257784⎦
    

    请注意,这只从任何特定的初始猜测开始找到一个解决方案。像这样的系统可能有不止一个解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多