MENU

テイラー展開① - 指数関数

テイラー展開

数値解析などのアルゴリズムを勉強したいと思いましたので何か書いていきます。今回はテイラー展開について。

e^{x}テイラー展開してみる

e^{x}テイラー展開すると以下のようになります。

{ \displaystyle
e^{x} = 1 + \frac{x}{1!} + \frac{x^2}{2!} + \frac{x^3}{3!} + ... + \frac{x^{k-1}}{(k-1)!} + \frac{x^{k}}{k!} + ...
}

この式は無限級数で展開しているため, 実際にプログラムに落とし込むためには有限回で打ち切る必要があります。 条件は, k-1 項までの和を d, k 項までの和を s としたとき,

{ \displaystyle
\frac{|s-d|}{|d|} < EPS
}

となります。|s-d| を打ち切り誤差, \frac{|s-d|}{|d|} を相対打ち切り誤差というそうです。

今回はEPS=1e-9 とします。

プログラム

一例を示します。(C++)

#include <iostream>
#include <math.h>
#include <iomanip>
using namespace std;

double tailerexp(double);

int main(void){
    double x;
    cout << setw(5) << "x" << setw(14) << "tailerexp(x)"  <<  setw(14) << "exp(x)" << endl;
    
    for(x=0;x<=40;x=x+10){
        cout << setw(5) << x << setw(14) << tailerexp(x) << setw(14) << exp(x) << endl;
    }

    return 0;
}

double tailerexp(double x){
    double EPS=1e-09;
    double s=1.0,e=1.0,d=1.0;
    int k;

    for(k=1;k<=200;k++){
        d=s;
        e=e*x/k;
        s=s+e;
        if (fabs(s-d)<EPS*fabs(d))
        return(s);
    }

    return (0.0);
}

実行結果

    x  tailerexp(x)        exp(x)
    0             1             1
   10       22026.5       22026.5
   20   4.85165e+08   4.85165e+08
   30   1.06865e+13   1.06865e+13
   40   2.35385e+17   2.35385e+17