提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、模型建立
二、代码实现
%%
clear,clc
%% 参数初始化
g=9.8;m1=4;m2=2;l=1;
M=m2/(m1+m2);
%% 求常微分方程
dz=@(t,z)[z(2);(-M*sin(z(1))*cos(z(1))*z(2)^2-g/l*sin(z(1)))/(1-M*cos(z(1))^2);
z(4);(M*g*sin(z(1))*cos(z(1))+M*l*sin(z(1))*z(2)^2)/(1-M*cos(z(1))^2)];
[t,z]=ode45(dz,[0:0.02:20],[pi/4,0,0,0]);
%plot(t,z(:,1),t,z(:,3))
%% 求球的坐标,画x轴和y轴
axis([-0.6,0.6,-1,0.2])
axis equal
hold on
y1=-l.*cos(z(:,1));x1=z(:,3)+l.*sin(z(:,1));%画球的坐标
X=line([-0.6,0.6],[0,0],'linestyle',':');%x轴
Y=line([0,0],[0,-1],'linestyle',':');%y轴
%% 画杆、滑块、球的初始位置
gan=line([z(1,3),x1(1)],[0,y1(1)],'color','k','linestyle','-','linewidth',3,'erasemode','xor');
kuai=line([z(1,3)-0.05,z(1,3)+0.05],[0,0],'color','b','linestyle','-','linewidth',15,'erasemode','xor');
qiu=line(x1(1),y1(1),'color','r','marker','.','markersize',50,'erasemode','xor');
%% 绘制动画
aviobj=VideoWriter('HuaKuaiBai.avi');%新建叫example.avi的文件
open(aviobj); %打开
for i=1:length(t)
set(gan,'XData',[z(i,3),x1(i)],'YData',[0,y1(i)]);
set(kuai,'XData',[z(i,3)-0.05,z(i,3)+0.05],'YData',[0,0]);
set(qiu,'XData',x1(i),'YData',y1(i));
drawnow;
currFrame = getframe;
writeVideo(aviobj,currFrame);%动画存储
end
close(aviobj); %关闭
三、程序运行结果
滑块摆模型动画——物理MATLAB可视化