当前位置: 首页 > news >正文

基于matlab实现的弹簧振动系统模型程序(动态模型)

完整代码:

clear all; 

%System data 
m=1.0; zeta=0.01; omega0=1.0; Dt=1.0; f0=1.0; 
x0=0.0; dotx0=0.0; 
xmax=sqrt(x0^2+(dotx0/omega0)^2)+min([0.5*abs(f0)*Dt/(m*omega0) f0/omega0^2]); 
omegad=omega0*sqrt(1-zeta^2); 
dt0=0.1*pi/omega0; nstep=500; 

a=0.70; b=0.70; r=0.35*a; fact=0.50/xmax; 

xf0=0.5*[0 -a   0   a     0]'; 
yf0=[0  -b/4 -b/2 -3*b/4 -b]'; 
xd1=0.5*[-a   -a   a     a]'; 
yd1=[-6*b    0   0    -6*b]'; 
xd2=0.5*[-0.8*a 0.8*a]'; 
yd2=[-3*b   -3*b]'; 
xf0=[xf0 
    xf0 
    xf0 
    xf0 
    xf0 
    xf0]; 
yf0=[yf0 
   -b+yf0 
   -2*b+yf0 
   -3*b+yf0 
   -4*b+yf0 
   -5*b+yf0]; 
xf=[0 
   xf0 
   0]; 
xSQ=[-a 5*a 5*a -a -a]'; 
ySQ=[0       0      -2*r   -2*r 0]'; 
xH=[-2000 2000]'; yH=[0 0]'; 

xx=x0; 
tt=0; 

set(gcf,'DoubleBuffer','on'); 

i=1; 
t=i*dt0; 
t0=min([t Dt]); 
t1=t-t0; 
h=exp(-zeta*omega0*t)*sin(omegad*t)/(m*omegad); 
doth=exp(-zeta*omega0*t)*(cos(omegad*t)-zeta*omega0/omegad*sin(omegad*t))/m; 
H=(1/m-doth-2*zeta*omega0*h)/omega0^2; 
h1=exp(-zeta*omega0*t1)*sin(omegad*t1)/(m*omegad); 
doth1=exp(-zeta*omega0*t1)*(cos(omegad*t1)-zeta*omega0/omegad*sin(omegad*t1))/m; 
H1=(1/m-doth1-2*zeta*omega0*h1)/omega0^2; 
if t>Dt 
  t2=t-Dt; 
  h2=exp(-zeta*omega0*t2)*sin(omegad*t2)/(m*omegad); 
  doth2=exp(-zeta*omega0*t2)*(cos(omegad*t2)-zeta*omega0/omegad*sin(omegad*t2))/m; 
  H2=(1/m-doth2-2*zeta*omega0*h2)/omega0^2; 
else 
  H2=0; 
end 
x=-f0*H2+f0*(t0/m+h1-h+2*zeta*omega0*(H1-H))/(Dt*omega0^2); 
x=x+exp(-zeta*omega0*t)*(x0*cos(omegad*t)+(dotx0+zeta*omega0*x0)*sin(omegad*t)/omegad); 
tt=[tt 
  t]; 
xx=[xx 
  x]; 
x=fact*x; 
yf=[0 
   -2*b+(1+x)*yf0 
   -6*b+(1+x)*yf0(size(yf0,1))]; 
clf; 
figure(1); 
subplot(2,1,1) 
h1=plot(xH,yH,'r'); 
hold on 
h2=plot(xH,yH-6*b+yf0(size(yf0,1))-r,'k'); 
h3=plot(xf,yf,'r'); 
h4=plot(4*a+xd1,-3*b+yd1,'r'); 
h5=plot(4*a*[1 1]',-3*b*[0 1]','r'); 
hej=yf(size(yf,1)); 
h6=plot(4*a+xd2,(-7*b+yf(size(yf,1))-hej)*ones(2,1),'r'); 
h7=plot(4*a*[1 1]',[-7*b+yf(size(yf,1))-hej yf(size(yf,1))]','r'); 
h8=plot(xSQ,yf(size(yf,1))+ySQ,'r'); 
hold off 
axis([-2 5 -10*b+(1+fact*x0)*yf0(size(yf0,1))-2*r r]); 
subplot(2,1,2) 
h9=plot(xH,yH,'k'); 
hold on; 
h10=plot(tt,-xx,'r'); 
hold off; 
axis([ 0 nstep*dt0  -xmax xmax]) 

