• ベストアンサー

C++を使ってのテイラー展開

C++を使って,sinとcosのテイラー展開をしたいのです。 プログラムを作ってはみたのですが,こんな感じでよろしいのでしょうか? #include<stdio.h> int main(void) {  int i,n;  double xb,x,sinx=0,cosx=0,hu;  xb=1.0;  hu=1.0;  printf("どこまで計算しますか?");  scanf("%d",&n);  printf("xはいくらですか?(1以下!)");  scanf("%lf",&x);  for(i=1;i<n;i++)  {  xb=xb*(x/i);  if(i%2==0)  { sinx=sinx+(hu*xb); hu=hu*(-1.0); }  else  { cosx=cosx+(hu*xb); hu=hu*(-1.0); }  }  if(i%2==0)  { printf("答え:%f\n",sinx); }  else  { printf("答え:%f\n",cosx); }  return 0; }

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#include<stdio.h> int main(void) { int i,n; double xb,x,sinx=0,cosx=1.0,hu; xb=1.0; hu=1.0; printf("どこまで計算しますか?"); scanf("%d",&n); printf("xはいくらですか?(1以下!)"); scanf("%lf",&x); for(i=1;i<n;i++){ xb=xb*(x/i); if(i%2!=0){ sinx=sinx+(hu*xb); hu=hu*(-1.0); } else { cosx=cosx+(hu*xb); } } if(i%2==0) { printf("答えsinx:%10.9f\n",sinx); } else { printf("答えcosx:%10.9f\n",cosx); } return 0; }

hatomura
質問者

お礼

