ページ 11

テイラー級数

Posted: 2007年7月04日(水) 10:02
by たろぉ
e^x=1+x/1!+x^2/2!+x^3/3!+・・・
上記に基づき、e^xの値を計算するプログラムを作成する。forループ whileループ do-whileループ を使う時は、再帰関数によって実現する。仕様は以下の通り。

<<仕様>>
1.xの値を入力し、標準関数 exp() を用いて、比較のための e^x 値を求める。
2.上記式における項数を入力し、テイラー級数による e^x の近似値を求める。


以上です。
長々とすいません。
あまり知識がないので…。
教えて頂ければ幸いです。

Re:テイラー級数

Posted: 2007年7月04日(水) 11:32
by 管理人
以下の式を数学の式だと思ってください。
例えば、階乗の定義はこうなっていますよね。

	f(n) = f(n-1) * n	(n>0)
	     = 1		(n==0)

これをそのまんまプログラムで書けばいいんです。

int	f( int n )
{
	if( n>0 ) 
		return	f(n-1) * n;
	
	else if( n==0 )
		return	1;
	
}

これが階乗を計算するプログラムです。
こういう要領でまず漸化式のような数式を考えてから実装してみてください。
(引数nは0以上の数であることに注意してください。)

Re:テイラー級数

Posted: 2007年7月04日(水) 11:45
by toyo
1+x/1!+x^2/2!+x^3/3!+・・・
の部分をプログラムにすればいいんです
無限級数ですが x^n/n! は0に収束するので適当に小さくなった時点で打ち切ればよいでしょう
具体的にはdouble型で計算するとして 1e-08 より小さくなったら終了でよいと思います。
whileループの例として
double myexp(double x)
{
	double EPS = 1e-08;
	double d = 1.0, s = 1.0, e = 1.0, diff;

	while (1) {
		d = ??; /* x^n */
		s = ??; /* n! */
		diff = d / s; /* x^n / n! */
		e += diff;
		if(diff < EPS) {
			break;
		}
	}
	return e;
}

Re:テイラー級数

Posted: 2007年7月04日(水) 11:53
by toyo
項数は入力するんですね
よく読んでいませんでした