• 締切済み

C言語

C言語による課題です.指数関数のマクローリン展開について,第n項までの近似値を求めるプログラムを作成し,各ステップごとに理論値との誤差を比較しなさい.(xとnは任意の値で自分で入力する.) 宜しくお願いします.

  • xmasu
  • お礼率10% (1/10)

みんなの回答

  • R_Earl
  • ベストアンサー率55% (473/849)
回答No.2

プログラムが正常に動作するかどうかは、 実際にコンパイルして実行すればある程度分かります。 質問者さんは現在、C言語のプログラムをコンパイルできない状態なのでしょうか (学校のPCにはCコンパイラがあるが、自宅のPCにCコンパイラが無い等。)? そういう前提で話を進めていきます。 プログラムの方ですが、コンパイルしようとするとエラーが出ます。 コンパイラエラーが出るのは次の箇所です。 >    printf("x="); 全角スペースがあるので、消して下さい。 > for(i=1;i<=n;i=++){ 『i=++』ではなく、『i++』です。 エラーではないですが、以下の点が気になります。 > int n; > double x=1.0,y=1.0,e=1.0,err; > > int i; > double f=1.0,p=1.0; n, x, i, errは良いんですが、yとeとfとpは一体何を表す変数ですか? 最後のprintf関数の内容から察するに、eが理論値でyが近似値でしょうか? > printf("Mclaurin展開による&d次までのexp(%e)の理論値,近似値,誤差"); &d(正しくは%dでしょうか?)と%eは何を表示するのでしょうか? 表示させる変数が書いてありません。 > printf("%12.8e %12.8e\n %12.8e\n",e,y,err); 前の行のprintfで改行していないため、表示させた時に見辛くなります。 次に数学的な話です。 exp(x)のマクローリン展開は 1 + {1/(1!)}x + {1/(2!)}(x^2) + {1/(3!)}(x^3) + … + {1/(n!)}(x^n) ですよね。 質問者さんのプログラムには、階乗(2!や3!など)を計算する部分と、 xのべき乗(x^2やx^3など)を計算する部分がありません。 また、足し算をしていません。 試しに > for(i=1;i<=n;i=++){ > > f=(double)i; > p=x; > y=p/f; > e=exp(x); > err=e-y; > } の部分の動作を紙に書いて確認してみてください。 xやnに適当な数字を代入し、プログラムに書いた通りの方法で計算して動作確認するんです。 例えばx = 4, n = 3ならマクローリン展開の式は 1 + {1/(1!)}・4 + {1/(2!)}・(4^2) + {1/(3!)}・(4^3)です。 このforループの部分はx = 4, n = 3を代入した時に、 (1) 1!や2!や3!を計算するか (2) 4^2や4^3を計算するか (3) 1と{1/(1!)}・4と{1/(2!)}・(4^2)と{1/(3!)}・(4^3)を足しているか (4) 最終的に、変数yに1 + {1/(1!)}・4 + {1/(2!)}・(4^2) + {1/(3!)}・(4^3)の値が格納されるのか といった点を見て下さい。

xmasu
質問者

お礼

ありがとうございます。 何とか完成しました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

ここは課題を丸投げしていい場所でないことは当然知っていますよね? どこまでわかっていてどこからがわからないのか, きちんと書いてください.

xmasu
質問者

補足

まず,課題を丸投げしてしまったことをお詫びさせていただきます.すいませんでした. プログラムを書いてみました.間違いがあったらご指摘していただけたら幸甚です. ------------------------------------- #include <stdio.h> #include <math.h> int main(void) { int n; double x=1.0,y=1.0,e=1.0,err; int i; double f=1.0,p=1.0;    printf("x="); scanf("%lf",&x); printf("n="); scanf("%d",&n); for(i=1;i<=n;i=++){ f=(double)i; p=x; y=p/f; e=exp(x); err=e-y; } printf("Mclaurin展開による&d次までのexp(%e)の理論値,近似値,誤差"); printf("%12.8e %12.8e\n %12.8e\n",e,y,err); return 0; }

関連するQ&A

  • 微分積分のマクローリン展開でお願いします。

    マクローリン展開を用いて、任意の角θにおける sinθ,cosθ,tanθの近似値を計算するための θの多項式を求めなさい。 但し、展開式はいづれもθの5次までの項の和の形として求め、 θの昇べき順に整理して表しなさい。 さらに、θ=π/4の場合について、 求めた多項式による三角関数の近似値と正確な値を比較して誤差を求め、 その誤差の真の値に対する比率(%)を求めて、 近似式の制度を検討しなさい。 その誤差の真の値に対する比率(%)を求める所が、 良く解らないのですが、 全体を通して解りやすくお願いします。

  • sinxの数値計算

    sinxの数値計算 任意のxに対するsinxの値をマクローリン展開を利用して近似し、誤差の限界(n番目の値が1*10^-8)になるまでもとめよ。 という問題なんですが、for文でいろいろやってみたのですが、n番目の値が1*10^-8までというのがどうしてもできません。 C言語です。 ヒントだけでもいいので教えてください。 明後日の試験にこれの類題が出るようなので、よろしくお願いします。

  • c プログラム 

    以下のプログラムは,第n項までのe^xのマクローリン展開をさせるものです. これを修正して,理論値と近似値の誤差がある値(自分で入力)になったときに,計算を終了させるにはどうしたらよいでしょうか.御教授いただければ幸甚 です. ---------------------------------------- #include <stdio.h> #include <math.h> int main(void) { int n; double x=1.0,y=1.0,e=1.0,err; int i; double f=1.0,p=1.0; printf("x="); scanf("%lf",&x); printf("n="); scanf("%d",&n); printf("Mclaurin展開によるn項までのexp(x)の\n n 理論値 近似値 誤差\n"); for(i=1;i<=n;i++){ f*=(double)i; p*=x; y+=p/f;近似値 e=exp(x);理論値 err=e-y;誤差 printf("%2d %12.8e %12.8e %12.8e\n",i,e,y,err); } return 0; }

  • マクローリン展開の問題です!!

    sin(0.1)の近似値を関数sin(x)のマクローリン展開のx^5の項までを計算して求めよ。また誤差|R6|を評価せよ。 お願いします。

  • 近似値をマクローリン展開を用いて少数第四位まで求めよという問題です。

    近似値をマクローリン展開を用いて少数第四位まで求めよという問題です。 (1)1/5.001 (2)√(4.03) 何をxとおいてマクローリン展開して、剰余項Rn<0.00005となるnをどうやったら求めることができますか?

  • logとルートの比較

    log n と√nとは関数の増え方はどちらが速いでしょうか。 また(logn)^2とnloglogn とではどちらが速いでしょうか。 問題文にはnよりもe^nの方が関数の増え方として速いということ lim[n→∞] {n/e^n}=0を仮定しても良い とあります。 n=1-xマクローリン展開で比較してみようかと思ったのですが x=1-xとなり√の方がマイナスの項が増えるのでどう比較 すれば良いのか分からなくなっていしまいました。 マクローリン展開に限らなくて、説明できれば良いです。 よろしくお願いします。

  • C言語でのsinxのマクローリン展開について

    課題で、「n 番目の値が、1*10^-8 よりも小さくなるまでの級数を求め任意のxに対するsinxの値をマクローリン展開を利用して近似せよ。」というものが出たので、プログラムを作成してみたのですが、間違った値が出力されてしまいます。以下にプログラムを示しますので、間違っている点の指摘をお願いします。 #include<stdio.h> int main(void) { long double a,b,c,d,n,x,ans,xx; ans = 0; a = c = d = 1; printf("xを入力"); scanf("%lf",&x); b = x; for(n = 1; d >= 1e-8; a *= (n - 1) * n , b *= xx){ xx = x * x; d = b / a; ans += (b * c)/a; c *= -1; n += 2; } printf("%.8f",ans); return 0; }

  • テーラー展開するには

    e^-xをテーラー展開するということはマクローリン展開すればよいのですか?問題ではxの値が指定されていません。さらに、近似誤差が1%以内となるxの値も問われています。どうすればよいか詳しく教えてください。

  • sinのマクローリン展開

    再帰的関数定義とsin(x)のマクローリン展開の初めの10項を用いてsin(x)の近似値を出力するプログラムを作成せよ。 という問題で、マクローリン展開は分るのですがプログラムに出来ません…。 関数まで習っていて、配列などはまだ習っていないのですが、 どうやれば良いのかどなたか教えてください_| ̄|○

  • 剰余項の収束、n次導関数、どっちに採点の基準が置かれるか?

    ある関数f(x)があって、f(x)のマクローリン展開(x=0におけるテイラー展開)を求めよ、と言われたら、剰余項の収束がきちんと示されているか いないかのところで、ほとんどの点数が決まりますか? f(x)のn次導関数を導く手順はあまり重視されないですよね? たとえば、sinxのマクローリン展開を示したい場合、sinxのn次導関数sin(x+nπ/2)を、数学的帰納法を使って長ったらしく書いて証明して、テイラーの式に当てはめて正しいマクローリン展開の式が導けたとしても、肝心の剰余項について触れずに終わってしまってる答案は、ほとんど点数がつかないのではないかと思ったのですが、どうなんでしょうか?