--/--/--

スポンサーサイト

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

池田氏のアトラクタ

さて、久々の記事となりましたが前回の続きで「池田氏のアトラクタ」を描いていきたいと思います。

池田氏のアトラクタ

以下の写像のカオス的アトラクタを計算し、描画する。









上記の繰り返し計算を行うC言語のプログラムソース(ikedaatracter.c)はこちら。

/*池田氏のアトラクタを描く*/
#include<stdio.h>
#include<math.h>

int main(void){

double x0=0.1, y0=0, x1, y1,theta0 ;//変数
double a, b ;//パラメータ
int i ;
FILE *fp;

if ((fp = fopen("ikedaatracter.dat", "w")) == NULL) {
printf("file open error!!\n");//ikedaatracter.datというファイルに出力する

}else{

printf("a > ");
scanf("%lf",&a);
printf("b > ");
scanf("%lf",&b);//端末からのパラメータa,bの入力

for(i=0;i<50000;i++){
theta0=x0*x0+y0*y0-2.0;
x1=a+b*(x0*cos(theta0)-y0*sin(theta0));
y1=b*(x0*sin(theta0)+y0*cos(theta0));//数式部分

fprintf(fp,"%lf %lf\n",x1+y1,x1-y1);//現在のx,yを出力(描画のため引き伸ばし)

x0=x1;
y0=y1;
}
}
fclose(fp);
return 0;
}



端末上で上記のプログラムを実行し、いつもと同じようにgnuplotで描画します。
$ gnuplot
gnuplot> set size square
gnuplot> set term jpeg
gnuplot> set output "ikedaatracter.jpeg"
gnuplot> plot "ikedaatracter.dat" with points pt 5 ps 0 lt 3


すると、以下のような渦巻き模様が描けます。

ikedaatracter0.jpeg



パラメータの値を変えていくと、若干渦巻きの密度が違った図が描けます。

ikedaatracter.jpegikedaatracter1.jpeg
a=4.0, b=0.4               a=4.0, b=0.8


このアトラクタを生み出す上に示した式は、レーザー光学のモデルとして池田研介氏によって研究された写像です。
ヤコビ行列式はJ(x,y)=b^2となるので、|b^2|<1の場合縮小写像となります。また、θがx^2+y^2の関数であれば、ヤコビ行列式は一定b^2となるので、θに他の関数を選んでも形の違ったカオスを描くことができます。興味があれば、是非他のθを使った図を描いてみてください。

縮小写像について

写像によって、移った先にできる図形がもとの図形の面積より小さくなるような写像。


本当はもう少し詳しく記述したかったのですが、それは次回の「チョーサ氏とゴルビツキー氏のカオス」の記事で、またはその次の記事で書こうと思います。
関連記事
スポンサーサイト

コメント

非公開コメント

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