% start loop 
for i=1:nstep 

t=i*dt0; 
t0=min([t Dt]); 
t1=t-t0; 
h=exp(-zeta*omega0*t)*sin(omegad*t)/(m*omegad); 
doth=exp(-zeta*omega0*t)*(cos(omegad*t)-zeta*omega0/omegad*sin(omegad*t))/m; 
H=(1/m-doth-2*zeta*omega0*h)/omega0^2; 
h1=exp(-zeta*omega0*t1)*sin(omegad*t1)/(m*omegad); 
doth1=exp(-zeta*omega0*t1)*(cos(omegad*t1)-zeta*omega0/omegad*sin(omegad*t1))/m; 
H1=(1/m-doth1-2*zeta*omega0*h1)/omega0^2; 
if t>Dt 
  t2=t-Dt; 
  h2=exp(-zeta*omega0*t2)*sin(omegad*t2)/(m*omegad); 
  doth2=exp(-zeta*omega0*t2)*(cos(omegad*t2)-zeta*omega0/omegad*sin(omegad*t2))/m; 
  H2=(1/m-doth2-2*zeta*omega0*h2)/omega0^2; 
else 
  H2=0; 
end 
x=-f0*H2+f0*(t0/m+h1-h+2*zeta*omega0*(H1-H))/(Dt*omega0^2); 
x=x+exp(-zeta*omega0*t)*(x0*cos(omegad*t)+(dotx0+zeta*omega0*x0)*sin(omegad*t)/omegad); 

tt=[tt 
  t]; 
xx=[xx 
  x]; 
x=fact*x; 
yf=[0 
   -2*b+(1+x)*yf0 
   -6*b+(1+x)*yf0(size(yf0,1))]; 
set(h3,'Xdata',xf); 
set(h3,'Ydata',yf); 
set(h4,'Xdata',4*a+xd1); 
set(h4,'Ydata',-3*b+yd1); 
set(h5,'Xdata',4*a*[1 1]'); 
set(h5,'Ydata',-3*b*[0 1]'); 
set(h6,'Xdata',4*a+xd2); 
set(h6,'Ydata',(-7*b+yf(size(yf,1))-hej)*ones(2,1)); 
set(h7,'Xdata',4*a*[1 1]'); 
set(h7,'Ydata',[-7*b+yf(size(yf,1))-hej yf(size(yf,1))]'); 


set(h8,'Xdata',xSQ); 
set(h8,'Ydata',yf(size(yf,1))+ySQ); 
set(h10,'Xdata',tt); 
set(h10,'Ydata',-xx); 

pause(0.1) 
end;

http://www.lryc.cn/news/167410.html

相关文章:

  • 哨兵1号(Sentinel-1)SAR卫星介绍
  • [maven] scopes 管理 profile 测试覆盖率
  • css网页打印字体设置
  • JAVA高级技术入门(单元测试,反射,注解,动态代理)
  • uni-app 实现自定义按 A~Z 排序的通讯录(字母索引导航)
  • C++ PrimerPlus 复习 第一章 命令编译链接文件 make文件
  • 微信小程序——常用组件的属性介绍
  • 【深度学习】 Python 和 NumPy 系列教程(廿七):Matplotlib详解:3、多子图和布局:散点矩阵图(Scatter Matrix Plot)
  • 解决jupyter打开的默认路径问题
  • Git 学习笔记
  • 【Qt】QGroundControl入门3:源码初探
  • 腾讯mini项目-【指标监控服务重构】2023-07-31
  • Rust通用编程概念(3)
  • 学Python的漫画漫步进阶 -- 第四步
  • 【LeetCode-中等题】18. 四数之和
  • 每日一题 102二叉树的层序遍历
  • 牛客: BM4 合并两个排序的链表
  • C语言基础知识点(六)二维数组指针和地址
  • nodejs格式化输入
  • 国家网络安全周 | 金融日,一起 get金融行业数据安全
  • 分布式事务解决方案之TCC
  • Git 的基础命令 码云 gitee
  • 探索工业4.0:数字孪生如何重塑工业生产流程?
  • window server事件ID说明
  • router-link 和 router-view的区别
  • 【Leetcode】139.单词拆分
  • PMP考试一定要报培训班吗?
  • dart 学习 之 Getters and setters
  • 使用融云 CallPlus SDK,一小时实现一款 1V1 视频应用
  • Redis Part1