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

Я новичок из MATLAB в Python. У меня сейчас проблема с решением системы уравнений в Python. Например, в Matlab

R = solve( a1*[x1; x2] == [y1;y2], ...  
           a2*[x3; x4] == [y3;y4], ...
           a3*[x5; x6] == [y5;y6], ... 
           x2 == y3, x3 == y2, ...        
           x4 == y5, x5 == y4, ... 
           [    x2 x3 x4 x5    ...   
             y1 y2 y3 y4 y5 y6]...   % unknown
          );
y1 = simplify(R.y1);
y10 = simplify(R.y10);

a1..a5 - это коэффициент y1, y10 - это то, что мне нужно решить, и они должны быть символическим выражением после решения. Как это сделать в Python?

1 Ответ

0 голосов
/ 26 апреля 2018

NumPy не имеет концепции символических решений. Вы можете использовать SymPy следующим образом:

from sympy import *
a1, a2, a3 = 3, 4, 5   #   known coefficients, they could be symbols too
x1, x2, x3, x4, x5, x6 = symbols('x1:7')
y1, y2, y3, y4, y5, y6 = symbols('y1:7')
eqns = [a1*x1 - y1, a1*x2 - y2, a2*x3 - y3, a2*x4 - y4, a3*x5 - y5, a3*x6 - y6, 
        x2 - y3, x3 - y2, x4 - y5, x5 - y4]
linsolve(eqns, [x1, x2, x3, x4, x5, x6, y1, y2, y3, y4, y5, y6])

Выходные данные {(y1/3, 0, 0, 0, 0, y6/5, y1, 0, 0, 0, 0, y6)} указывают, что большинство переменных должно быть 0, x1 должно быть y1 / 3, x5 должно быть y6 / 6, а переменные y1, y2 могут быть в зависимости от того, что именно.

Выше используется linsolve, потому что система является линейной в каждом из неизвестных. Другие решатели доступны для нелинейных уравнений.

Обратите внимание, что уравнения можно вводить как lhs - rhs (как я делал выше) или Eq(lhs, rhs). Не так, как lhs == rhs, который немедленно оценивается как False в Python.

...