1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

pythonで平均値の定理のグラフを描画するコード

Posted at

環境

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)))

関数の使い方

xminxmaxそれぞれ平均値の定理の定義域の下限、上限です。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$をとってくるため。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?