これまでの学習をもとに、さまざまなアニメーションを作成してみましょう。
1. 波の伝播
>with(plots):
>animate(sin(x-t),x=0..4*Pi,t=0..10) |
>animate(tanh(x-t),x=-20..20,t=0..25)
(進行波解のシミュレーション)
>animate([r*cos(r-t),r*sin(r-t),r=0..6*Pi],t=0..10,numpoints=100,scaling=constrained) (回転するらせんのシミュレーション)
|
>animate(2*sech(x-4*t)2,x=-25..25,t=-5..5
,numpoints=200)
(ソリトン解(k=1の場合)のシミュレーション)
>v:=(x,t)->1+exp(2*x-8*t)+exp(x-t)+9*exp(2*x-8*t+2*x-t)/16 >u:=(x,t)->2*diff(log(v(x,t)),x,x) >animate(u(x,t),x=-30..30,t=-6..6,numpoints=200) (2ソリトン解(c=d=k=1,h=1/2の場合)のシミュレーション)
|
>with(plots): >animatecurve([t-sin(t), 1-cos(t), t = 0 .. 2*Pi], scaling = constrained, frames = 16) (サイクロイドを描く)
>animate([cos(s)+t, sin(s)+1, s = 0 .. 2*Pi], t = 0 .. 2*Pi, scaling = constrained) (回転する円のシミュレーション)
>animate([s*(t-sin(t))+(1-s)*t, s*(1-cos(t))+1-s, s = 0 .. 1], t = 0 .. 2*Pi, scaling = constrained) (動径のシミュレーション)
>display({%, %%, %%%}) |
>with(plots):
>dsolve({diff(s(t), t, t) = -sin(s(t)), s(0) = 0, (D(s))(0) = .8}, numeric, output = listprocedure); >odeplot(%, [sin(s(t)), -cos(s(t))], t = 0 .. 30, style = point, frames = 100, scaling = constrained) |
[正解例]