Comment résoudre un système d'équations linéaires en SymPy?

Désolé, je suis assez nouveau à sympy et python en général.

je veux résoudre le système d'équations linéaire sous-déterminé suivant:

x + y + z = 1 
x + y + 2z = 3
10
demandé sur Amit Kumar 2015-07-21 22:12:00

4 réponses

SymPy a récemment obtenu un nouveau solveur de système linéaire: linsolvesympy.solvers.solveset, vous pouvez l'utiliser comme suit:

In [38]: from sympy import *

In [39]: from sympy.solvers.solveset import linsolve

In [40]: x, y, z = symbols('x, y, z')

liste des équations forme:

In [41]: linsolve([x + y + z - 1, x + y + 2*z - 3 ], (x, y, z))
Out[41]: {(-y - 1, y, 2)}

Forme Matricielle Augmentée:

In [59]: linsolve(Matrix(([1, 1, 1, 1], [1, 1, 2, 3])), (x, y, z))
Out[59]: {(-y - 1, y, 2)}

A*x = B Form

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)}

Remarque:: Ordre de la solution correspond à l'ordre des symboles.

14
répondu Amit Kumar 2015-07-21 19:49:04

en plus des excellentes réponses données par @AMiT Kumar et @Scott, SymPy 1.0 a ajouté encore plus de fonctionnalités. Pour le système linéaire sous-déterminé d'équations, j'ai essayé ci-dessous et obtenir de travailler sans aller plus loin dans sympy.solvers.solveset. Cela dit, n'allez-y si la curiosité vous amène.

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))

Que me donne {z: 2, x: -y - 1}. Encore une fois, grand paquet, les développeurs SymPy!

5
répondu PaulDong 2016-10-04 08:58:42

Vous pouvez résoudre sous forme de matrice Ax=b (dans ce cas un système sous-déterminé mais nous pouvons utiliser solve_linear_system):

from sympy import Matrix, solve_linear_system

x, y, z = symbols('x, y, z')
A = Matrix(( (1, 1, 1, 1), (1, 1, 2, 3) ))
solve_linear_system(A, x, y, z)

{x: -y - 1, z: 2}

Ou réécrire comme (mon édition, pas sympy):

[x]=  [-1]   [-1]
[y]= y[1]  + [0]
[z]=  [0]    [2]

Dans le cas d'un carré A nous pourrions définir b et utiliser A.LUsolve(b).

2
répondu Scott 2015-07-21 19:47:40

un autre exemple sur les équations du système linéaire de matrice, supposons que nous résolvons pour ce système:

enter image description here

SymPy on pourrait faire quelque chose comme:

>>> import sympy as sy
... sy.init_printing()

>>> a, b, c, d = sy.symbols('a b c d')
... A = sy.Matrix([[a-b, b+c],[3*d + c, 2*a - 4*d]])
... A

⎡ a - b     b + c  ⎤
⎢                  ⎥
⎣c + 3⋅d  2⋅a - 4⋅d⎦


>>> B = sy.Matrix([[8, 1],[7, 6]])
... B

⎡8  1⎤
⎢    ⎥
⎣7  6⎦


>>> A - B

⎡ a - b - 8     b + c - 1  ⎤
⎢                          ⎥
⎣c + 3⋅d - 7  2⋅a - 4⋅d - 6⎦


>>> sy.solve(A - B, (a, b, c, d))
{a: 5, b: -3, c: 4, d: 1}
1
répondu Aziz Alto 2016-10-19 04:02:52