『Pythonからはじめる数学入門』7章(前半) 初等解析問題を解く
に関する解説です。
7.1 関数とは何か
7.1.1 関数の定義域と値域
数学そのものの説明は省略しますが、用語を記しておきます。
写像mapping 定義域domain 値域range
7.1.2 よく使われる数学関数
sin()などよく使われる数学関数の書き方です。
#7.1.2 よく使われる数学関数 import math print(math.sin(math.pi/2)) import sympy print(sympy.sin(math.pi/2)) from sympy import Symbol theta = Symbol('theta') sympy.sin(theta) + sympy.sin(theta)
結果
1.0 1.00000000000000 2*sin(theta)
7.2 SymPyでの仮定
変数の正負など仮定を指定する場合です。
#7.2 SymPyでの仮定assumption from sympy import Symbol #正値だけ仮定する場合は、positive=Trueと指定 x = Symbol('x', positive=True) if (x+5) > 5: print('x+5 : plus') else: print('x+5 : minus') #負値だけ仮定する場合は、negative=Trueと指定 x = Symbol('x', negative=True) if (x+5) > 5: print('x+5 : plus') else: print('x+5 : minus')
結果
x+5 : plus x+5 : minus
7.3 関数の極限を求める
#Limitクラスのオブジェクトで関数の極限を求めます。 from sympy import Limit, Symbol, S #S:無限大や特別な値を定義するための使用する x = Symbol('x') print(Limit(1/x, x, S.Infinity)) #S.Infinity:無限大 print(Limit(1/x, x, 0, dir='-').doit()) #doit()で極限値を求める。dir='-'で負の方向を指定 print(Limit(1/x, x, 0, dir='+').doit()) #doit()で極限値を求める。dir='+'で正の方向を指定
結果
Limit(1/x, x, oo, dir='-') -oo oo
7.3.1 連続複利(Continuous Compound Interest)
7.3.2 瞬間変化率
7.4 関数の微分を求める
#7.4 関数の微分を求める from sympy import Symbol, Derivative t = Symbol('t') St = 5*t**2 + 2*t + 8 print(Derivative(St, t)) print(Derivative(St, t).doit()) print(Derivative(St, t).doit().subs({t:1}))
結果
Derivative(5*t**2 + 2*t + 8, t) 10*t + 2 12
7.4.1 微分電卓
#微分電卓 from sympy import Symbol, Derivative, sympify, pprint from sympy.core.sympify import SympifyError def derivative(f, var): var = Symbol(var) d = Derivative(f, var).doit() pprint(d) if __name__=='__main__': f = input('Enter a function: ') var = input('Enter the variable to differentiate with respect to: ') try: f = sympify(f) except SympifyError: print('Invalid input') else: derivative(f, var)
結果
# エラーになったが、以下が正しい結果で、再検証 Enter a function: 2*x**2 + 3*x + 1 Enter the varlable tO differentiate with respect to: x 4*x+3
7.4.2 偏微分を求める
結果
Enter a function: 2*x*y + x*y**2 Enter the varlable tO differentiate with respect to: x 4*x+3