Как я могу решить уравнение одновременного в Python, используя симп - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть два следующих уравнения:

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))

Любая идея, что я могу сделать, чтобы исправить свой код, чтобы я мог получить правильный ответ?

1 Ответ

1 голос
/ 15 апреля 2020

Вы неправильно поняли, как работает nsolve. Третий аргумент - это исходное предположение, которое используется для запуска алгоритма поиска root. Здесь [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⎦

Обратите внимание, что это находит только одно решение, начиная с любого конкретного начального предположения. Возможно, что такая система имеет более одного решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...