Scusate, sono abbastanza nuovo per sympy e python in generale.Come posso risolvere il sistema di equazioni lineari in SymPy?
voglio risolvere il seguente sistema lineare sottodeterminato di equazioni:
x + y + z = 1
x + y + 2z = 3
Scusate, sono abbastanza nuovo per sympy e python in generale.Come posso risolvere il sistema di equazioni lineari in SymPy?
voglio risolvere il seguente sistema lineare sottodeterminato di equazioni:
x + y + z = 1
x + y + 2z = 3
SymPy recentemente ottenuto un nuovo solutore sistema lineare: linsolve
in sympy.solvers.solveset
, è possibile utilizzare tale come segue:
In [38]: from sympy import *
In [39]: from sympy.solvers.solveset import linsolve
In [40]: x, y, z = symbols('x, y, z')
Elenco di modulo equazioni:
In [41]: linsolve([x + y + z - 1, x + y + 2*z - 3 ], (x, y, z))
Out[41]: {(-y - 1, y, 2)}
Augmented Matrix Forma:
In [59]: linsolve(Matrix(([1, 1, 1, 1], [1, 1, 2, 3])), (x, y, z))
Out[59]: {(-y - 1, y, 2)}
A * x = b Forma
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)}
Nota: Ordine di soluzione corrisponde all'ordine di determinati simboli.
Va notato che il linsolve non è ancora disponibile in nessuna versione. Attualmente accessibile solo attraverso la versione di sviluppo. –
Grazie! L'ho usato da git repo! :) –
Sto usando sympy 0.7.6, per prima cosa non ho potuto ottenere linsolve così usato per risolvere, Second The Matment Augmented e Ax = b form dà la risposta EMPTY LIST [], solo il primo metodo fornisce la soluzione come sopra, come possiamo risolvere questo? –
È possibile risolvere in forma matriciale Ax=b
(in questo caso un sistema di sottodeterminato ma possiamo usare 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}
O riscrivere come (la mia modifica, non sympy):
[x]= [-1] [-1]
[y]= y[1] + [0]
[z]= [0] [2]
Nel caso di un quadrato A
potremmo definire b
e utilizzare A.LUsolve(b)
.
Oltre alle ottime risposte fornite da @AMiT Kumar e @Scott, SymPy 1.0 ha aggiunto ulteriori funzionalità. Per il sistema lineare di equazioni sottodeterminato, ho provato di seguito e farlo funzionare senza approfondire sympy.solvers.solveset
. Detto questo, vai lì se la curiosità ti porta.
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))
Ciò mi dà {z: 2, x: -y - 1}
. Ancora, ottimo pacchetto, sviluppatori SymPy!
Un altro esempio sulle equazioni sistema a matrice lineari, lascia supporre stiamo risolvendo per questo sistema:
In SymPy
potremmo fare qualcosa di simile:
>>> 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}
Cosa hai provato finora ? Che cosa hanno prodotto i tuoi sforzi di ricerca? Un websearch sembra offrire molti esempi. Per favore dimmi che hai letto la documentazione e cercato prima di chiedere. –
Ho provato questo: solve_linear_system (M, (x, y, z)), dove M = Matrix (((1, 1, 1, - 1), (1, 1, 2, - 3))), ha dato io un errore IndexError. –