Heim > Artikel > Backend-Entwicklung > Drei Möglichkeiten, Gleichungen in Python zu lösen
Drei Möglichkeiten, Gleichungssysteme in Python zu lösen:
Verwandte Empfehlungen: „Python-Video“
Numpy Das Gleichungssystem lösen
x + 2y = 3 4x + 5y = 6
Natürlich können wir die analytische Lösung manuell schreiben und dann eine Funktion schreiben, um sie zu lösen. Dabei verwenden wir eigentlich nur Python, um „numerische Berechnungen“ durchzuführen. Aber tatsächlich kann numpy.linalg.solve lineare Gleichungen direkt lösen.
Im Allgemeinen gehen wir davon aus, dass die linearen Gleichungen die Form Ax=b haben, wobei A die Koeffizientenmatrix und b ist eindimensional (auch n-dimensional Ja, das wird weiter unten erwähnt), x ist eine unbekannte Variable. Am Beispiel des oben genannten einfachsten linearen Gleichungssystems können wir numpy.linalg.solve verwenden, um so zu schreiben :
In [1]: import numpy as np ...: A = np.mat('1,2; 4,5') # 构造系数矩阵 A ...: b = np.mat('3,6').T # 构造转置矩阵 b (这里必须为列向量) ...: r = np.linalg.solve(A,b) # 调用 solve 函数求解 ...: print r ...: Out[1]: [[-1.] [ 2.]]
Was ist dann, wie bereits erwähnt, die „n-dimensionale“ Situation? Tatsächlich geht es darum, mehrere Sätze linearer Gleichungen zweier Variablen mit derselben Form gleichzeitig zu lösen. Wenn wir beispielsweise diese beiden Sätze gleichzeitig lösen möchten:
x + 2y = 3 4x + 5y = 6
und
x + 2y = 7 4x + 5y = 8
, wir können es so schreiben:
In [2]: import numpy as np ...: A = np.mat('1,2; 4,5') # 构造系数矩阵 A ...: b = np.array([[3,6], [7,8]]).T # 构造转置矩阵 b (这里必须为列向量), ...: 注意这里用的是 array ...: r = np.linalg.solve(A,b) # 调用 solve 函数求解 ...: print r ...: Out[2]: [[-1. -6.33333333] [ 2. 6.66666667]]
SciPy löst das System nichtlinearer Gleichungen
Im Allgemeinen müssen wir nur func und x0 verwenden .func ist eine von uns selbst erstellte Funktion, die das Gleichungssystem darstellt, das gelöst werden muss. Das linke Ende von (das rechte Ende ist 0) und x0 ist der gegebene Anfangswert.
Sehen wir uns a an Konkretes Beispiel zum Lösen:
x + 2y + 3z - 6 = 0 5 * (x ** 2) + 6 * (y ** 2) + 7 * (z ** 2) - 18 = 0 9 * (x ** 3) + 10 * (y ** 3) + 11 * (z ** 3) - 30 = 0
Es kann so geschrieben werden:
In [3]: from scipy.optimize import fsolve ...: ...: def func(i): ...: x, y, z = i[0], i[1], i[2] ...: return [ ...: x + 2 * y + 3 * z - 6, ...: 5 * (x ** 2) + 6 * (y ** 2) + 7 * (z ** 2) - 18, ...: 9 * (x ** 3) + 10 * (y ** 3) + 11 * (z ** 3) - 30 ...: ] ...: ...: r = fsolve(func,[0, 0, 0]) ...: print r ...: Out[3]: [ 1.00000001 0.99999998 1.00000001]
Natürlich kann SciPy auch zum Lösen linearer Gleichungssysteme verwendet werden, weil scipy.optimize.fsolve ist im Wesentlichen die Methode der kleinsten Quadrate, um die tatsächlichen Ergebnisse anzunähern.
SymPy löst Gleichungssysteme
Zum Beispiel, um ein Problem zu lösen:
x + 2 * (x ** 2) + 3 * (x ** 3) - 6 = 0
It ist direkt:
In [4]: from sympy import * ...: x = symbols('x') ...: solve(x + 2 * (x ** 2) + 3 * (x ** 3) - 6, x) Out[4]: [1, -5/6 - sqrt(47)*I/6, -5/6 + sqrt(47)*I/6]
Das obige ist der detaillierte Inhalt vonDrei Möglichkeiten, Gleichungen in Python zu lösen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!