--/--/--

スポンサーサイト

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

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

前回の記事では有名な「ローレンツ・アトラクタ」をMaximaという数式計算ソフトで描こうと試み、よくわからないので結局c言語で描いてお茶をにごしました。

まだMaximaの使い方を十分把握しておらず、ネット上の情報をつぎはぎしてもなかなかうまく行きませんでした。

しかし、試行錯誤を繰り返すうち、とりあえず前回の記事にあったローレンツアトラクタを描くことができました!

いきなりですが、その画像を下に示します。

maxima_atracter.jpeg



...まあ前回と同じようなグラフが描けたわけですが、今回はちゃんとMaximaを用いて描きました。
前回の記事を読んでいない方は以下のリンクで概要を確認できます。
Lorenz_atracter概要

では、Maximaでどのように操作すればよいのか順を追って説明します。

1.wxmaximaの導入
Maximaという大変便利な数式計算ソフトは、Ubuntu11.04には標準搭載されていません

Maximaは端末上で操作するソフトですが、数式が見づらいので「wxmaxima」をインストールすることをおすすめします。
「Ubuntuソフトウェアセンター」から「wxmaxima」を検索すると出てきます。

wxmaximaを起動すると、毎回、tipsを表示する小窓も現れますが、無視して閉じましょう。
表示されるのは真っ白なウィンドウであり、カーソルが点滅しないので不安ですが、すぐに文字を打つことが可能です。

ここで注意すべきことが1点あります。それは、実行のために「Enter」キーを押してもただ改行になってしまうということです。
maximaの端末上での実行は文の後にセミコロン「;」または「$」をつけて「Enter」ですが、wxmaxima上では「Shift + Enter」が実行の役割を果たします。最も良く使う操作なので注意しましょう。

2.wxmaximaでの実行

実行は以下の入力を1行ずつ行います。

(%i1) load("dynamics");
(%i2) f(x,y,z):=-10*(x-y);
(%i3) g(x,y,z):=-y-x*z+28*x;
(%i4) h(x,y,z):=x*y-8/3*z;
(%i5) rkdat:rk([f(x,y,z),g(x,y,z),h(x,y,z)],[x,y,z],[1,1,1],[t,0,50,0.01]);
(%i6) load(numericalio);
(%i7) write_data(rkdat,"rk.dat");


(%i3)」などは「input」を表しており、実行するたびに(%o3)の「output」が実際には表示されます。実際のwxmaxima上での見た目は以下の画像。

wxmaximaの画面

ではmaximaソースの説明をしたいと思います。

(%i1)では、"dynamics"というパッケージをロードしています。これは(%i5)で出てくる「rk」関数を使うために必要です。

(%i2)から(%i4)までは、前の記事で出てきたローレンツのアトラクタの連立微分方程式の右辺をそれぞれ関数f(x,y,z)、g(x,y,z)、h(x,y,z)とおいて定義しています。

(%5)で「rkdat」というものを「rk」関数のアウトプットと定義しています。
rk関数というのは、微分方程式を解くための「ルンゲ・クッタ法」を行ってくれる関数です。書式は、
rk([関数],[変数],[変数の初期値],[t,初期時刻,終了時刻,刻み幅])
というふうになります。

(%i6)で"numericalio"というパッケージをロードしています。次の(%i7)の「write_data」を用いるために必要です。

(%i7)この関数で、(%i5)で定義した「rkdat」を、"rk.dat"というファイルに出力しています。

3.gnuplotでの描画
できあがったdatファイルをgnuplotで描画します。手順は前回の記事と同様にします。
端末を開き、以下の流れを打ち込んでいきます。

$ gnuplot
gnuplot>set xlabel "x"
gnuplot>set ylabel "y"
gnuplot>set zlabel "z"
gnuplot>set view 75,30
gnuplot>set term jpeg
gnuplot>set output "maxima_atracter.jpeg"
gnuplot>splot "rk.dat" using 2:3:4 w l


これは前回とほぼ同じ操作ですが、最後の行だけ少し補足します。
using 2:3:4」というのはdatファイルの2,3,4列目をそれぞれx,y,zの値として読み込むということです。確認してみるとわかりますが、maximaで出力させた「rk.dat」というdatファイルは、1列目にtの値が入っています。使用したいのは2,3,4列のx,y,zの値なので、2:3:4のように書きます。

そして、その後についている「w l」ですが、これは「with lines」の略で同じ、プロットを線で結ぶという意味を表します。

以上で、ローレンツのアトラクタが描かれた画像ファイル「maxima_atracter」が出来上がります。


Maximaでカオスを描くという目的をなんとか遂げるできました。なかなか試行錯誤しましたが、次のカオス図形をMaximaで描くときはもっとスムーズにいけるだろうと思います。

今後の記事も「Mathematicaで学ぶシリーズ4 カオス入門」に載せられているMathematica向けのソースをMaximaに置き換えていく内容が多くなると思います。

ここまで呼んでくださりありがとうございます。ではまた次の記事で。


関連記事
スポンサーサイト

コメント

非公開コメント

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