Как решить нелинейное уравнение в симпы? - PullRequest
0 голосов
/ 23 октября 2018

Я хочу найти x в eq1, используя sympy.Когда я пытаюсь решить уравнение с помощью sp.solve (), я получаю ошибку.Когда я использую sp.solve_linear (), это похоже на работу, но я не могу оценить числовое значение решения.Все мои переменные определены, кроме х, и я хочу решить для х.Есть ли другой решатель, который я мог бы использовать?Мой код ниже:

import sympy as sp
from sympy import pi, log

R0, Hb, P_, y, m, xhi_ = sp.symbols("0.003 5e8, 1000 2500 4*pi*10e-7 1")
P = P_/2

x,  y = sp.symbols('x y')

eq1 = x - sp.sqrt((P - (m*(y*y)/2*pi)*log(R0/x))/(pi*xhi_*Hb))

a = sp.solve_linear(eq1, x)

sp.pprint(a)
sp.pprint(sp.N(a))

1 Ответ

0 голосов
/ 23 октября 2018

Я думаю, вам действительно понадобится:

import sympy as sp
from sympy import pi, log, sqrt

R0, Hb, P_, y, m, xhi_, x = sp.symbols("R0 Hb P_ y m xhi_ x")
P = P_/2

eq1 = x - sp.sqrt((P - (m*(y*y)/2*pi)*log(R0/x))/(pi*xhi_*Hb))

a = sp.solve_linear(eq1, x)

sp.pprint(a)

⎛         ____________________    ⎞
⎜        ╱          2    ⎛R₀⎞     ⎟
⎜       ╱      π⋅m⋅y ⋅log⎜──⎟     ⎟
⎜      ╱   P             ⎝x ⎠     ⎟
⎜     ╱    ─ - ──────────────     ⎟
⎜    ╱     2         2            ⎟
⎜-  ╱      ────────────────── , √π⎟
⎝ ╲╱             Hb⋅xhi           ⎠

Тогда вы могли бы сделать :

import numpy as np

a[0].subs({R0:0.003, Hb:5e8, P_:1000, y:2500, m:4*np.pi*10e-7, xhi_:1, pi:np.pi})
-4.47213595499958e-5*sqrt(-123.370055013617*log(0.003/x) + 500)

Но это не то, что вы изначально имели в виду, еслиЯ правильно поняла;вы на самом деле хотите значение для x, поэтому solve будет уместным:

a = sp.solve(eq1, x)

Это не с

NotImplementedError: несколько генераторов [x, sqrt (P_ /(2 * Hb xhi_) - pi m * y ** 2 * log (R0 / x) / (2 * Hb * xhi_))]

Не реализованы алгоритмы для решения уравненияx - sqrt ((P_ / 2 - pi m y ** 2 * log (R0 / x) / 2) / (Hb * xhi _)) / sqrt (pi)

, что , по-видимому, означает , что это уравнение не может быть решено аналитически.

Вы можете попробовать численно решить, как показано, например, здесь .

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