本周的文件交换选择

我们最好的用户意见书

动画播放在实时脚本中的控件(R2021A)

贾罗 本周的“选择”是 MATLAB绘图画廊-动画 通过 Mathworks Plot Gallery团队
我选择这个动画例子来突出我最喜欢的R2021a的新特性之一, 实时脚本中的动画回放控件 .此版本具有许多巨大的新功能,如果您不受密切阅读的话,您实际上可能会错过这个 发行说明
现场脚本中的动画现在已经可以发布几版了。使用R2021a,您现在可以回放动画,而无需重新运行代码。在情节下面有一个播放控制,可以改变播放速度。
让我们用from的代码看看它的实际作用 MATLAB绘图画廊-动画
动画_playback.gif.

动画代码(改编自MATLAB绘图画廊-动画

下面是动画的代码。看看一些评论;您会注意到,我修改了一些代码以使用额外的新特性。
%参数和初始条件
%质量,连杆长度,初始角度,模拟时间
m = 1;
l = 1;
θ₁= 3 *π/ 4;
θ=π/ 3 * 8;
t = linspace(0,10,200);
%求解双摆的ODE
[T、Y] =数值(@ (T, x) double_pendulum (T, x, m, L),......
t,[theta1,theta2,0,0]);
%为动画目的计算关节坐标
x = [L*sin(Y(:,1)), L*sin(Y(:,1))+L*sin(Y(:,2))];
y = [-l * cos(y(:,1)),-l * cos(y(:,1)) - l * cos(y(:,2))];
将弧度转换为度
Ang = Y(:,1:2)* 180 / pi;
tiledlayout (2, 1)%在R2019B中介绍
nexttile%在R2019B中介绍
绘图(t,ang,linewidth = 2)%name = r2021a引入的值语法!!
持有
hh1(1) =情节(T(1)和(1,1),标记=“。”MarkerSize = 20,颜色=“b”);
hh1(2) =情节(T(1)和(1、2),标记=“。”MarkerSize = 20,颜色=“r”);
Xlabel(“时间(秒)”
ylabel(“角度(deg)”
持有
nexttile
hh2 =情节([0,x (1,1); x (1, 1), x(1、2)]、[0,y (1,1); y (1, 1), y(1、2),......
标志=“。”MarkerSize = 20,线宽= 2);
平等的
轴([ - 2 * l 2 * l -2 * l 2 * l])
ht = title(“:”+ T(1)+“秒”);R2016b中引入的字符串数组
id = 1:长度(T)
集(hh1 (1) XData = T (id), YData =盎(id, 1))
SET(HH1(2),XDATA = T(ID),YDATA = ANG(ID,2))
set(hh2(1),xdata = [0,x(id,1)],ydata = [0,y(id,1)])
SET(HH2(2),XDATA = X(ID,:),YDATA = Y(ID,:))
集(ht,字符串=“:”+ T(ID)+“秒”
drawnow
结束
注意,我还使用了new 名称=值 可选参数的语法。

现在在浏览器中运行

您是否知道博客中还有一个新功能在浏览器中运行代码?点击一下 “在浏览器中运行” 下面的按钮,您将看到此博客文章的直播脚本在在线版本的Matlab中打开。运行代码,您应该在完成运行后看到动画播放控制。
现在试试吧,让我们知道你的想法 这里

动画的助手函数

函数双摆(t, y, m, L)
双摆的%ODES系统(质量m和链接长度l)
%见http://en.wikipedia.org/wiki/Double_pendulum的差异
%方程
The MathWorks, Inc.版权所有
g = 9.81;
theta1 = y(1);% 1角
θ= y (2);%角2
p1 = y(3);% 势头
p2 = y (4);% 势头
%衍生品
dy (1) = 6 / (m * L ^ 2) * (2 * * cos (theta1-theta2) *约至4 - p2) /......
(16-9 * cos(theta1-theta2)^ 2);
Dy(2)= 6 /(m * l ^ 2)*(8 * p2-3 * cos(theta1-theta2)* p1)/......
(16-9 * cos(theta1-theta2)^ 2);
dy (3) = 1/2 * m * L ^ 2 * (dy (1) * dy (2) * sin (theta1-theta2) + 3 * g / L * sin(θ₁));
dy (4) = 1/2 * m * L ^ 2 * (dy (1) * dy (2) * sin (theta1-theta2) + g / L * sin(θ));
dy = dy(:);
结束
|

评论

要发表评论,请点击这里登录您的MathWorks帐户或创建新的。