Y-BH

resonance_for_phybook

Apr 13th, 2022
256
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 4.23 KB | None | 0 0
  1. % 高中物理——演示共振现象——数值模拟
  2. % 新版人教高中物理 选择性必修1
  3. % 第二章 第6节 受迫振动 共振 51页 图2.6-3 演示共振现象
  4. % 从数值模拟结果来看此装置不适合作为共振的演示
  5. clc;clear;close all
  6. %% 模拟参数与数值计算
  7. g=10;                          % 重力加速度
  8. L=1;                           % 基准摆长
  9. m=1;                           % 基准质量
  10. h=0.1*L;                       % 横梁高度
  11. M=0;                           % 横梁质量
  12. Li=[1 1.2 1.4 1 .6 .8 1]'*L;   % 各绳长度
  13. mi=[1   1   1 1  1  1 1]'*m;   % 各球质量
  14. theta=1;                       % 大质量小球A的释放角度
  15. T=190;                         % 模拟时间
  16. num=size(mi,1);                % 小球数量
  17. % 各球初始角度
  18. thetai=zeros(num,1);% 各球初始角度为0
  19. thetai(4)=1;% 大质量小球的释放角度为1,约60°
  20. alpha=0;% 横梁的初始角度
  21. pa=0;p_i=zeros(num,1); % 初始静止
  22. u0=[alpha;pa;thetai;p_i];
  23. ti=0:0.01:T;
  24. odeopts=odeset('RelTol',1e-10,'AbsTol',1e-12, ...
  25.     'MaxStep',1e-2,'InitialStep',1e-4);
  26. [~,u] = ode45(@(t,u) gz34(t,u,g,m,h,M,Li,mi,num),ti,u0,odeopts);
  27. %% 几何
  28. % 小球位置(x,y,z)以及对应摆绳结位置(xo,yo,zo)
  29. x= Li'.*sin(u(:,3:num+2))+h*sin(u(:,1));
  30. z=-Li'.*cos(u(:,3:num+2))-h*cos(u(:,1));
  31. xo=zeros(size(x))+h*sin(u(:,1));
  32. zo=zeros(size(z))-h*cos(u(:,1));
  33. yo=zeros(size(xo))+(0.5:num-0.5)*2*L/num-L;
  34. y=yo;
  35. % 横梁及横梁悬线位置
  36. y1=-0.9*L;y2=0.9*L;
  37. x1=h*sin( u(:,1));x2=x1;
  38. z1=-h*cos( u(:,1));z2=z1;
  39. y1=y1+zeros(size(x1));
  40. y2=y2+zeros(size(x1));
  41. %% 绘图
  42. % figure;
  43. dpi=1.25;scr=[1920 1080];res=[960 720];
  44. fig=gcf;fig.Position=[(scr-res)/2,res]/dpi;
  45. hold on
  46. % 控制显示区域
  47. plot3(-L,-0.5*L,-1.8*L,L,0.5*L,0)
  48. axis tight;axis equal
  49. box on
  50. set(gca,'XTick',[],'YTick',[],'ZTick',[]);
  51. ax=gca;ax.Clipping='off';
  52. ax.CameraViewAngle = 10;%视野范围
  53. ax.CameraTarget = [0 0 -0.9];%目标位置
  54. ax.CameraPosition = [0.2 10 -0.8];
  55. % 支架
  56. plot3([0 0 0 0],[L L -L -L],[-1.8*L 0 0 -1.8*L],...
  57.     '-','Color','k','LineWidth',2)
  58. % 横梁绳子
  59. n=1;
  60. line1=line([0 x1(n)],[y1(n) y1(n)],[0 z1(n)],...
  61.     'linestyle','-','Color','k','LineWidth',1);
  62. line2=line([0 x2(n)],[y2(n) y2(n)],[0 z2(n)],...
  63.     'linestyle','-','Color','k','LineWidth',1);
  64. % 横梁
  65. line3=line([x1(n) x1(n)],[y1(n) y2(n)],[z1(n) z1(n)],...
  66.     'linestyle','-','Color','k','LineWidth',3);
  67. % 颜色集
  68. color_set(1,:)=[0.8500 0.3250 0.0980];
  69. color_set(2,:)=[     0 0.4470 0.7410];
  70. color_set(3,:)=[0.4940 0.1840 0.5560];
  71. color_set(4,:)=[     0      0      0];
  72. color_set(5,:)=[0.9290 0.6940 0.1250];
  73. color_set(6,:)=[0.4660 0.6740 0.1880];
  74. color_set(7,:)=[0.8500 0.3250 0.0980];
  75. % 画小球
  76. ms=40*ones(7,1);ms(4)=60;
  77. for ii=1:num
  78.     sp(ii)=plot3(x(n,ii),y(n,ii),z(n,ii),'.', ...
  79.         'Color',color_set(ii,:),'markersize',ms(ii));
  80. end
  81. % 画绳子
  82. for ii=1:num
  83.     lines(ii)=line( ...
  84.         [xo(n,ii) x(n,ii)], ...
  85.         [yo(n,ii) y(n,ii)], ...
  86.         [zo(n,ii) z(n,ii)], ...
  87.         'Color',color_set(ii,:),'LineWidth',2);
  88. end
  89. %% 动画
  90. mv = 0;% 是否录制视频,1录制,其它不录制
  91. if mv == 1
  92. v = VideoWriter('D:\Programs\MATLAB\物理课本共振模型模拟.mp4','MPEG-4');
  93. v.Quality = 100;v.FrameRate = 60;
  94. open(v);
  95. end
  96. for n=1:length(ti)
  97.     for ii=1:num
  98.         sp(ii).XData=x(n,ii);
  99.         sp(ii).YData=y(n,ii);
  100.         sp(ii).ZData=z(n,ii);
  101.         lines(ii).XData=[xo(n,ii) x(n,ii)];
  102.         lines(ii).YData=[yo(n,ii) y(n,ii)];
  103.         lines(ii).ZData=[zo(n,ii) z(n,ii)];
  104.     end
  105.     line1.XData=[0 x1(n)];
  106.     line1.YData=[y1(n) y1(n)];
  107.     line1.ZData=[0 z1(n)];
  108.     line2.XData=[0 x2(n)];
  109.     line2.YData=[y2(n) y2(n)];
  110.     line2.ZData=[0 z2(n)];
  111.     line3.XData=[x1(n) x1(n)];
  112.     line3.YData=[y1(n) y2(n)];
  113.     line3.ZData=[z1(n) z1(n)];
  114.     drawnow limitrate
  115.     if mv==1;F=getframe(fig);writeVideo(v,F);end
  116. end
  117. if mv == 1;close(v);end
  118. %% 微分方程(哈密顿方程)
  119. function du = gz34(~,u,g,m,h,M,Li,mi,num)
  120. a=u(1);pa=u(2);
  121. ti=u(3:num+2);
  122. p_i=u(num+3:2*num+2);
  123. S=sum(mi.*sin(ti-a).^2)/m+M;
  124. da=(pa-sum(p_i.*cos(ti-a)))/S/h;
  125. dti=(p_i-h*da.*cos(ti))./Li;
  126. ais=da.*dti.*sin(ti-a);
  127. dpa=sum(mi.*Li.*ais)-(M+sum(mi))*g*sin(a);
  128. dp_i=-h*ais-g*sin(ti);
  129. du=[da;dpa;dti;dp_i];
  130. end
Add Comment
Please, Sign In to add comment