離散力学系の画像をプロットする
次の形式の離散力学系をプロットしようとしています $$\vec{x}_{k+1} = A \vec{x}_k$$ どこ $A$ は $2\times 2$ 次の形式の行列 $$\begin{pmatrix}a&b\\c&d\end{pmatrix}$$ どこ $a$、 $b$ そして $c$実数です。これは、次の形式の初期値を持ちます。$$\begin{pmatrix}e \\f\end{pmatrix}$$
次のようなプロットを作成したいと思います。離散力学系の画像の作成しかし、両方VectorPlot
を試したListPlot
がほとんど成功しなかったため、関数をプロットするのに途方に暮れています。アドバイスをいただければ幸いです:-)
私が取り組んでいる正確な問題は次のとおりです。 $$\begin{align*} &\vec{x}_k = \begin{pmatrix}2ba-a-b&ba-a-b\\2(a+b-ab)&2(a+b)-ab\end{pmatrix}\vec{x},&\vec{x}_0 = \begin{pmatrix}2\\1/3\end{pmatrix}. \end{align*}$$ のさまざまな値によって作成されたプロットを見ています $a$ そして $b$ といった $1$ そして $1/2$。
私は以下を試しました:
a = 1; b = 1/2;
A = {{2*b*a-a-b,b*a-a-b},{2(a+b-a*b),2(a+b)-ab}};
x0 = {1, 1/3};
pts = NestList[A.# &, x0, 15];
ListPlot[pts, Joined -> True, AspectRatio -> Automatic]
回答
スライダーを使用して、マトリックスエントリを変更します。ロケーター(小さなディスク)をクリックしてドラッグし、初期ポイントを変更します。Altキーを押しながらクリックして、ロケーターを追加/削除します。
Manipulate[ListLinePlot[Transpose @ NestList[#.{{a, b}, {c, d}} &, pt, 100],
PlotStyle -> PointSize[Medium], PlotRange -> 5 {{-1, 1}, {-1, 1}},
BaseStyle -> Arrowheads[{0., .05, 0.}], AspectRatio -> Automatic,
PlotLegends -> Placed[LineLegend[Defer /@ pt, LegendLabel -> "{x0,y0}",
LegendFunction -> Panel], Right],
Epilog -> {AbsolutePointSize[10],
{ColorData[97]@#, Point@pt[[#]]} & /@ Range[Length[pt]]},
ImageSize -> 400, Frame -> True] /. Line -> Arrow,
Spacer[10], Spacer[10], Spacer[10],
Grid[{{Item[Labeled[Control@{{a, .8, Style["a", 18]}, 0, 1, Slider,
ImageSize -> Small}, Style[Dynamic[a], 20], Top],
Background -> (Dynamic @ ColorData[{"Rainbow", {-1, 1}}][a])],
Item[Labeled[Control@{{b, .0, Style["b", 18]}, -1, 1, Slider,
ImageSize -> Small}, Style[Dynamic[b], 20], Top],
Background -> (Dynamic @ ColorData[{"Rainbow", {-1, 1}}][b])]},
{Item[Labeled[Control@{{c, .0, Style["c", 18]}, -1, 1, Slider,
ImageSize -> Small}, Style[Dynamic[c], 20], Top],
Background -> (Dynamic@ColorData[{"Rainbow", {-1, 1}}][c])],
Item[Labeled[Control@{{d, .4, Style["d", 18]}, 0, 1, Slider,
ImageSize -> Small}, Style[Dynamic[d], 20], Top],
Background -> (Dynamic@ColorData[{"Rainbow", {-1, 1}}][d])]}},
Alignment -> {Center, Center}, ItemSize -> {15, 15}, Dividers -> All],
{{pt, 3 {{1, 1}, {-1, 1}, {1, -1}}}, Locator,
Appearance -> None, LocatorAutoCreate -> {1, 10}},
Alignment -> Center, ControlPlacement -> Left]
を使用した代替実装Graphics
:
Manipulate[Legended[Graphics[{AbsolutePointSize[10], ColorData[97]@#,
Arrowheads[.03], Point @ pt[[#]],
Arrow[Partition[NestList[{{a, b}, {c, d}}.# &, pt[[#]], t - 1], 2, 1]]} & /@
Range[Length[pt]],
ImageSize -> 400, Frame -> True, Axes -> True,
PlotRange -> 5 {{-1, 1}, {-1, 1}}],
Placed[LineLegend[ColorData[97] /@ Range[Length @ pt], Defer /@ pt,
LegendLabel -> "{x0,y0}", LegendFunction -> Panel], Right]],
Spacer[10], Spacer[10], Spacer[10],
Grid[{{Item[Labeled[Control @ {{a, .8, Style["a", 18]}, 0, 1, Slider,
ImageSize -> Small}, Style[Dynamic[a], 20], Top],
Background -> (Dynamic @ ColorData[{"Rainbow", {-1, 1}}][a])],
Item[Labeled[Control @ {{b, .0, Style["b", 18]}, -1, 1, Slider,
ImageSize -> Small}, Style[Dynamic[b], 20], Top],
Background -> (Dynamic @ ColorData[{"Rainbow", {-1, 1}}][b])]},
{Item[Labeled[Control @ {{c, .0, Style["c", 18]}, -1, 1, Slider,
ImageSize -> Small}, Style[Dynamic[c], 20], Top],
Background -> (Dynamic @ ColorData[{"Rainbow", {-1, 1}}][c])],
Item[Labeled[Control @ {{d, .4, Style["d", 18]}, 0, 1, Slider,
ImageSize -> Small}, Style[Dynamic[d], 20], Top],
Background -> (Dynamic @ ColorData[{"Rainbow", {-1, 1}}][d])]}},
Alignment -> {Center, Center}, ItemSize -> {16, 16}, Dividers -> All],
{{pt, 3 {{1, 1}, {-1, 1}, {1, -1}}}, Locator,
Appearance -> None, LocatorAutoCreate -> {1, 10}},
Spacer[10],
{{t, 1}, 1, 80, 1, Animator, AnimationRunning -> False, DisplayAllSteps -> True},
Alignment -> Center, ControlPlacement -> Left]
更新: OPの更新の例の2番目の方法の変更:
ClearAll [a、b、aA、x0] aA [a_、b _]:= {{2 ab --a --b、ab --a --b}、{2(a + b --ab)、2(a + b) --ab}} x0 = {1、1 / 3};
Manipulate[Graphics[{AbsolutePointSize[10], ColorData[97]@1, Arrowheads[.03],
Point@x0,
Arrow[Partition[NestList[aA[a, b].# &, x0, t - 1], 2, 1]]},
AspectRatio -> 1, ImageSize -> 400, Frame -> True, Axes -> True,
PlotRange -> All], Spacer[10], Spacer[10], Spacer[10],
Grid[{{Item[Labeled[Control@{{a, 1, Style["a", 18]}, -1, 1, Slider,
ImageSize -> Small}, Style[Dynamic[a], 20], Top],
Background -> (Dynamic@ColorData[{"Rainbow", {-1, 1}}][a])],
Item[Labeled[Control@{{b, .5, Style["b", 18]}, -1, 1, Slider,
ImageSize -> Small}, Style[Dynamic[b], 20], Top],
Background -> (Dynamic@ColorData[{"Rainbow", {-1, 1}}][b])]}},
Alignment -> {Center, Center}, ItemSize -> {16, 16}, Dividers -> All],
Spacer[10],
{{t, 1}, 1, 15, 1, Animator, AnimationRunning -> False, DisplayAllSteps -> True},
Alignment -> Center, ControlPlacement -> Left]
開始点をLocator
:で制御したい場合
Manipulate[Labeled[Graphics[{AbsolutePointSize[10], ColorData[97]@#,
Arrowheads[.03], Point@pt[[#]],
Arrow[Partition[NestList[aA[a, b].# &, pt[[#]], t - 1], 2, 1]]} & /@
Range[Length[pt]], ImageSize -> 400, Frame -> True,
Axes -> True, PlotRange -> All, AspectRatio -> 1],
Dynamic[pt[[1]]], Top], Spacer[10], Spacer[10], Spacer[10],
Grid[{{Item[Labeled[Control@{{a, 1, Style["a", 18]}, 0, 1, Slider,
ImageSize -> Small}, Style[Dynamic[a], 20], Top],
Background -> (Dynamic@ColorData[{"Rainbow", {-1, 1}}][a])],
Item[Labeled[Control@{{b, .5, Style["b", 18]}, -1, 1, Slider,
ImageSize -> Small}, Style[Dynamic[b], 20], Top],
Background -> (Dynamic@ColorData[{"Rainbow", {-1, 1}}][b])]}},
Alignment -> {Center, Center}, ItemSize -> {16, 16}, Dividers -> All],
{{pt, {x0}}, Locator, Appearance -> None, LocatorAutoCreate -> False},
Spacer[10],
{{t, 1}, 1, 15, 1, Animator, AnimationRunning -> False, DisplayAllSteps -> True},
Alignment -> Center, ControlPlacement -> Left]
編集
私たちは、変更することができますx0
でLocator
あり、変更{a,b}
によってSlide2D
。
A[{a_, b_}] := {{2*b*a - a - b, b*a - a - b}, {2 (a + b - a*b),
2 (a + b) - a*b}};
Manipulate[
ListPlot[NestList[A[ab] . # &, x0, 15], Joined -> True,
PlotRange -> {{-10, 10}, {-10, 10}},
AspectRatio -> 1], {{ab, {1, 1/2},
Dynamic["{a,b}=" <>
ToString[ab, TraditionalForm]]}, {.8, .4}, {1.2, .6}},
Dynamic["x0=" <> ToString[x0, TraditionalForm]], {{x0, {2, 1/3}},
Locator}, ControlPlacement -> Right]
元の
A = {{Cos[π/3], -Sin[π/3] - .1}, {Sin[π/3], Cos[π/3]}};
x0 = {1, 1};
pts = NestList[A . # &, x0, 15];
ListPlot[pts, Joined -> True, AspectRatio -> Automatic]
または
A = {{Cos[π/3], -Sin[π/3] - .1}, {Sin[π/3], Cos[π/3]}};
x0 = {1, 1};
pts = NestList[A . # &, x0, 15];
Graphics[Arrow[Partition[pts, 2, 1]]]