matlab 除去振动,Matlab讨论区 - 声振论坛 - 振动,动力学,声学,信号处理,故障诊断 - Powered by Discuz!...

下面是徐荣桥老师书中exam8_2例子中的一段,不知对你有用否

step3. 计算时程响应(Newmark法)

% step3.1 初始计算

gama = 0.5 ;

beta = 0.25 ;

C = zeros( size( gK ) ) ;

[N,N] = size( gK ) ;

alpha0 = 1/beta/gDeltaT^2 ;

alpha1 = gama/beta/gDeltaT ;

alpha2 = 1/beta/gDeltaT ;

alpha3 = 1/2/beta - 1 ;

alpha4 = gama/beta - 1 ;

alpha5 = gDeltaT/2*(gama/beta-2) ;

alpha6 = gDeltaT*(1-gama) ;

alpha7 = gama*gDeltaT ;

K1 = gK + alpha0*gM + alpha1*C;

timestep = floor(gTimeEnd/gDeltaT) ;

% step3.2 对K1进行边界条件处理

[bc1_number,dummy] = size( gBC1 ) ;

K1im = zeros(N,bc1_number) ;

for ibc=1:1:bc1_number

n = gBC1(ibc, 1 ) ;

d = gBC1(ibc, 2 ) ;

m = (n-1)*3 + d ;

K1im(:,ibc) = K1(:,m) ;

K1(:,m) = zeros( node_number*3, 1 ) ;

K1(m,:) = zeros( 1, node_number*3 ) ;

K1(m,m) = 1.0 ;

end

[KL,KU] = lu(K1) ;   % 进行三角分解,节省后面的求解时间

% step3.3 计算初始加速度

gAcce(:,1) = gM\(-gK*gDisp(:,1)-C*gVelo(:,1)) ;

% step3.4 对每一个时间步计算

for i=2:1:timestep

if mod(i,100) == 0

fprintf( '当前时间步:%d\n', i ) ;

end

f1 = gM*(alpha0*gDisp(:,i-1)+alpha2*gVelo(:,i-1)+alpha3*gAcce(:,i-1)) ...

+ C*(alpha1*gDisp(:,i-1)+alpha4*gVelo(:,i-1)+alpha5*gAcce(:,i-1)) ;

% 对f1进行边界条件处理

[bc1_number,dummy] = size( gBC1 ) ;

for ibc=1:1:bc1_number

n = gBC1(ibc, 1 ) ;

d = gBC1(ibc, 2 ) ;

m = (n-1)*3 + d ;

f1 = f1 - gBC1(ibc,3) * K1im(:,ibc) ;

f1(m) = gBC1(ibc,3) ;

end

y = KL\f1 ;

gDisp(:,i) = KU\y ;

gAcce(:,i) = alpha0*(gDisp(:,i)-gDisp(:,i-1)) - alpha2*gVelo(:,i-1) - alpha3*gAcce(:,i-1) ;

gVelo(:,i) = gVelo(:,i-1) + alpha6*gAcce(:,i-1) + alpha7*gAcce(:,i) ;

end

评分

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值