Vẽ một hình ảnh của một hệ thống động lực rời rạc
Tôi đang cố gắng vẽ một hệ thống động lực rời rạc có dạng $$\vec{x}_{k+1} = A \vec{x}_k$$ Ở đâu $A$ là một $2\times 2$ ma trận ở dạng $$\begin{pmatrix}a&b\\c&d\end{pmatrix}$$ Ở đâu $a$, $b$ và $c$là các số thực. Nó có giá trị ban đầu ở dạng$$\begin{pmatrix}e \\f\end{pmatrix}$$
Tôi muốn tạo một âm mưu tương tự như trong: Tạo một hình ảnh của một hệ thống động lực rời rạc Nhưng tôi đã gặp khó khăn trong việc vẽ đồ thị hàm vì tôi đã thử cả hai VectorPlot
và ListPlot
không thành công. Bât cư lơi khuyên nao cung se được đanh gia cao :-)
Vấn đề chính xác mà tôi đang giải quyết là: $$\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*}$$ Tôi đang xem các lô được tạo bởi các giá trị khác nhau cho $a$ và $b$ nhu la $1$ và $1/2$.
Tôi đã thử những cách sau:
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]
![](https://post.nghiatu.com/assets/images/s/9CT5h.png)
Trả lời
Sử dụng các thanh trượt để sửa đổi các mục nhập ma trận. Nhấp và kéo bộ định vị (đĩa nhỏ) để sửa đổi các điểm ban đầu; ALT + Nhấp để thêm / xóa bộ định vị.
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]
![](https://post.nghiatu.com/assets/images/s/zu90K.png)
Một cách triển khai thay thế bằng cách sử dụng 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]
![](https://post.nghiatu.com/assets/images/s/MAk9z.png)
Cập nhật: Sửa đổi phương thức thứ hai cho ví dụ trong bản cập nhật của OP:
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]
![](https://post.nghiatu.com/assets/images/s/SUgpw.png)
Nếu bạn muốn kiểm soát điểm bắt đầu bằng 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]
![](https://post.nghiatu.com/assets/images/s/bivSS.png)
Biên tập
Chúng tôi có thể thay đổi x0
bằng cách Locator
và thay đổi {a,b}
bởi 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]
Nguyên
A = {{Cos[π/3], -Sin[π/3] - .1}, {Sin[π/3], Cos[π/3]}};
x0 = {1, 1};
pts = NestList[A . # &, x0, 15];
ListPlot[pts, Joined -> True, AspectRatio -> Automatic]
![](https://post.nghiatu.com/assets/images/s/YpboC.png)
Hoặc là
A = {{Cos[π/3], -Sin[π/3] - .1}, {Sin[π/3], Cos[π/3]}};
x0 = {1, 1};
pts = NestList[A . # &, x0, 15];
Graphics[Arrow[Partition[pts, 2, 1]]]
![](https://post.nghiatu.com/assets/images/s/50MtI.png)