--/--/--

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2011/10/10

Maximaでカオスを描こうという試み

先日、「Mahtematicaで学ぶシリーズ カオス入門」という本を購入した。

Mathemaicaで学ぶシリーズ4 カオス入門


これは、Mathematicaという、数式を計算するソフトを用いて様々なカオスにまつわるグラフを書いていこう、というコンセプトの書籍だ。

大学の先生に紹介してもらってその存在を知ることができた。

「Mathematica」は、団体向けの数式計算ソフトだ。個人向けのものもあるらしいが、十万円単位の価格とのこと。

とてもじゃないが手を出せないので、ネット上で無料で手に入れることのできる、「Maxima」というソフトをインストールして、Mathematicaの代用にした。

そして、いざ冒頭のMathematicaソースをMaxima用に置き換えようとして行き詰まった。ネット上をあちこちさまよい、情報を集めたがなかなかうまく行かない。Maximaに慣れればいいのだろうが、「これ、C言語で組んだ方がはやくないか?」というありさま。

以下にその問題の概要を示す。

ローレンツのアトラクタ

  

  

  

 

上記の連立微分方程式をMathematicaを用いて、グラフにプロットせよ。



結局のところ現時点でMaximaを用いて図を描くことはできていない。少し悔しかったのでc言語を用いて図を描いた。それを下に示す。

c言語で描いたLorenz_atracter



現時点ではMaximaの知識が少なく、明らかにc言語で組むほうが早かった。しかし、いずれ慣れてくれば、また問題が複雑になればMaximaで描いた方が早くなるかもしれない。

一応、グラフを描いたc言語のソースと、gnuplotでグラフを表示させる手順を述べる。

ちなみに私が使っているOSはUbuntu11.04である。Windowsユーザーの方も、c言語とgnuplotが使える環境であれば同様の操作で描けるのではないだろうか。もちろん端末からのコマンドは違ってくるだろうが…

c言語のソース

/*Lorenzのアトラクタ*/

#include

int main(void){
int i;

double x=1;
double y=1;
double z=1;//x,y,zの初期値を設定

double dx;
double dy;
double dz;
double dt=0.01;//時間tの刻み幅

double s=10;
double r=28;
double b=8/3;//定数部分

for(i=0;i<5000;i++){
dx=(-s*(x-y))*dt;
dy=(-y-x*z+r*x)*dt;
dz=(x*y-b*z)*dt;//微分方程式

x+=dx;
y+=dy;
z+=dz;//変化量を足してループ

printf("%f %f %f\n",x,y,z);//毎回x,y,zを出力
}
return 0;
}




このソースをコンパイルしたのち以下の手順でgnuplotにより描画した。

まず端末を開き以下のように入力する。
$ ./a.out -> Lorenz_atracter.dat
$ gnuplot

1行目はそのままだと端末上に表示される実行結果を"Lorenz_atracter.dat"というファイルに出力する操作。
2行目でgnuplotを起動。


以下gnuplotの操作。

gnuplot>set xlabel "x"
gnuplot>set ylabel "y"
gnuplot>set zlabel "z"

これで、出力したときにx軸、y軸、z軸にそれぞれx,y,zの名前がつく。


gnuplot>set view 75,30

これは、3次元グラフを出力したときの見る角度を操作するコマンド。デフォルトでは[set view 60,30]となっている。ローレンツアトラクタの広がりをよく見るために少し調整した。


gnuplot>set term jpeg
gnuplot>set output "Lorenz_atracter.jpeg"
gnuplot>splot "Lorenz_atracter.dat" with lines lt 3

上の2行で、jpeg形式で出力することを宣言し、出力先の"Lorenz_atracter.jpeg"というファイルを作成し、開いている。

そして3行目で出力をし、これでプロットされたグラフができる。
[splot "ファイル名"]で3次元プロット、[with lines]でプロット点を線で結ぶ、[lt 3]で、線の色の指定(1は赤色、2は緑色、3は青色・・・というように番号によって色が変わる)という操作になっている。

ちなみにこの上の2行を飛ばして入力すれば、gnuplotの別ウィンドウが開き、グラフの確認をすることができる。

以上で操作の説明は終わりである。


冒頭で述べた、「Mahtematicaで学ぶシリーズ カオス入門」という本は、様々なカオスにまつわるグラフを描画するのがコンセプトで、カオス理論について詳しく説明しているわけではない。しかし、本のタイトルにもある通り、カオス理論の入門者にとってみれば、カオスの全体をコンパクトにまとめてくれているので非常にありがたい。

この本をもとにカオス理論を学ぶ骨組みをつくっていくことができそうだ。



Maximaで描画する方法についてはまた後日記述したいと思う。

ではまた次の記事で。
関連記事
スポンサーサイト

コメント

非公開コメント

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。