找回密码
 注册
Simdroid-非首页
查看: 240|回复: 6

求matlab编写的wilson或newmark法程序例子

[复制链接]
发表于 2007-2-15 12:26:36 | 显示全部楼层 |阅读模式 来自 辽宁营口
小弟是新手,学习中遇到很多问题,尤其是自己编程的时候,发现不会的东西太多了,而且缺少实例和程序对照学习的资料,各位老大们,能分享一些关于结构振动分析的wilson 或newmark法的主子程序以及简单的梁结构实例吗,最好是matlab编的,万分感谢了,希望自己的学习能够得到大家的帮助!!谢谢
发表于 2012-12-29 13:10:11 | 显示全部楼层 来自 湖南长沙
Simdroid开发平台
  1. %function [d,v,a] = Wilson( K, M, C, f, d1, v1, dt, tend )
  2. % 利用Wilson-theta (Newmark) 解析解法计算结构的动力响应
  3.    K=[2,-1;-1,3];
  4.   M=[4,0;0 8];
  5.   C=0;
  6. dt=0.1;% dt ----- 时间步长
  7. tend=60;% tend --- 结束时间
  8. w=600;
  9. [n,n] = size( K ) ;

  10. %Wilson算法
  11. theta = 1.37 ;
  12. tao = theta*dt ;
  13. alpha0 = 6/tao^2 ;
  14. alpha1 = 3/tao ;
  15. alpha2 = 2*alpha1 ;
  16. alpha3 = tao/2 ;
  17. alpha4 = alpha0/theta ;
  18. alpha5 = -alpha2/theta ;
  19. alpha6 = 1-3/theta ;
  20. alpha7 = dt/2 ;
  21. alpha8 = dt^2/6 ;
  22. K1 = K + alpha0*M + alpha1*C ;
  23. d = zeros( n, floor(tend/dt) + 1 ) ;
  24. v = zeros( n, floor(tend/dt) + 1 ) ;
  25. a = zeros( n, floor(tend/dt) + 1 ) ;
  26. f = zeros( n, floor(tend/dt) + 1 ) ;
  27. d(1,1) = 1.2 ; %初始位移
  28. d(2,1)=0;
  29. v(:,1) = 0 ;%初始速度
  30. f(:,1) =0 ;%初始载荷
  31. a(:,1) = inv(M)*(f(:,1)-K*d(:,1)-C*v(:,1)) ;  %初始加速度
  32. t=0:dt:tend;
  33. for i=2:1:length(t)
  34. %t(i) = (i-1)*dt ;
  35. f(:,i)=0*100*sin(w*t(i));
  36. ftheta = floor(theta) ;
  37. %fq = f(i-1+ftheta-1)+ (theta-ftheta)*( f(i+ftheta-1) - f(i+ftheta-2) ) ;
  38. fq=f(:,i-1)+ftheta*(f(:,i)-f(:,i-1));
  39. f1 = fq + M*(alpha0*d(:,i-1)+alpha2*v(:,i-1)+2*a(:,i-1))+ C*(alpha1*d(:,i-1)+2*v(:,i-1)+alpha3*a(:,i-1)) ;
  40. dq= inv(K1)*f1 ;
  41. a(:,i) = alpha4*(dq-d(:,i-1)) + alpha5*v(:,i-1) + alpha6*a(:,i-1) ;
  42. v(:,i) = v(:,i-1) + alpha7 * ( a(:,i) + a(:,i-1) ) ;
  43. d(:,i) = d(:,i-1) + dt*v(:,i-1) + alpha8 * ( a(:,i)+2*a(:,i-1) ) ;
  44. end
  45. %解析解

  46. for i=1:length(t)
  47. x(i)=0.4*cos(0.5*t(i))+0.8*cos(1.581*0.5*t(i));
  48. end

  49. %Newmark算法
  50. gama = 0.5 ;
  51. beta = 0.25 ;
  52. [n,n] = size( K ) ;
  53. Nalpha0 = 1/beta/dt^2 ;
  54. Nalpha1 = gama/beta/dt ;
  55. Nalpha2 = 1/beta/dt ;
  56. Nalpha3 = 1/2/beta - 1 ;
  57. Nalpha4 = gama/beta - 1 ;
  58. Nalpha5 = dt/2*(gama/beta-2) ;
  59. Nalpha6 = dt*(1-gama) ;
  60. Nalpha7 = gama*dt ;
  61. NK1 = K + Nalpha0*M + Nalpha1*C ;
  62. Nd = zeros( n, floor(tend/dt) + 1 ) ;
  63. Nv = zeros( n, floor(tend/dt) + 1 ) ;
  64. Na = zeros( n, floor(tend/dt) + 1 ) ;
  65. Nd(1,1) = 1.2 ; %初始位
  66. Nd(2,1)=0;
  67. f(:,1) =0 ;%初始载荷
  68. Na(:,1) = inv(M)*(f(:,1)-K*Nd(:,1)-C*Nv(:,1)) ;  %初始加速度
  69. t=0:dt:tend;
  70. for i=2:1:length(t)
  71. f(:,i)=0*100*sin(w*t(i));
  72. f2 = f(:,i) + M*(Nalpha0*Nd(:,i-1)+Nalpha2*Nv(:,i-1)+Nalpha3*Na(:,i-1))+ C*(Nalpha1*Nd(:,i-1)+Nalpha4*Nv(:,i-1)+Nalpha5*Na(:,i-1)) ;
  73. Nd(:,i) = inv(NK1)*f2 ;
  74. Na(:,i) = Nalpha0*(Nd(:,i)-Nd(:,i-1)) - Nalpha2*Nv(:,i-1) - Nalpha3*Na(:,i-1) ;
  75. Nv(:,i) = Nv(:,i-1) + Nalpha6*Na(:,i-1) + Nalpha7*Na(:,i) ;
  76. end

  77. plot(t,d(1,:),'-b^',t,Nd(1,:),'g+',t,x,'r')
  78. xlabel('t');
  79. ylabel('u(t)');
  80. title('位移与时间的关系');

  81. 两自由度的三种解法



复制代码

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2013-5-6 10:00:10 | 显示全部楼层 来自 重庆
好东西~

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2016-3-23 16:45:27 | 显示全部楼层 来自 陕西渭南
好东西,谢谢
回复 不支持

使用道具 举报

发表于 2016-4-8 17:33:09 | 显示全部楼层 来自 北京
回复 不支持

使用道具 举报

发表于 2020-5-22 18:28:39 来自手机 | 显示全部楼层 来自 广东深圳
厉害厉害 我都不知道怎么用 直接运行吗?,,
回复 不支持

使用道具 举报

发表于 2020-9-16 14:40:27 | 显示全部楼层 来自 浙江杭州
mxlzhenzhu 发表于 2016-4-8 17:33
http://forum.vibunion.com/thread-138097-1-1.html

这个可以的
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-26 14:55 , Processed in 0.042789 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表