環境
jupyter notebookで使用してください。
使うパッケージ
import sympy as sym
import numpy as np
平均値の定理のグラフを描画するコード
def creat_graph_mean_value_theorem(xmin, xmax, function):
x = sym.Symbol("x") #変数の設定
f = sym.simplify(function) #関数を単純な形にする
c = sym.Symbol("c") #変数の設定
a = float(xmin) # floatにする
b = float(xmax)
#平均値の定理の式
equation = sym.Eq(f.diff(x).subs(x, c), (f.subs(x, b) - f.subs(x, a)) / (b - a))
#平均値の定理をcについて解く。
solution = sym.solve(equation, c)
#求めたcのうち、xmin<c<xmaxとなるものを取ってくる。
solution_arr= np.array(solution)
c_answer =solution_arr[(solution_arr < b)&(a < solution_arr)]
print("c=",c_answer)
#端点を結んだ直線の傾きと切片を求める
slope = (f.subs(x, b) - f.subs(x, a)) / (b - a)
intercept_edge = f.subs(x, a) - slope*a
#平均値の定理から導かれる直線の傾きと切片を求める。傾きは上と同じなのでそれを流用。
intercept_mean = f.subs(x,c_answer[0]) - slope*c_answer[0]
slope_mean = f.diff(x).subs(x, c_answer[0])
print(slope,slope_mean)
sym.plot((f,(x,a,b)),
(slope*x + intercept_edge, (x,a-1,b+1)),
(slope_mean*x + intercept_mean, (x,a-1,b+1)))
関数の使い方
xmin
、xmax
それぞれ平均値の定理の定義域の下限、上限です。function
にはx
を変数とした関数を入れてください。
コードの詳しい(?)解説
sym.Eq(a, b)
:a=b。
f.diff(x)
:変数$x$でsympy
での関数f
を微分する。$\frac{d}{dx}f(x)$。
f.subs(x, y)
:関数の変数$x$に$y$を代入する。$f(x=y)$。
sym.solve(equation, c)
:方程式をcについて解く。
sym.plot((function,(x,a,b))
:function
はプロットする関数。$f(x)$を打ち込む。(x,a,b)
は定義域。$a\leqq x \leqq b$ 。plotの引数の中に,(function_1, (x,a_1,b_1)
を入れると定義域をそれぞれ設定できる。
途中でnumpy.array
にしているのは条件$x_\text{min}<c<x_\text{max}$を満たす$c$をとってくるため。