2016-10-11 3 views
3

Я хочу решить систему уравнений. Но я хочу уметь точно определить значение «получить» и как функцию «что».Решение системы уравнений с Sympy, python2.7

Чтобы лучше понять, я беру Exemple из here, которым я modfified:

import sympy as sp 
x, y, z = sp.symbols('x, y, z') 
rho, sigma, beta = sp.symbols('rho, sigma, beta') 
f1 = sigma * (y - x) 
f2 = x * (rho - z) - y 
f3 = x * y - beta * z 
print sp.solvers.solve((f1, f2, f3), (x, y, z)) 

в

import sympy as sp 
x, y, z, w = sp.symbols('x, y, z, w') 
rho, sigma, beta = sp.symbols('rho, sigma, beta') 
f1 = sigma * (y - x) 
f2 = x * (rho - z) - y 
f3 = x * y - beta * w 
f4 = z - w 
print sp.solvers.solve((f1, f2, f3, f4), (x, y, z)) 

Итак, как вы можете видеть, я заменяю г на ж в последнем уравнении, и я добавляю новое для точного z = w. Но, sympy (на python 2.7) не может решить эту новую систему уравнений !!

Так что мой вопрос: Как получить результат для x, y, z как функции rho, sigma, beta. И в целом, как мы можем точно определить переменную «переменная ответа».

Я думаю, что это может быть очень полезно, потому что часто вы не хотите разрабатывать свою систему уравнений, прежде чем попросить python решить ее.

Точно так же, если я возьму более сложный пример:

import sympy as sp 
x, y, z, w, u = sp.symbols('x, y, z, w, u') 
rho, sigma, beta = sp.symbols('rho, sigma, beta') 
f1 = sigma * (y - x) 
f2 = x * (rho - u) - y 
f3 = x * y - beta * w 
f4 = z - w 
f5 = w - u 
print sp.solvers.solve((f1, f2, f3, f4, f5), (x, y, z)) 

Ответ я получаю:

[] 

Но, как вы видите, я г = ш = и Сын, я должен получить тот же ответ!

ответ

1

Ваш код дает следующее сообщение об ошибке:

Traceback (most recent call last): File "C:\temp\equation1.py", line 37, in f3 = x * y - beta * w NameError: name 'w' is not defined

Таким образом, мы тянуть символ «ш» из SymPy символов, как показано ниже x, y, z, w = sp.symbols('x, y, z, w')

Вы также упомянули вы пытаетесь добавить z = w, поэтому, как только мы добавим что для вашего кода он работает.

Рабочий код:

import sympy as sp 
x, y, z, w = sp.symbols('x, y, z, w') 
rho, sigma, beta = sp.symbols('rho, sigma, beta') 
z = w 
f1 = sigma * (y - x) 
f2 = x * (rho - z) - y 
f3 = x * y - beta * w 
f4 = z - w 
print sp.solvers.solve((f1, f2, f3, f4), (x, y, z, w)) 

Выход:

Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] on win32 
Type "copyright", "credits" or "license()" for more information. 
>>> ================================ RESTART ================================ 
>>> 
[(0, 0, 0), (-sqrt(beta*rho - beta), -sqrt(beta*(rho - 1)), rho - 1), (sqrt(beta*rho - beta), sqrt(beta*(rho - 1)), rho - 1)] 
>>> 
+0

Спасибо, но это не отвечает на мой вопрос. Точнее, у меня есть 8 уравнений, и я хочу, чтобы выражение переменной 2 было как функция другого. Если взять более сложный пример: импорта SymPy как зр х, у, Z, W, U = sp.symbols ('х, у, Z, W, U') ро, Sigma, бета = sp.symbols ('rho, sigma, beta') f1 = sigma * (y - x) f2 = x * (rho - u) - y f3 = x * y - beta * w f4 = z - w f5 = w - u print sp.solvers.решить ((f1, f2, f3, f4, f5), (х, у, г,)) Ответ я получаю: [] Но, как вы видите, я г = ш = и Son I должен получить тот же ответ! –

+0

Где вы определили 'z = w = u' ?, если я определяю его явно, я получаю такой же ответ. Попробуйте это: 'import sympy as sp x, y, z, w, u = sp.symbols ('x, y, z, w, u') rho, sigma, beta = sp.symbols ('rho, sigma , бета ') г = ш = и f1 = сигма * (у - х) f2 = х * (Rho - и) - у f3 = х * у - бета * W f4 = г - ш f5 = w - u print sp.solvers.solve ((f1, f2, f3, f4, f5), (x, y, z)) ' –

+0

Я изменил вопрос, чтобы быть более понятным. –

Смежные вопросы