Pythonだったら一発で微分できるんじゃね?っと思ったらちゃんと専用のライブラリがあった。さすがPython先輩
環境
- Python 3.5
- SymPy 1.4
SymPyとは
SymPyとは、公式曰く SymPy is a Python library for symbolic mathematics
とも言っているように数学系のPythonライブラリである。雑に言えばマセマティカの数学版
簡単なチュートリアルなら公式が出している。当然英語だが(数学用語は日本語と英語の対応が全然出来てないので個人的にはツラい
Introduction — SymPy 1.4 documentation
インストール
簡単
pip install sympy
早速微分してみる
試しに適当な大学受験に出てくる微分問題をコピってくる。
x**3-3*x+1
の場合
import sympy as sym from sympy.plotting import plot x = sym.Symbol('x') expr = x**3-3*x+1 print('f(x) = {}'.format(expr)) diff1 = sym.diff(expr) print('f\'(x) = {}'.format(diff1)) critical_points = sym.solve(diff1) for critical_point in critical_points: print('x = {}のとき f\'(x) = {}'.format(critical_point, expr.subs(x, critical_point))) plot(expr, (x, -3, 3))
実行結果は以下
f(x) = x**3 - 3*x + 1 f'(x) = 3*x**2 - 3 x = -1のとき f'(x) = 3 x = 1のとき f'(x) = -1
すごい。一発で微分してくれるだけじゃなくて、式をplot()に投げるだけでグラフまで生成してくれちゃった。。ハンパない
ちなみにリンク先にもあるが、この場合はx=-1で極大値(グラフが増加から減少に変わる境目の値)が3、x=1で極小値-1になる。
-x**3+6*x**2-12*x+7
の場合
もう一問解かせてみる。
import sympy as sym from sympy.plotting import plot x = sym.Symbol('x') expr = -x**3+6*x**2-12*x+7 print('f(x) = {}'.format(expr)) diff1 = sym.diff(expr) print('f\'(x) = {}'.format(diff1)) critical_points = sym.solve(diff1) for critical_point in critical_points: print('x = {}のとき f\'(x) = {}'.format(critical_point, expr.subs(x, critical_point))) plot(expr, (x, -3, 3))
実行結果が以下
f(x) = -x**3 + 6*x**2 - 12*x + 7 f'(x) = -3*x**2 + 12*x - 12 x = 2のとき f'(x) = -1
ちょっとグラフが見づらいので、plot(expr, (x, -3, 6))
にして見てみる
なるほど、ってことでグラフは常に減少し続けるので極値はなしってことか