Pythonで方程式を解く方法は色々ありますが、今回はSymPyを使ってみます。
基本
x^2-2*x+1=0を解いてみます。
結果は配列で出力されます。解が複数ある場合に対応しています。
import sympy
x = sympy.symbols("x")
equation = x**2 - 2 * x + 1
solution = sympy.solve(equation, x)
print(solution)
x = sympy.symbols("x")
equation = x**2 - 2 * x + 1
solution = sympy.solve(equation, x)
print(solution)
結果
[1]
解が複数ある場合
import sympy
x = sympy.symbols("x")
equation = x**2 - 1
solution = sympy.solve(equation, x)
print(solution)
x = sympy.symbols("x")
equation = x**2 - 1
solution = sympy.solve(equation, x)
print(solution)
結果
[-1, 1]
虚数解がある場合
虚数は「I」で表されます。
import sympy
x = sympy.symbols("x")
equation = x**2 + 1
solution = sympy.solve(equation, x)
print(solution)
x = sympy.symbols("x")
equation = x**2 + 1
solution = sympy.solve(equation, x)
print(solution)
結果
[-I, I]
複雑な数式の場合
下のような複雑な数式の場合は、ループを使って書けます。
import sympy
x = sympy.symbols("x")
y = x
for i in range(10):
y = x + 1 / y
solution = sympy.solve(y, x)
print(solution)
x = sympy.symbols("x")
y = x
for i in range(10):
y = x + 1 / y
solution = sympy.solve(y, x)
print(solution)
結果
[-sqrt(-2 – sqrt(3)), sqrt(-2 – sqrt(3)), -sqrt(-2 + sqrt(3)), sqrt(-2 + sqrt(3))]
式がどうなっているか
式は出力できます。
print(y)
結果
x + 1/(x + 1/(x + 1/(x + 1/(x + 1/(x + 1/(x + 1/(x + 1/(x + 1/(x + 1/x)))))))))
実際の値を求めたい場合
上の結果はsqrtが使われていて実際の値が分かりません。
evalfを使うと実際の値が求まります。
for s in solution:
print(s.evalf())
print(s.evalf())
結果
-1.93185165257814*I
1.93185165257814*I
-0.517638090205041*I
0.517638090205041*I
コメント