- ベストアンサー
テイラー展開(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; ------------------------------ }
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
> 理数系はあまり勉強してませんでした。 > > 問題は新卒研修の提出問題で > その問題を解いている段階です・・・ あらまそれは大変ですね。 わたしはテイラー展開(マクローリン展開)は大学の 情報関係の講義でやったので、純粋な文系だとやらないかもしれませんね。 提出問題だということなのでもうちょっと悩んでもらうとして、 テイラー展開ってのは何かというと、 ある式(今回の問題だと e^x ですね)を、ちょっと単純にした式の総和にするということです。 で、この「単純にする」のに微分を使います。 ある式 f(x) があったときに、 f'(x) (f(x)を一回微分したもの) + f''(x) (f'(x)をさらに一回微分したもの)+ f'''(x) (f''(x) をさらにもう一回微分したもの) … と、微分をし続けながらそれらの合計により元の式の値(の近似)が求まるわけです。 元の式によって何回微分ができるとか、どのくらいの精度で近似を求めるとか ありますが、今回の e^x は何回でも微分できますので、 単純にどこまで細かくするかの問題になります。 で、e^x をテイラー展開するとWikipediaにもあるような式になります。 #なんで、というのは数学カテゴリでお訊きください。 #わたしにはわかりやすく説明できる自信がありません。 で、それをプログラムで書くと #2の方の回答にある myexp( x ) = 1 + x + (x^2/2!) + (x^3/3!) + (x^4/4!) + ....... + (x^n/n!) になります。 大まかに書くと n=0 合計=0 while (1) { 1. nの階乗を求める(n!) 2. xのn乗を求める(x^n → pow(x, n)) 1. / 2. の値を求める 1. / 2. が十分小さかったらループから抜ける 合計に1. / 2. を足す n を1増やす } こんな感じです。 ちょっとサービスしすぎたような気がしないでもないですが、乗り切ってください。
その他の回答 (5)
- sakusaker7
- ベストアンサー率62% (800/1280)
締め切りによっては本なんか読んでいるひまもないかもしれませんが、 図解入門 よくわかる微分積分の基本と仕組み http://www.cbook24.com/bm_detail.asp?sku=4798010405 この本なんかは理解の取っ掛かりになるかもしれません。 #でもAmazonのレビューで点数良くないな… あと、#5での説明はわかりやすくしようとして 正確にでない説明になっているところがあるかもしれないので、 気になるようでしたらやはりその方面の資料を 一回あたっておくことをお勧めします。 今月末ぐらいなら結城浩さんの新刊が出る予定なので それを勧めるのですが。 #ちょうど関連する分野の本です
- Oh-Orange
- ベストアンサー率63% (854/1345)
★アドバイス ・『テイラー展開』よりも『マクローリン展開』で検索した方が良いかもしれませんよ。 あと『科学技術計算』をキーワードで検索します。 すると http://www5.airnet.ne.jp/tomy/cpro/csource.htm→『技術計算用Cプログラム ソース』 というサイトが発見できます。 こちらのサイトは私も以前から参考にさせてもらっていたサイトです。 2000年~2001年の時にお世話になりました。 バグが一部あるとその後に書かれていましたが、今見たら消えています。 多分直したのかもしれません。未確認ですが。 ・それでこのサイトの http://www5.airnet.ne.jp/tomy/cpro/mp8.htm→『MPAライブラリ 指数・対数・べき乗関数ルーチン』 が参考になりませんかね。 記述はこのサイトで紹介している多倍長演算の関数群で書かれているので <math.h> にある 算術関数に置き換えれば良いでしょう。 ・下の『参考URL』にマクローリン展開の分かりやすいサイトを張っておきます。 『指数関数のマクローリン展開』にある数式を C 言語を用いてループで記述すれば出来ます。 ・以上。
- jacta
- ベストアンサー率26% (845/3158)
質問者さんの年齢や学歴が分かりませんが... ご自身でも書かれているように、やはり数学を復習した方が近道だと思います。このまま強引にすすめても、指数関数はできても三角関数だとできないということになりそうです。 テイラー展開そのものは高校では習わなかった気がしますが、級数や微分なら(普通科や工業科の)高卒程度の学力で理解できるはずです。そこを確実に押さえておけば、テイラー展開の説明を読めば難しくないでしょう。
- php504
- ベストアンサー率42% (926/2160)
私も検索してWikipediaのページを見ましたが?でした http://assam.cims.hokudai.ac.jp/~josch/workshop/math/Maclaurin/Maclaurin1.htm をみてようやくマクローリン展開は理解できたつもりです。 質問の関数ですがWikipediaにも書いてある指数関数のテイラー展開から myexp( x ) = 1 + x + (x^2/2!) + (x^3/3!) + (x^4/4!) + ....... + (x^n/n!) をCで書けばよいようです。 実際は無限回続きますが n > xになると(x^n/n!)はしだいに小さくなるので(x^n/n!)がEPS=1e-08以下になった時点でループを抜ければよさそうです。
- sakusaker7
- ベストアンサー率62% (800/1280)
テイラー展開をキーワードにGoogleで検索すると Wikipediaのページがトップにくると思うんですが、 そこをみて > テイラー展開という考え方は1.00007の何乗を1と.00007分に分けて > 計算するというものであるという認識です。 と思われたわけではないですよね? 少なくとも今回はそのとらえ方は違います。 そして、myexpの中身が間違っています。 テイラー展開 - Wikipedia http://ja.wikipedia.org/wiki/%E3%83%86%E3%82%A4%E3%83%A9%E3%83%BC%E5%B1%95%E9%96%8B の指数関数と自然対数のところにある式を素直に使えばいいんじゃないでしょうか。 スピードだのなんだのは正しい答えが求まるようになってから。 myexpを適当に書き直したところ x myexp(x) exp(x) 0.0 1 1 10.0 22026.5 22026.5 20.0 4.85165e+008 4.85165e+008 30.0 1.06865e+013 1.06865e+013 40.0 2.35385e+017 2.35385e+017 こんな感じになりました。
お礼
解答ありがとうございます<_ _> 私は http://www.tohtech.ac.jp/~comms/nakagawa/taylorexp/taylor1.htm を参考に見ていました。 wikiのもみましたが数式が読み取れず言葉も難しくて・・・orz 数学を勉強するところから始めたほうがいいのでしょうか・・・
お礼
当方大卒の新社員です。大学は私立文系で 高校は理数科でしたが、転向して文系にいくことを決めていたので 理数系はあまり勉強してませんでした。 問題は新卒研修の提出問題で その問題を解いている段階です・・・