Heim  >  Artikel  >  Backend-Entwicklung  >  Drei Möglichkeiten, Gleichungen in Python zu lösen

Drei Möglichkeiten, Gleichungen in Python zu lösen

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼Original
2019-06-14 17:14:2832184Durchsuche

Drei Möglichkeiten, Gleichungssysteme in Python zu lösen:

Verwandte Empfehlungen: „Python-Video

Drei Möglichkeiten, Gleichungen in Python zu lösen

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Ist Python ein Crawler?Nächster Artikel:Ist Python ein Crawler?