8
12.4 グラフの重ね描き graph1 = Plot@Sin@xD, 8x, -2 Pi, 2 Pi<, PlotStyle 8Thickness@0.005D, RGBColor@1, 0, 0D<D -6 -4 -2 2 4 6 -1.0 -0.5 0.5 1.0 graph2 = Plot@Cos@xD, 8x, -2 Pi, 2 Pi<, PlotStyle 8Thickness@0.005D, RGBColor@0, 1, 0D<D -6 -4 -2 2 4 6 -1.0 -0.5 0.5 1.0 Show@graph1, graph2D -6 -4 -2 2 4 6 -1.0 -0.5 0.5 1.0 Showは既に描画したグラフを使って、重ね描きをするとき便利である。 Lotka-Volterra 方程式 x'(t) = 2 x(t) - x(t) y(t) y'(t) = - 3 y(t) + 2 x(t) y(t)

12.4 グラフの重ね描き - Dept. Math., Hiroshima Univ.ryo/Lectures/Mathematica/page1/files/... · Showは既に描画したグラフを使って、重ね描きをするとき便利である。

  • Upload
    docong

  • View
    213

  • Download
    0

Embed Size (px)

Citation preview

12.4 グラフの重ね描き

graph1 = Plot@Sin@xD, 8x, -2 Pi, 2 Pi<, PlotStyle ® [email protected], RGBColor@1, 0, 0D<D

-6 -4 -2 2 4 6

-1.0

-0.5

0.5

1.0

graph2 = Plot@Cos@xD, 8x, -2 Pi, 2 Pi<, PlotStyle ® [email protected], RGBColor@0, 1, 0D<D

-6 -4 -2 2 4 6

-1.0

-0.5

0.5

1.0

Show@graph1, graph2D

-6 -4 -2 2 4 6

-1.0

-0.5

0.5

1.0

Showは既に描画したグラフを使って、重ね描きをするとき便利である。

Lotka-Volterra 方程式x'(t) = 2 x(t) - x(t) y(t)y'(t) = - 3 y(t) + 2 x(t) y(t)

のいくつかの初期値に対する x-y 平面上における解曲線を重ね描きしてみよう。

(x(0), y(0)) = (1.5, 1.0), (1.5, 1.25), (1.5, 1.5), (1.5, 1.75) で試してみよ。

Showは既に描画したグラフを使って、重ね描きをするとき便利である。

Lotka-Volterra 方程式x'(t) = 2 x(t) - x(t) y(t)y'(t) = - 3 y(t) + 2 x(t) y(t)

のいくつかの初期値に対する x-y 平面上における解曲線を重ね描きしてみよう。

(x(0), y(0)) = (1.5, 1.0), (1.5, 1.25), (1.5, 1.5), (1.5, 1.75) で試してみよ。

sol1 = NDSolve@8x'@tD � 2 x@tD - x@tD y@tD,y'@tD � -3 y@tD + 2 x@tD y@tD,x@0D � 1.5,y@0D � 1.0

<, 8x@tD, y@tD<, 8t, 0, 10<D88x@tD ® InterpolatingFunction@880., 10.<<, <>D@tD,y@tD ® InterpolatingFunction@880., 10.<<, <>D@tD<<

sol2 = NDSolve@8x'@tD � 2 x@tD - x@tD y@tD,y'@tD � -3 y@tD + 2 x@tD y@tD,x@0D � 1.5,y@0D � 1.25

<, 8x@tD, y@tD<, 8t, 0, 10<D88x@tD ® InterpolatingFunction@880., 10.<<, <>D@tD,y@tD ® InterpolatingFunction@880., 10.<<, <>D@tD<<

sol3 = NDSolve@8x'@tD � 2 x@tD - x@tD y@tD,y'@tD � -3 y@tD + 2 x@tD y@tD,x@0D � 1.5,y@0D � 1.5

<, 8x@tD, y@tD<, 8t, 0, 10<D88x@tD ® InterpolatingFunction@880., 10.<<, <>D@tD,y@tD ® InterpolatingFunction@880., 10.<<, <>D@tD<<

sol4 = NDSolve@8x'@tD � 2 x@tD - x@tD y@tD,y'@tD � -3 y@tD + 2 x@tD y@tD,x@0D � 1.5,y@0D � 1.75

<, 8x@tD, y@tD<, 8t, 0, 10<D88x@tD ® InterpolatingFunction@880., 10.<<, <>D@tD,y@tD ® InterpolatingFunction@880., 10.<<, <>D@tD<<

g1 = ParametricPlot@Evaluate@8x@tD, y@tD< �. sol1D, 8t, 0, 10<,PlotStyle ® [email protected]<, AspectRatio ® 1, PlotRange ® 880, 3<, 80, 4<<D;

g2 = ParametricPlot@Evaluate@8x@tD, y@tD< �. sol2D, 8t, 0, 10<,PlotStyle ® [email protected]<, AspectRatio ® 1, PlotRange ® 880, 3<, 80, 4<<D;

g3 = ParametricPlot@Evaluate@8x@tD, y@tD< �. sol3D, 8t, 0, 10<,PlotStyle ® [email protected]<, AspectRatio ® 1, PlotRange ® 880, 3<, 80, 4<<D;

g4 = ParametricPlot@Evaluate@8x@tD, y@tD< �. sol4D, 8t, 0, 10<,PlotStyle ® [email protected]<, AspectRatio ® 1, PlotRange ® 880, 3<, 80, 4<<D;

2 Lec7.22.nb

Show@g1, g2, g3, g4D

