load("glib")$ def diff1(X1,X2) { glib_open(); glib_window(-10,-10,10,10); glib_line(-10,0,10,0); glib_line(0,-10,0,10); Dt=deval(0.001); T=deval(0.0); while (T < 10) { Y1=X1+Dt*X2; Y2=X2-Dt*X1; glib_putpixel(X1,X2); T=T+Dt; X1=Y1; X2=Y2; } } print("Type in, for example, diff1(2,3); ")$ end$
load("glib")$ def diff2(X1,X2) { glib_open(); glib_window(-10,-10,10,10); glib_line(-10,0,10,0); glib_line(0,-10,0,10); Dt=deval(0.001); T=deval(0.0); while (T < 50) { Y1=X1+Dt*X2; Y2=X2+Dt*(-X1-0.1*X2); glib_putpixel(X1,X2); T=T+Dt; X1=Y1; X2=Y2; } } print("Type in, for example, diff2(2,3); ")$ end$
このように, 微分方程式を数値的に解く事を数値解法という. この方法は, ゲームから, LSI の設計, 飛行機の設計までさまざまな 場面で利用されている.
最後は カオス的力学系の例である.
load("glib")$ def lorentz() { glib_window(-25,-25,25,25); A=10; B=20; C=2.66; P1=0; P2 = 3; P3 = 0; Dt = 0.004; T = 0; while (T <50) { Q1=P1+Dt*(-A*P1+A*P2); Q2=P2+Dt*(-P1*P3+B*P1-P2); Q3=P3+Dt*(P1*P2-C*P3); glib_putpixel(Q1,Q2); T=T+Dt; P1=Q1; P2=Q2; P3=Q3; } } end$
画面に描き出される次のような不思議な軌道に感動していただきたい.
章末問題