Wolfram Mathematica 混沌摆模拟以及可视化

释放双眼,带上耳机,听听看~!
混沌摆可视化代码,可以自己设定数值进行模拟 #1 test

Clear[“Global`*”];

(*定义参数*)
{g, l1, l2, m1, m2, tt} = {9.8, 1, 1, 1, 3, 100};

(*定义拉格朗日方程*)
L = (m1 + m2)/2 l1^2 (a'[t])^2 + m2/2 l2^2 (b'[t])^2 + 
   m2*l1*l2*a'[t]*b'[t]*Cos[a[t] – b[t]] + (m1 + m2)*g*l1*Cos[a[t]] + 
   m2*g*l2*Cos[b[t]];

(*定义微分方程以及合适的边界条件*)
funcs = {D[L, a[t]] == D[D[L, a'[t]], t], 
   D[L, b[t]] == D[D[L, b'[t]], t], a[0] == 3 Pi/4, b[0] == Pi/6, 
   a'[0] == 0, b'[0] == 0};

(*微分方程的100精度数字解*)
sov = NDSolve[funcs, {a, b}, {t, 0, tt}, PrecisionGoal -> 100][[1]];

(*随时间变化的角度*)
a = a /. sov;
b = b /. sov;

(*整个系统的动量,机械能*)
T[t_] := (m1 + m2)/2 l1^2 ((D[a[x], x]) /. x -> t)^2 + 
   m2/2 l2^2 ((D[b[x], x]) /. x -> t)^2 + 
   m2*l1*l2*((D[a[x], x]) /. x -> t)*((D[b[x], x]) /. x -> t)*
    Cos[a[t] – b[t]];
V[t_] := -(m1 + m2)*g*l1*Cos[a[t]] – m2*g*l2*Cos[b[t]];
Energy[t_] := T[t] + V[t];

(*m1和m2的坐标*)
p1[t_] := {l1*Sin[a[t]], -l1*Cos[a[t]]};
p2[t_] := {l1*Sin[a[t]] + l2*Sin[b[t]], -l1*Cos[a[t]] – l2*Cos[b[t]]};

(*可视化模块*)
result = Animate[{Show[
    Graphics[Circle[{0, 0}, 1], PlotRange -> {{-2, 2}, {-2, 2}}, 
     AxesOrigin -> {0, 0}, Axes -> True, Frame -> False, 
     ImageSize -> Medium], 
    Graphics[{Line[{{0, 0}, p1[u], p2[u]}], Disk[p1[u], m1/15], 
      Disk[p2[u], m2/15]}], 
    If[u < 3, 
     ParametricPlot[p2[t], {t, 0, u}, 
      ColorFunction -> 
       Function[{x, y, u}, f = Hue[0.58, 0.58, 0.8, u]]], 
     ParametricPlot[p2[t], {t, u – 3, u}, 
      ColorFunction -> 
       Function[{x, y, u}, f = Hue[0.58, 0.58, 0.8, u]]]]], 
   ParametricPlot[{{t, T[t]}, {t, V[t]}, {t, Energy[t]}}, {t, 0, u}, 
    ImageSize -> Medium, AspectRatio -> 0.75, 
    PlotRange -> {{0, u}, {-25, 30}}]}, {u, 0.01, tt, 0.01}, 
  AnimationDirection -> Forward, RefreshRate -> 180, 
  DefaultDuration -> tt]

学习区-科研

[英译]Richard von Krafft-Ebing -《性心理疾病》PDF

2022-1-27 10:10:15

学习区-科研

Wolfram Mathematica 对复变函数的另一种可视化方法

2022-2-15 17:44:43

0 0 投票数
文章评分
7 评论
内联反馈
查看所有评论
鏡中萬華
鏡中萬華
2022年2月13日 22:25

我愣住了

baiduzhe
baiduzhe
2022年2月14日 22:52

太高端,完全没懂

criphc
2022年3月05日 10:33

您好:

  • Clear[“Global*”]; 里为什么用中文引号?</li><li>NDSolve::ndnum: 在 t == 0. 处碰到一个导数的非数值量.
  • ReplaceAll::reps: {<<1>>} 既不是替换规则列表,也不是一个有效的分派表,因此无法用来替换.
  • $RecursionLimit::reclim2: 在 a/. <<1>> 计算过程中超过 1024 的递归深度.

在Wolfram Mathematica 12.3.1 for Mac OS X ARM (64-bit) (July 24, 2021)

Shot_0305-103034.png
q1597506730
q1597506730
2022年5月17日 11:48

感谢分享

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索
7
0
希望看到您的想法,请您发表评论x
()
x