- ベストアンサー
C言語でsinxのマクローリン展開を求めるプログラムの作成方法
- C言語のsinxのテイラー(マクローリン)展開を求めるプログラムを作成する方法を教えてください。
- プログラムでは、入力された整数nと実数xに基づいて、第n項までのsinxのテイラー展開の和を求めます。
- 現在作成したプログラムでは、n=2とx=2の場合に正確な値が得られない問題があります。解決策を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じ? 以下変更点 ・関数kaiを追加。階乗を計算。 ・変数mを追加。(2 * n + 1)を計算した結果を入れる ・変数sを追加。符号を表現する。 その他ちょこちょこ変わってます。 #include<stdio.h> #include<math.h> double kai(int n) { double k = 1.0; while(n > 1) { k *= n; n--; } return k; } int main(void) { int i, n, m; double x, kotae, tmp, s; printf("n=? \n"); scanf("%d",&n); printf("x=? \n"); scanf("%lf",&x); kotae = 0.0; for(i = 0 ; i < n ; i++) { m = (2 * i + 1); s = ((i % 2) == 0) ? 1.0 : -1.0; tmp = s * pow(x, m) / kai(m); kotae += tmp; } printf("sin%fの値は%lf\n", x, sin(x)); printf("sin%fのテイラー展開第%d項までの和は%f \n" ,x ,n ,kotae); return 0; }
その他の回答 (2)
- kanemoto_s
- ベストアンサー率45% (112/244)
>どうすればいいでしょうか? 手動デバッグのやり方と数列の基本を身につけてください。 n=0,x=2のとき forループ終了時、 tmp=1 , kotae=2 この時点でtmp=1が間違いであることに気付く必要がある。 tmp=x; に修正して n=1,x=2のとき forループ終了時、 tmp=x=2 , kotae=2 この時点で、for文のn=1かi<nの間違いに気付く必要がある。 修正して forループ終了時、 tmp=-x^3/(2*3) , kotae= ... 目の前に実行環境があるなら、手動デバッグでなくて、tmpも表示したり、for文の中で逐次表示すればよい。 数列でn=0やn=1を代入して確認するのは基本中の基本。 大学生なら、高校数学を復習した方がいい。
お礼
有難うございます。 助かりました
- colder
- ベストアンサー率43% (30/69)
tmp=1; // ここ違うんじゃないかい? tmp=x; // こうじゃね
お礼
助かりました。
お礼
有難うございます。 おかげで助かりました