如何求解Python中的符号方程组?
How to solve symbolic equation system in Python?
我是从 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 中执行此操作?
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
because the system is linear in each of the unknowns. Other solvers可用于非线性方程。
请注意,方程式可以输入为 lhs - rhs
(正如我上面所做的)或 Eq(lhs, rhs)
。不像 lhs == rhs
会在 Python.
中立即评估为 False
我是从 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 中执行此操作?
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
because the system is linear in each of the unknowns. Other solvers可用于非线性方程。
请注意,方程式可以输入为 lhs - rhs
(正如我上面所做的)或 Eq(lhs, rhs)
。不像 lhs == rhs
会在 Python.