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

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

爱喝马黛茶的安东尼
Freigeben: 2019-06-14 18:09:10
Original
32234 Leute haben es durchsucht

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
Nach dem Login kopieren
Nach dem Login kopieren

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.]]
Nach dem Login kopieren

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
Nach dem Login kopieren
Nach dem Login kopieren

und

x + 2y = 7
4x + 5y = 8
Nach dem Login kopieren

, 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]]
Nach dem Login kopieren

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
Nach dem Login kopieren

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]
Nach dem Login kopieren

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
Nach dem Login kopieren

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]
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage