テイラー展開・マクローリン展開
複雑な関数を「多項式のはしご」で近似する解析学の万能ツール
- 1
- テイラー展開とは、何回でも微分可能な関数を、ある点における微分係数を使った「多項式の無限級数」として表す手法
- 2
- 展開の中心が の特別な場合を「マクローリン展開」と呼び、 などの初等関数がよく知られた級数を持つ
- 3
- コンピュータのCPUや数学ライブラリは などの超越関数を直接計算できないため、内部的にはテイラー展開を有限項で打ち切った多項式近似で数値計算している
なぜこれを学ぶのか? — 現実社会とテクノロジーでの価値
なぜ生まれたのか?
テイラー展開とは、何回でも微分可能な関数を、ある点における微分係数を使った「多項式の無限級数」として表す手法
身につく武器・思考力
展開の中心が $x=0$ の特別な場合を「マクローリン展開」と呼び、$\sin x, \cos x, e^x$ などの初等関数がよく知られた級数を持つ
実社会・ITでの活躍現場
- •数学ライブラリにおける三角関数・指数関数の数値近似
- •ITシステム・アルゴリズム実装における論理設計
- •データ分析やシミュレーションにおける数理モデリング
Layer 1 — 直感・シミュレーター
近似したい関数を または から選び、スライダーで多項式の項数 を増やしてみよう。青い線が真の関数、オレンジの線がN項までのテイラー多項式近似を表し、Nを大きくするほどオレンジの線が青い線にぴったり重なっていく範囲が広がっていく様子をグラフで確認できる。
↑ 項数 N を増やすほど、オレンジの近似曲線が青い真の関数曲線に重なる範囲(収束する区間)が広がっていく。中心(x=0)から離れるほど、同じNでも近似の誤差が大きくなる様子も確認できる。
のマクローリン展開を3次の項まで求めるとどうなるか?
Layer 2 — 定義・受験・証明
定義
点 の近傍で 回微分可能な関数 に対し、次のべき級数を「 を中心とするテイラー展開」と呼ぶ。
特に の場合を「マクローリン展開」と呼ぶ。有限の 項で打ち切ったものを「次テイラー多項式 」と呼び、 の近似として利用する。
公式・数理モデル
証明・導出
剰余項付きテイラーの定理の導出(積分による剰余表示): 微積分の基本定理より である。 右辺の積分に部分積分を繰り返し適用する。 に対し 、 を と見て部分積分すると、
この操作を 回繰り返すことで、
が得られる。最後の積分に積分の平均値の定理を適用すると、ある が存在して積分項は と書ける(ラグランジュの剰余項)。 この剰余項 が で に収束する範囲(収束半径内)では、テイラー級数は元の関数 に完全に一致する。
押さえておきたいポイント
- 、、 はすべての実数 で収束する
- 剰余項 の大きさを評価することで、有限項近似がどれだけ真の値に近いか(誤差の上限)を数学的に保証できる
- テイラー展開の中心 から離れるほど、同じ次数 でも近似精度は一般に悪化する(収束半径の制約)
- オイラーの公式 は、 のマクローリン展開を比較することで証明できる
本トピックの内容・数理モデルは、文部科学省学習指導要領(算数・数学・情報)および国際標準カリキュラムに準拠し、エンジニアリング現場の実装事例と照らし合わせてMath World Lab編集部により検証・作成されています。
Layer 3 — 工学応用・現場実装
数学ライブラリにおける三角関数・指数関数の数値近似
CPUや標準ライブラリの 関数は、テイラー展開(や、より収束の速いチェビシェフ近似・ミニマックス近似)を有限次数で打ち切った多項式を、ハードウェアの乗算・加算命令だけで高速に評価することで計算されている。ここでは最も基本的なテイラー展開による近似の実装を示す。
1// N項までのテイラー多項式で sin(x) を近似(マクローリン展開)2function sinApprox(x: number, terms: number): number {3 let result = 0;4 let sign = 1;5 let power = x; // x^(2k+1)6 let factorial = 1; // (2k+1)!78 for (let k = 0; k < terms; k++) {9 result += sign * (power / factorial);1011 // 次の項の準備: 指数を2つ増やし、階乗も更新12 power *= x * x;13 const n = 2 * k + 2;14 factorial *= n * (n + 1);15 sign *= -1;16 }17 return result;18}1920// N項までのテイラー多項式で exp(x) を近似21function expApprox(x: number, terms: number): number {22 let result = 0;23 let term = 1; // x^k / k! の第k項24 for (let k = 0; k < terms; k++) {25 result += term;26 term *= x / (k + 1); // 次の項を漸化式で更新(毎回階乗を計算し直さない)27 }28 return result;29}3031// 精度検証: 項数を増やすほど Math.sin / Math.exp の真値に近づく32console.log("sin(1) 真値:", Math.sin(1));33console.log("sin(1) 3項近似:", sinApprox(1, 3));34console.log("sin(1) 6項近似:", sinApprox(1, 6));3536console.log("exp(1) 真値:", Math.exp(1));37console.log("exp(1) 10項近似:", expApprox(1, 10));
次に学ぶならコレ!おすすめトピック
この単元と深い繋がりを持つ、あわせて学ぶと理解が深まるおすすめ単元