Ani*_*Vij 22 python math sympy
对不起,我对sympy和python很新.
我想解决以下欠定线性方程组:
x + y + z = 1
x + y + 2z = 3
Run Code Online (Sandbox Code Playgroud)
Ami*_*mar 28
SymPy最近得到了一个新的线性系统求解器:linsolve在sympy.solvers.solveset,你可以使用如下:
In [38]: from sympy import *
In [39]: from sympy.solvers.solveset import linsolve
In [40]: x, y, z = symbols('x, y, z')
Run Code Online (Sandbox Code Playgroud)
方程列表形式:
In [41]: linsolve([x + y + z - 1, x + y + 2*z - 3 ], (x, y, z))
Out[41]: {(-y - 1, y, 2)}
Run Code Online (Sandbox Code Playgroud)
增强矩阵形式:
In [59]: linsolve(Matrix(([1, 1, 1, 1], [1, 1, 2, 3])), (x, y, z))
Out[59]: {(-y - 1, y, 2)}
Run Code Online (Sandbox Code Playgroud)
A*x = b表格
In [59]: M = Matrix(((1, 1, 1, 1), (1, 1, 2, 3)))
In [60]: system = A, b = M[:, :-1], M[:, -1]
In [61]: linsolve(system, x, y, z)
Out[61]: {(-y - 1, y, 2)}
Run Code Online (Sandbox Code Playgroud)
注意:解决方案顺序对应给定符号的顺序.
Pau*_*ong 11
除了@AMiT Kumar和@Scott给出的出色答案外,SymPy 1.0还增加了更多功能.对于欠定的线性方程组,我在下面尝试并使其工作而不深入研究sympy.solvers.solveset.话虽这么说,如果好奇心引导你,那就去那里吧.
from sympy import *
x, y, z = symbols('x, y, z')
eq1 = x + y + z
eq2 = x + y + 2*z
solve([eq1-1, eq2-3], (x, y,z))
Run Code Online (Sandbox Code Playgroud)
这给了我{z: 2, x: -y - 1}.再次,伟大的包,SymPy开发人员!
Ali*_*i80 11
import sympy as sp
x, y, z = sp.symbols('x, y, z')
eq1 = sp.Eq(x + y + z, 1) # x + y + z = 1
eq2 = sp.Eq(x + y + 2 * z, 3) # x + y + 2z = 3
ans = sp.solve((eq1, eq2), (x, y, z))
Run Code Online (Sandbox Code Playgroud)
这类似于@PaulDong 的回答,但有一些细微的变化
import *(numpy 有很多类似的功能)sp.Eq()稍后会产生更清晰的代码矩阵线性系统方程的另一个例子,假设我们正在求解该系统:
\n\n\n\n我们SymPy可以做这样的事情:
>>> import sympy as sy\n... sy.init_printing()\n\n>>> a, b, c, d = sy.symbols(\'a b c d\')\n... A = sy.Matrix([[a-b, b+c],[3*d + c, 2*a - 4*d]])\n... A\n\n\xe2\x8e\xa1 a - b b + c \xe2\x8e\xa4\n\xe2\x8e\xa2 \xe2\x8e\xa5\n\xe2\x8e\xa3c + 3\xe2\x8b\x85d 2\xe2\x8b\x85a - 4\xe2\x8b\x85d\xe2\x8e\xa6\n\n\n>>> B = sy.Matrix([[8, 1],[7, 6]])\n... B\n\n\xe2\x8e\xa18 1\xe2\x8e\xa4\n\xe2\x8e\xa2 \xe2\x8e\xa5\n\xe2\x8e\xa37 6\xe2\x8e\xa6\n\n\n>>> A - B\n\n\xe2\x8e\xa1 a - b - 8 b + c - 1 \xe2\x8e\xa4\n\xe2\x8e\xa2 \xe2\x8e\xa5\n\xe2\x8e\xa3c + 3\xe2\x8b\x85d - 7 2\xe2\x8b\x85a - 4\xe2\x8b\x85d - 6\xe2\x8e\xa6\n\n\n>>> sy.solve(A - B, (a, b, c, d))\n{a: 5, b: -3, c: 4, d: 1}\nRun Code Online (Sandbox Code Playgroud)\n