スキップしてメイン コンテンツに移動

テイラー展開

Introduction

今日はテイラー展開について紹介します。
ここでは、一変数関数だけでなく、多変数関数のテイラー展開も紹介します。

一変数関数のテイラー展開

f(X) は区間(a,b)で連続であり、また、n回微分可能とします。
すると、f(x) は以下のように表せます。
\[\exists c ~~s.t~~ f(b) = \sum_{k=0}^{n-1} f^{(k)}(a)\frac{(b-a)^k}{k!} + f^{(n)}(c) \frac{(b-a)^n}{n!}, c \in (a,b)\]
このf(x)を多項式で表したものをテイラー展開といいます。
最後の項は、剰余項と呼ばれます。

多変数関数のテイラー展開

多変数関数のテイラー展開はかなり複雑な形をしています。
fは多変数関数とします。
さらに、m回微分可能な連続関数とします。
この時、 \(f(x_1+h_1,x_2+h_2,.....,x_n+h_n)\) は次のように表せます。
\[\exists \theta ~~s.t~~\]
\[f(x_1+h_1,x_2+h_2,...,x_n+h_n)=f(x_1,x_2,...,x_n) + \]
\[\sum_{m=0}^{n-1} \frac{1}{m-1} \sum_{k_1=1}^{n} \sum{k_2=1}^{n} ... \sum{k_{m-1}=1}^{n} \frac{\partial^{m-1} f}{\partial x_{k_1} \partial x_{k_2} .... \partial x_{k_{m-1}} }(x_1,x_2,..,x_n)h_{k_1}h_{k_2} ..... h_{k_m-1} \]
\[+ \frac{1}{m} \sum_{k_1=1}^{n} \sum_{k_2=1}^{n} ... \sum_{k_m=1}^{n} \frac{\partial^{m} f}{\partial x_{k_1} \partial x_{k_2} ... \partial x_{k_m} }(x_1 + \theta h_1, x_2 + \theta h_2,...., x_n + \theta h_n) h_k{k_1}h_{k_2}....h_{k_n}\]
最後の項は一変数の時と同様に剰余項と呼ばれます。

Proof

ここでは、一変数のテイラー展開の証明をします・
この証明にはロルの定理を用いています。ロルの定理については以下の投稿を参考にしてください。

ロルの定理の投稿はこちら

f(x)を区間(a,b)で連続で、n回微分可能な関数とします。
この定理の証明は次を示すことで達成されます。
\[f(b) = \sum_{k=}^{n-1} f^{(k)} (a) \frac{(b-a)^k}{k!} + A \frac{(b-a)^n}{n!}\]
新しく、次のような関数を定義します。
\[g(x) = f(b) - \sum_{k=0}^{n-1} f^{(k)}(x) \frac{(b-a)^k}{k!} - A \frac{(b-x)^n}{n!}\]
g(x)は次のことを満たすことがすぐにわかります。
  • g(a) = 0
  • g(b) = 0
