(3-x)*exp(x)=3の数値解
はてなブログへのコードの載せ方は
www.tsubasa-note.blog
を参照した
今、読んでる本に
の数値解は...
が出てきたから、(この数値、自分で出したい!)と思って、計算機に計算させた。ニュートン法とかでビシッ!と値の近い解を出せたら格好良いだろうなぁと思いつつ...
結局、ニュートン法使わなかったけど...
C言語で計算結果をバーッと出力させた。
//reyleigh_jeans1.c #include <stdio.h> #include <math.h> float f(float x); //プロトタイプ宣言 int main(void){ int i; float x=0.,y; for(i=0;i<500;i++){ x=i*0.01; y=f(x); //関数呼び出し printf("%f %f\n",x,y); } return 0; } float f(float x){ //関数の定義 float y; y=(3-x)*exp(x)-3; return y; }
Cygwinでコンパイル。math.hというヘッダファイルを含んでるので、gccコマンドにオプション-lmをつけなきゃいけない。
$ gcc reyleigh_jeans1.c -lm
Cygwinで実行。
$ ./a
数字の羅列が出た。
~にかけて正から負に値が変化してる。
gnuplotでグラフ化したいから、Cygwinで
$ ./a>"jeans.dat"
を実行。
gnuplot開いて、
gnuplot> set xrange[0:2.9]
この後、
gnuplot> plot "jeans.dat"
こんなグラフが出た。
マウスのポインタを合わせれば大体、2.82付近が0になるってわかるけど、もっと正確に知りたいのと、0になる点だけを表示したいなぁ...
#include <stdio.h> #include <math.h> float f(float x); int main(void){ int i; float x=0.,y; for(i=27000;i<30000;i++){ //繰り返しの開始を27000に。 x=i*0.0001; //0.0001ずつ増やしてく y=f(x); if(y<0.001){ break; } } printf("%f %f\n",x,y); return 0; } float f(float x){ float y; y=(3-x)*exp(x)-3; return y; }
繰り返しを開始するところとか、増加パターンとか、脱出するタイミングとかをいろいろ試行錯誤で決めて、コンパイル、実行。
$ gcc reyleigh_jeans2.c -lm
$ ./a 2.821400 0.000544
やったー、こぎ着けた。おしまい!
ソースコードをブログ中でスクロールできるようにしたいけど、
chorusde.hatenablog.jp
これを見る限り、CSSの知識がないと無理っぽいからお手上げ。