> 백엔드 개발 > 파이썬 튜토리얼 > 파이썬에서 방정식을 푸는 세 가지 방법

파이썬에서 방정식을 푸는 세 가지 방법

爱喝马黛茶的安东尼
풀어 주다: 2019-06-14 18:09:10
원래의
32233명이 탐색했습니다.

파이썬에서 연립방정식을 푸는 세 가지 방법:

관련 권장 사항: "python video"

파이썬에서 방정식을 푸는 세 가지 방법

Numpy는 연립방정식을 푼다

x + 2y = 3
4x + 5y = 6
로그인 후 복사
로그인 후 복사

물론 수동으로 분석 솔루션을 작성할 수도 있고 그런 다음 함수를 작성합니다. 이는 실제로 Python을 사용하여 "수치 계산"을 수행하는 것입니다. 그러나 실제로 numpy.linalg.solve는 선형 방정식 시스템을 직접 풀 수 있습니다.

일반적으로 우리는 선형 방정식 시스템을 가정합니다. 는 Ax=b와 같이 풀립니다. 그 중 A는 계수 행렬이고, b는 1차원(n 차원도 허용되며 이는 아래에서 언급함)이며, x는 2개의 가장 간단한 선형 방정식 시스템을 취하는 미지의 변수입니다. 위의 변수를 예로 들어 numpy.linalg.solve를 사용합니다. 다음과 같이 작성할 수 있습니다.

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.]]
로그인 후 복사

그럼 앞서 언급한 "n차원" 상황은 무엇인가요? 실제로 이는 동일한 형태를 갖는 두 변수의 선형 방정식의 여러 세트를 동시에 푸는 것입니다. 예를 들어, 동일한 형태를 갖는 두 변수의 선형 방정식의 두 세트를 동시에 풀고 싶다면:

x + 2y = 3
4x + 5y = 6
로그인 후 복사
로그인 후 복사

x + 2y = 7
4x + 5y = 8
로그인 후 복사

를 다음과 같이 작성할 수 있습니다.

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는 비선형 방정식 시스템을 해결합니다.

일반적으로 func만 사용하면 되며, Func는 우리가 직접 구성한 함수입니다. 풀어야 할 방정식 시스템의 왼쪽 끝(오른쪽 끝은 0)이고 x0은 주어진 초기 값입니다.

풀려는 구체적인 예를 살펴보겠습니다.

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
로그인 후 복사

는 다음과 같이 쓸 수 있습니다.

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]
로그인 후 복사

물론 SciPy를 사용하여 선형 방정식을 풀 수도 있습니다. 이는 scipy.optimize.fsolve가 본질적으로 결과를 근사화하는 최소 제곱 방법이기 때문입니다.

SymPy는 방정식 시스템을 해결합니다

, 하나를 풀면:

x + 2 * (x ** 2) + 3 * (x ** 3) - 6 = 0
로그인 후 복사

는 직접적으로:

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]
로그인 후 복사
입니다.

위 내용은 파이썬에서 방정식을 푸는 세 가지 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