これです(^^) ちゃんと答えになりました。 ありがとうございました。 助かりました(^^ゞ

その他の回答 (2)

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.2

すみません。 どこまで計算しますかで、100 xはいくらですかで、 0.5 を入力すると 答え:-0.127626 となるのですが、この答えは、なにを意味しているのでしょうか? sin(0.5)の値でしょうか?

hatomura
質問者

お礼

回答ありがとうございます。 ここでのxはラジアンで,sin(0.5)は0.479・・・になるみたいなんです(T_T) う~ん。。。 どこが違うのやら・・・

回答No.1

こんな感じとは? 期待する値が返ってきてるなら、いいんじゃないかしら。

hatomura
質問者

お礼

回答ありがとうございます(^^) Cがさっぱり分からない  + そもそも数学が分からない こんな私ですのでちょっと(というかかなり)不安だったので(^_^;) 多分期待する値が返ってきていたはず・・・

関連するQ&A

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

    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・・・とかになってしまいます どうすればいいでしょうか? 分かる方、お願いします。

  • テイラー展開

    テイラー展開 教科書に「n=3として、f(x)=sinxのx=π/4におけるテイラー展開を求めよ。」という問題があります。 f(x)=sinxは無限回微分可能。 n=3 a=π/4 としてテイラー展開を行う。 n=3なので、テイラーの定理に(n+1)乗まで、a=π/4を当てはめればいい。 そして、f(x)、f'(x)、f''(x)…と、(n+1)回微分まで求めて、求めた値f(π/4)、f'(π/4)、f''(π/4)…をテイラーの定理に代入する。 講義のルーズリーフをなくしてしまい、記憶で解いていたのですが果たして考え方が合っているのか不安です。これでいいんですよね?

  • C言語の問題がわからないです。

    C言語のプログラムで、列数を自分で決めて、 (例)3列         ●(この行を最後として)   □● ●□● 上記のプログラムを作りたいのですが、 上手くいきません。途中まで作ったのですが、なかなか思うようにいかないです。どうすれば上記のようになりますでしょうか? #include <stdio.h> void disp(int x, int y); main() { int i,n; printf("表示する列:"); scanf("%d",&n); disp(3,3); for(i=1;i<=n;i++){ if(i%2==0){ disp(n-i,4); disp(i,2); } else{ disp(n-i,4); disp(i,1); } disp(1,3); } } void disp(int x, int y) { int i; for(i=0;i<x;i++){ if(y==1){ printf("●"); } else if(y==2){ printf("□"); } else if(y==3){ printf("\n"); } else{ printf("\0"); } } }

  • e^(2x)*sinx  *は積 のテーラー展開は?

    こんにちは。  f(x)=e^(2x)・sinX をテーラー展開して一般項を考えることをしています。  微分していきます。  f'(x)=2e^(2x)・sinX+e^(2x)cosX  f^(2)=4e^(2x)・sinX+2e^(2x)・cosX+2e^(2x)・cosX-e^(2x)・sinX となると思います。  さて、そもそもテーラー展開とはなんぞや?ということもありますが、この先どのように解を導けばいいのか、方法だけでも、あるいは 一般項だけでも教えてください。  よろしくお願いします。

  • テイラー展開

    数学についての質問です。 解説お願いします。 問:次の関数の与えられた点のまわりでの、3次までのテイラー展開を求めよ。 (1)2/(x+1) (x=0) (2)sinx +cosx(x=π/3) (3)e^-x (x=1) 問:f(x)=arctanxについて以下の問いに答えよ。 (1)f(x)の、x=0のまわりの2次までのテイラー展開を求めよ。 (2)lim(x→0)arctanx-x/x^3 を求めよ。

  • テイラー展開について教えてください。

    テイラー展開に関する問題です テイ ラー展開に関する問題です。 (1)以下の関数のx=0を中心としたテイ ラー展開をし、一般項を書け。 (i)cosx (ii)1/(1-x) (2)x=0を中心とした1/(2-x^2)のテイラ ー展開をし、一般項を書け。 (3)x=0を中心とした(cosx)/(2-x^2)のテ イラー展開をx^6の項まで求めよ。 (4)lim[x→0](1/x^4){(cosx/(2-x^2))-(1/2)}を求めよ。 以上です。 自分でも求めたのですが、あってい るかが分かりません。 確認お願いします。 (1)(i)cox=Σ[n=0→∞]((-1)^n)(x^(2n))/(2 n)! (ii)Σ[n=0→∞]x^n (2)1/(2-x^2)のテイラー展開は自信が ないのですが、これをテイラー展開 の式に代入して求めていくとすごく 時間がかかるので、 1/(2-x^2)=(1/2){1/(1-(x^2/2))}と変形し 、(1)の(ii)と同じようにして、Σ[n=0→ ∞](1/2)(x^2/2)^nとなりました。 果たして、これでいいのでしょうか ? (3)たぶんこれは(1)と(2)の結果を使え ということだと思うのですが、これ は(cosx)と1/(2-x^2)のそれぞれの項を かければいいだけですか? たとえば、1項は、cosxの1項目の1 と、1/(2-x^2)の1項目の1/2をかけて 、1/2となるのでしょうか? (4)これはちょっと分からないです。1 /x^4がかかっているので、テイラー 展開したものでも分母にxの項が入っ てしまい、発散しそな気がしたので すが、そんなはずはないので、よくわからないです 回答よろしくお願いします。

  • C言語のIF関数のアドバイスお願いします。

    #include <stdio.h> int main(){ int x,i,div=0; printf("x="); scanf("%d",&x); for(i=1;i<=x;i++){ if(x%i == 0){ div++; } } if(ここがわかりません) printf("%dは素数です\n",x); else printf("%dは素数でありません\n",x); return 0; }

  • C言語 プログラミングで行詰まりました…

    標準入力(キーボード)からi,jk,nの値を入力し、次の漸化式を計算し、X_0からX_nまで求めるプログラムを作成したいのですが、うまく表示されません。どかがおかしいのかご指摘お願いします。 <漸化式> X_n=(a+b)/X_(n-1) , X_0=c(n=0) ================================================================== #include<stdio.h> float f_X(int a,int b,float c) { float y; y=(a+b)/c; return y; } int main (void) { int number,i,j; float k,l,n,X; printf("i:"); scanf("%d", &i); printf("j:"); scanf("%d", &j); printf("k:"); scanf("%f", &k); printf("n:"); scanf("%f", &n); X=k; printf("X_0= %.6f\n",X); for(number=1;number<=n;number++) { l=f_X(i,j,X); printf("X_%d= %.6f \n",number,l); X=l; } return 0; } ===================================================================

  • テイラー展開(C言語)

    こんにちは<_ _> 毎度もうしわけありません・・・ exp(x)をテイラー展開を用いて計算せよという問題で -----------------------外を与えられ サイトなどを見て見よう見まねで-----内を組んでみましたが 当然思い通りになるわけでもなく;; テイラー展開という考え方は1.00007の何乗を1と.00007分に分けて 計算するというものであるという認識です。 (そもそも言葉自体始めて見て、サイトで調べてみたもので あっているかどうかも・・・) 以下の結果 「 x myexp(x) exp(x) 0.0 1 1 10.0 110123 22026.5 20.0 4.85165e+009 4.85165e+008 30.0 1.60297e+014 1.06865e+013 40.0 4.70771e+018 2.35385e+017」 こうなりましたが、期待の結果はexpとmyexpの結果が 同じものにならなければいけないみたいです・・・ テイラー展開の補足とヒントでもいいので プログラムの組み方を教えてください<_ _> おねがいします<_ _> #include<stdio.h> #include<math.h> double myexp(double); int main(void) { double x; printf(" x myexp(x) exp(x)\n"); for(x=0;x<=40;x=x+10) printf("%5.1f%14.6g%14.6g\n",x,myexp(x),exp(x)); } double myexp(double x) { double EPS=1e-08; double s=1.0,e=1.0,d=1.0,diff; int k; ----------------------------------- d=x*x; k=2; while (1){ x = x*d; s *= (k-1)*k; k += 2; diff = x/s; /* n項目の値 */ e += diff; if (fabs(diff) < EPS){ break; } } return e; ------------------------------ }

  • C言語でのじゃんけん

    こんちには。 C言語の乱数を用いてじゃんけんプログラムを作ろうと思っているのですが、 エラーメッセージが出てしまいうまくいきません。 どこがおかしいのでしょうか? #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int i,j,k; printf("じゃんけんをしましょう(ぐー:1、ちょき:2、ぱー:3)¥n"); for(k=k; k<=10; k++) { srand(time(NULL)); j=rand()%3+1; scanf("%d",&i); if(i==1&&j==1) printf("私はグーなので、あいこです¥n"); else if(i==1&&j==2) printf("私はチョキなので、あなたの勝ちです¥n"); else if(i==1&&j==3) printf("私はパーなので、あなたの負けです¥n"); else if(i==2&&j==1) printf("私はグーなので、あなたの負けです¥n"); else if(i=2&&j==2) printf("私はチョキなので、あいこです¥n"); else if(i==2&&j==3) printf("私はパーなので、あなたの勝ちです¥n"); else if(i==3&&j==1) printf("私はグーなので、あなたの勝ちです¥n"); else if(i==3&&j==2) printf("私はチョキなので、あなたの負けです¥n"); else if(i==3&&j==3) printf("私はパーなので、あいこです¥n"); else printf("1か2か3を入力してください¥n"); } } OS mountain lionで利用中ですが、 「じゃんけんをしましょう(ぐー:1、ちょき:2、ぱー:3)」 と表示されたまま、うまく動作しません。 教えてください。

    • ベストアンサー
    • Mac