0.0 0.5 1.0 1.5 2.0 2.5 3.00

1

2

3

4

このやり方だと、解曲線をたくさん重ね描きするにはつらい。

このような場合、以下のようにするとよい。

data = 8<;Do@sol = NDSolve@

8x'@tD � 2 x@tD - x@tD y@tD,y'@tD � -3 y@tD + 2 x@tD y@tD,x@0D � 1.5,y@0D � 0.1 n

<,8x@tD, y@tD<,8t, 0, 10<

D;data = Append@data, ParametricPlot@Evaluate@8x@tD, y@tD< �. solD, 8t, 0, 10<,

PlotStyle ® [email protected]<, AspectRatio ® 1, PlotRange ® 880, 4<, 80, 5<<DD,8n, 1, 20<

D

Lec7.22.nb 3

Show@dataD

0 1 2 3 40

1

2

3

4

5

?? Do

Do@expr, 8imax<D 式exprをimax 回評価する.

Do@expr, 8i, imax<D 変数 iの値が1から imax まで刻み幅1で式expr を順に評価する.

Do@expr, 8i, imin, imax<D 初期値 i = imin から始める.

Do@expr, 8i, imin, imax, di<D di をステップの増分として使用する.

Do@expr, 8i, 8i1, i2, ¼<<D 連続する値 i1, i2, ¼を使用する.

DoAexpr, 8i, imin, imax<, 9 j, jmin, jmax=, ¼E それぞれのiにおいて jを変化させて,式expr を評価する.�

Attributes@DoD = 8HoldAll, Protected<

12.5 リミットサイクルを持つ方程式 - van der Pol 方程式

van der Pol(ファン デル ポール) 振動子は非線形の減衰を受けた非保存系の振動子である。

支配方程式はvan der Pol 方程式と呼ばれる次の2階微分方程式である。

x'' - Μ I1 - x2M x ' + x = 0 (Μ > 0)

x' = y と置くことによって2変数の連立一階微分方程式系にすることができる。やってみよ。

x' = y

y' = Μ (1 - x2M - x (Μ > 0)

Μ = 0.25;

4 Lec7.22.nb

vdp = NDSolveA9x'@tD � y@tD,y'@tD � Μ I1 - x@tD2M y@tD - x@tD,x@0D � 2,y@0D � 3

=,8x@tD, y@tD<,8t, 0, 100<

E88x@tD ® InterpolatingFunction@880., 100.<<, <>D@tD,y@tD ® InterpolatingFunction@880., 100.<<, <>D@tD<<

Plot@Evaluate@8x@tD, y@tD< �. vdpD, 8t, 0, 100<,PlotStyle ® [email protected]<, PlotRange ® 8-3, 3<D

20 40 60 80 100

-3

-2

-1

1

2

3

ParametricPlot@Evaluate@8x@tD, y@tD< �. vdpD, 8t, 0, 100<,PlotStyle ® [email protected]<, PlotRange ® 88-3, 3<, 8-3, 3<<D

-3 -2 -1 1 2 3

-3

-2

-1

1

2

3

初期値を (n / 10, 0) (n = 1, 2, ..., 40) と動かしたときの解を重ね描きしてみよ。

Lec7.22.nb 5

data = 8<;DoAvdp = NDSolveA

9x'@tD � y@tD,y'@tD � Μ I1 - x@tD2M y@tD - x@tD,x@0D � 0.1 n,y@0D � 0

=,8x@tD, y@tD<,8t, 0, 50<

E;data = Append@data, ParametricPlot@Evaluate@8x@tD, y@tD< �. vdpD,

8t, 0, 50<, PlotStyle ® [email protected]<, PlotRange ® 88-4, 4<, 8-4, 4<<DD,8n, 1, 40<E;

Show@dataD

-4 -2 2 4

-4

-2

2

4

このように初期値によらず、t が大きくなるとき一つの周期軌道に近づいてくるような場合、

この周期軌道をリミットサイクルという。

乱数を用いて初期値をでたらめにとり、結果を重ね描きする場合

6 Lec7.22.nb

data = 8<;DoAvdp = NDSolveA

9x'@tD � y@tD,y'@tD � Μ I1 - x@tD2M y@tD - x@tD,x@0D � RandomReal@8-4, 4<D,y@0D � RandomReal@8-4, 4<D

=,8x@tD, y@tD<,8t, 0, 50<

E;data = Append@data, ParametricPlot@Evaluate@8x@tD, y@tD< �. vdpD,

8t, 0, 50<, PlotStyle ® [email protected]<, PlotRange ® 88-4, 4<, 8-4, 4<<DD,8100<E;

Show@dataD

-4 -2 2 4

-4

-2

2

4

12.6 カオスが生じる方程式 - Rossler方程式

Rossler (レスラー)方程式

x' = - y - zy' = x + ayz' = b + xz - cz

a = 0.2, b = 0.2, c = 4.5

Lec7.22.nb 7

a = 0.2;b = 0.2;c = 4.5;sol = NDSolve@

8x'@tD � -y@tD - z@tD,y'@tD � x@tD + a y@tD,z'@tD � b + x@tD z@tD - c z@tD,x@0D � 1.0,y@0D � 1.0,z@0D � 1.0

<,8x@tD, y@tD, z@tD<,8t, 0, 150<

D;ParametricPlot3D@Evaluate@8x@tD, y@tD, z@tD< �. solD,

8t, 0, 150<, PlotStyle ® [email protected]<, PlotRange ® AllD

-5 0 5

-5

0

5

0

5

10

8 Lec7.22.nb