解決済み

C言語の、sinxのマクローリン展開を教えて下さい

  • すぐに回答を!
  • 質問No.8984094
  • 閲覧数4969
  • ありがとう数6
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 77% (73/94)

C言語の、sinxのテイラー(マクローリン)展開を求めるプログラムを教えて下さい。

sinx=x-(x^3)/3!+(x^5)/5!-(x^7)/7!+(x^9)/9!・・・
となっており、
整数nと実数xを入力すると
第n項までの和を求めるプログラムを作らないといけません。
以下は、私が作ったプログラムです。
#include<stdio.h>
#include<math.h>
int main(void)
{
int i,n;
double x,kotae,tmp;

printf("n=? \n");
scanf("%d",&n);
printf("x=? \n");
scanf("%lf",&x);

kotae=x;
tmp=1;
for(i=1;i<n;i++)
{
tmp=tmp*(-1)*x*x/(2*i)/(2*i+1);
kotae=kotae+tmp;
}
printf("sin%fのテイラー展開第%d項までの和は%f \n",x,n,kotae);
return 0;
}
作ったのですが、うまくいきません
n=2、x=2にすると1.3333・・・とかになってしまいます
どうすればいいでしょうか?
分かる方、お願いします。

質問者が選んだベストアンサー

  • 回答No.3

ベストアンサー率 60% (3/5)

こんな感じ?
以下変更点
・関数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;
}
お礼コメント
batorumosura

お礼率 77% (73/94)

有難うございます。
おかげで助かりました
投稿日時 - 2015-06-09 18:00:56

その他の回答 (全2件)

  • 回答No.2

ベストアンサー率 46% (104/225)

>どうすればいいでしょうか?

手動デバッグのやり方と数列の基本を身につけてください。

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を代入して確認するのは基本中の基本。
大学生なら、高校数学を復習した方がいい。
お礼コメント
batorumosura

お礼率 77% (73/94)

有難うございます。
助かりました
投稿日時 - 2015-06-09 17:59:59
  • 回答No.1

ベストアンサー率 43% (30/69)

tmp=1; // ここ違うんじゃないかい?
tmp=x; // こうじゃね
お礼コメント
batorumosura

お礼率 77% (73/94)

助かりました。
投稿日時 - 2015-06-09 17:59:25
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

ピックアップ

ページ先頭へ