よって、ロルの定理より、
\[\exists c \in (a,b) ~~s.t~~ g'(c) = 0\]
\[\begin{eqnarray*} g'(x) &=& - \sum_{k=0} ^{n-1} f^{(k+1)} (x) \frac{(b-x)^k}{k!} + \sum_{k=1}^{n-1} f^{(k)} (x) \frac{(b-x)^{k-1}}{(k-1)!} + A \frac{(b-x)^{n-1}}{(n-1)!} \\ &=& -\sum_{k=1}^{n} f^{(k)} (x) \frac{(b-x)^{n-1}}{(k-1)!} + \sum_{k=1}^{n-1} f^{(k)} (x) \frac{(b-x)^{k-1}}{(k-1)!} + A \frac{(b-x)^{n-1}}{(n-1)!}\\ &=& -f^n (x) \frac{(b-x)^{n-1}}{(n-1)!} + A \frac{(b-x)^{n-1}}{(n-1)!} \end{eqnarray*}\]
cをxに代入することで
\[g'(c) = \frac{(b-x)^{n-1}}{(n-1)!} (A - f^{(n)}(x))\]
\[A = f^{(n)}(x)\]
Q.E.D

Reference
https://mathtrain.jp/taylortheorem
http://www.ne.jp/asahi/search-center/internationalrelation/mathWeb/Differentiation/TheoremsDffrntlNvarFnctn/TaylorTheorem.htm

コメント

このブログの人気の投稿

Implementation of Robbins monro

Robbins monro の実装 sorry, this page is Japanese only.   今回はRobbins monro の実装をしてみました。 Robbins monroは確率勾配降下法の学習率を入りテーション回数の逆数で割っていくものです。 使っているprogram言語はpython 3です。osはwindowsです。(macほしい...) アルゴリズム 確率勾配降下方とは目的関数の最適解を求めるアルゴリズムです。目的関数をf(X)とすると、手順は以下のようになっています。 初期学習率$n_0$を決めます。訓練データDを用意します。この訓練データは複数の初期値の集まりです。 訓練データから一つ初期値をランダムに取り出し、これを$x_0$とし、最初の予測値とします。 次の式に現在の予測値$x_0$を代入し、新たな予測値$x_{n+1}$を得ます。$$x_{n+1} = x_{n} - \frac{n_0}{n} grad f(X_n)$$ 収束して入れば4へ、収束していなければ2で得られた値$x{n+1}$を新たに$x_n$としてもう一度2を行う。 訓練データを一周していなければ2へ、一周していれば各初期値から得られた解の中から目的関数を最も小さくするものを選ぶ。   実装例 以下の目的関数を最小化させてみましょう。 $$f(x,y) = (x-2)^2 + (y-3)^2 $$ コマンドラインでpythonを実行していきます。 予想通り、(2,3)という解を導き出してくれました。目的関数が簡単だったので、初期値をどの値でとってもばっちり正解にたどり着いてくれました。 CODE 以下にRobbins monroの関数だけ置いておきます。 こちら にすべてのコードを載せています。 def Robbins_monro(function,grad,number_variable_gradient): init_learning_rate = 1.5 stepsize = 1000 init_value = np.array([range(-1000,1020,20) for i in range(number_v...

Graph theory in Python

Introduction 日本語 ver Today, I write the networkx module for graph theory in Python. I write about basis of Gragh theory. Please look at this page . This post is not written Graph theory, but I want to share module in Python for Graph theory. Networkx Python3 have Networkx module. If you have python2, you should install by pip pip install networkx Make Graph by Networkx first, import networkx module and make instance. import networkx as nx import matplotlib.pyplot as plt G = nx.Graph() next, add node and edge G.add_node(1) # add Multiple nodes G.add_nodes_from([2,3,4]) G.add_edge(1,2) # add Multiple edges G.add_edges_from([(3,4),(1,2),(4,6)]) next, plot G nx.draw(G) plt.show() networkx have many function. I will write new learning about networkx in this post. Reference https://qiita.com/kzm4269/items/081ff2fdb8a6b0a6112f http://akiniwa.hatenablog.jp/entry/2013/05/12/012459

LIMIT and user variable in MysQL

Problem 日本語 ver I want to use this query in PROCEDURE. SET @user_variable = FLOOR(RAND()*10); INSERT INTO  Table_name (columns_name) VALUES (1) FROM Table_name ORDER BY RAND() LIMIT 1 OFFSET @user_variable; This query want to substitute 1 for the @user_variable 'th line of columns_name, but this query does not work. A cause is that LIMIT and OFFSET does not user variable. Solution SET @user_variable = FLOOR(RAND()*10); PREPARE SET_STMT FROM 'INSERT INTO  Table_name (columns_name) VALUES (1) FROM Table_name ORDER BY RAND() LIMIT 1 OFFSET ?;';  EXECUTE SET_STMT USING @user_variable; Conclusion, if you want to use user variable with LIMIT or OFFSET, use PREPARE STATMENT. Reference http://techtipshoge.blogspot.com/2011/10/limit.html