pythonを用いた一般方程式の解法(Sympy or Scipy)(非線形方程式群,一元二次方程式,多重一次方程式,因数分解など)
前言
科学計算では、数値計算、高数、線形代数などに遭遇することが多く、実際の解題では面倒になる可能性があり、エラーになる可能性があります.ここではpythonが科学計算で線形方程式グループについて簡単に紹介します.
pythonを使用して線形方程式グループを解く場合は、対応するパッケージ、scipy、sympyをインストールする必要があります.公式ドキュメントはそれぞれhttps://www.scipy.org/、https://docs.sympy.org/latest/index.html.
scipy非線形方程式グループの解
線形方程式のグループを解くのは簡単で、1つの関数(scipy.linalg.solve)だけでいいです.例えば、非整列線形方程式のグループである以下の方程式の解を要求します.
3 x 1 + x 2 − 2 x 3 = 5 x 1 − x 2 + 4 x 3 = − 2 2 x 1 + 3 x 3 = 2.5 3x_1+x_2-2x_3=5\\x_1-x_2+4x_3=-2\\2x_1+3x_3=2.5 3x1+x2−2x3=5x1−x2+4x3=−22x1+3x3=2.5
プログラムコード:
結果:
sympy数学方程式の解
SymPyは比較的強力で、記号の簡略化、評価などを行うことができます.SymPyはシンボル数学のPythonライブラリです.コードの簡潔さ、理解と拡張を維持しながら、全機能のコンピュータ代数システムになることを目標としています.SymPyは完全にPythonで書かれており、外部のライブラリは必要ありません.
変数を設定してから、値を設定する必要のない機能を印刷することができます.たとえば、私たちの日常の書き込みでは
方程式の表示
数式とコードの変換:プラス+ マイナス- 除算/ 乗* 指数** 対数log() eの指数次べき乗exp() 簡単な方程式の解
結果:
説明する必要があるのは、solve:最初のパラメータは解を求める方程式であり、右端が0に等しく、2番目のパラメータは解を求める未知数である.他にもいくつかのパラメータがあり、知りたいことは公式ドキュメントを見ることができます.
二元一次方程式方程式の解
方程式を解く:
2 x − y = 3 3 x + y = 7 2x-y=3\\3x+y=7 2x−y=33x+y=7
結果:
一元二次方程式の解
検索:
x 2 + 2 x + 1 = 0 x^2+2x+1=0 x2+2x+1=0
結果:
多項式化簡略化計算
結果:
拡張sympy計算の使用
八元の一回の方程式を解いて、興味があるのは少し理解することができます
科学計算では、数値計算、高数、線形代数などに遭遇することが多く、実際の解題では面倒になる可能性があり、エラーになる可能性があります.ここではpythonが科学計算で線形方程式グループについて簡単に紹介します.
pythonを使用して線形方程式グループを解く場合は、対応するパッケージ、scipy、sympyをインストールする必要があります.公式ドキュメントはそれぞれhttps://www.scipy.org/、https://docs.sympy.org/latest/index.html.
scipy非線形方程式グループの解
線形方程式のグループを解くのは簡単で、1つの関数(scipy.linalg.solve)だけでいいです.例えば、非整列線形方程式のグループである以下の方程式の解を要求します.
3 x 1 + x 2 − 2 x 3 = 5 x 1 − x 2 + 4 x 3 = − 2 2 x 1 + 3 x 3 = 2.5 3x_1+x_2-2x_3=5\\x_1-x_2+4x_3=-2\\2x_1+3x_3=2.5 3x1+x2−2x3=5x1−x2+4x3=−22x1+3x3=2.5
プログラムコード:
import numpy as np
from scipy.linalg import solve
#
a=np.array([[3,1,-2],[1,-1,4],[2,0,3]])
#
b=np.array([5,-2,2.5])
#
x=solve(a,b)
#
print(x)
結果:
[0.5 4.5 0.5]
[Finished in 1.2s]
sympy数学方程式の解
SymPyは比較的強力で、記号の簡略化、評価などを行うことができます.SymPyはシンボル数学のPythonライブラリです.コードの簡潔さ、理解と拡張を維持しながら、全機能のコンピュータ代数システムになることを目標としています.SymPyは完全にPythonで書かれており、外部のライブラリは必要ありません.
変数を設定してから、値を設定する必要のない機能を印刷することができます.たとえば、私たちの日常の書き込みでは
print(x+y)
が間違っていますが、次のように使用しても間違っていません.from sympy import *
x,y= symbols('x,y')
print(x + y)
方程式の表示
数式とコードの変換:
2x-4=0
の1元の1回の方程式に対して解きますfrom sympy import *
x= symbols('x')
print(solve(x*2-4,x))
結果:
[2]
[Finished in 1.3s]
説明する必要があるのは、solve:最初のパラメータは解を求める方程式であり、右端が0に等しく、2番目のパラメータは解を求める未知数である.他にもいくつかのパラメータがあり、知りたいことは公式ドキュメントを見ることができます.
二元一次方程式方程式の解
方程式を解く:
2 x − y = 3 3 x + y = 7 2x-y=3\\3x+y=7 2x−y=33x+y=7
from sympy import *
x,y= symbols('x,y')
print(solve([2*x-y-3,3*x+y-7],[x,y]))
結果:
{x: 2, y: 1}
[Finished in 1.2s]
一元二次方程式の解
検索:
x 2 + 2 x + 1 = 0 x^2+2x+1=0 x2+2x+1=0
from sympy import *
x= symbols('x')
print(solve(x**2+2*x+1,x))
結果:
[-1]
[Finished in 1.0s]
多項式化簡略化計算
from sympy import *
x,a= symbols('x,a')
# ,
result_or=solve(x**2+a**2,x)
print(result_or)
# , a=3
for temp in result_or:
print(temp.subs([(a,3)]))
結果:
[-I*a, I*a]
-3*I
3*I
[Finished in 1.2s]
拡張sympy計算の使用
八元の一回の方程式を解いて、興味があるのは少し理解することができます
from sympy import *
a1,b1,c1,d1,a2,b2,c2,d2=symbols('a1,b1,c1,d1,a2,b2,c2,d2')
x0,x1,x2,y0,y1,y2=symbols('x0,x1,x2,y0,y1,y2')
result=solve([a1+b1*x0+c1*x0*x0+d1*x0*x0*x0-y0,
a1+b1*x1+c1*x1*x1+d1*x1*x1*x1-y1,
a2+b2*x1+c2*x1*x1+d2*x1*x1*x1-y1,
a2+b2*x2+c2*x2*x2+d2*x2*x2*x2-y2,
b1+2*c1*x1+3*d1*x1*x1-b2-2*c2*x1-3*d2*x1*x1,
c1+3*d1*x1-c2-3*d2*x1,
c1+3*d1*x0,
c2+3*d2*x2],[a1,b1,c1,d1,a2,b2,c2,d2])
#
cs=[(x0,6),(x1,9),(x2,12),(y0,0),(y1,3),(y2,0)]
# print(result[a1])
# print(result[b1])
# print(result[c1])
# print(result[d1])
# print(result[a2])
# print(result[b2])
# print(result[c2])
# print(result[d2])
a1=result[a1].subs(cs)
b1=result[b1].subs(cs)
c1=result[c1].subs(cs)
d1=result[d1].subs(cs)
a2=result[a2].subs(cs)
b2=result[b2].subs(cs)
c2=result[c2].subs(cs)
d2=result[d2].subs(cs)
print(a1)
print(b1)
print(c1)
print(d1)
print(a2)
print(b2)
print(c2)
print(d2)