標籤:

用MATLAB和newMark法算響應為嘛結果發散了?

用MATLAB算結構動力學問題,採用newMark法迭代,算出來位移曲線正常,但速度時程曲線有點發散(如圖),正確結果是平滑的曲線,峰值頻率都對了,是為什麼呀,都說知乎大神多,跪求指點


瀉藥~~~

健完身回來,特來答一發~~~

感覺題主只說問題,不貼代碼,這個讓別人怎麼答?

「Shut up and show me the code」才是關鍵···

無奈,只能自己擼代碼,上一發···

-----------------------------------------------代碼分界線---------------------------------------------------

clear;clc;
K=[6,-5;-5,5];
M=[1,0;0 1];%質量矩陣不能有錯誤
C=[2,-1;-1,1];
dt=pi/10;% dt ----- 時間步長
tend=10*pi;% tend --- 結束時間

% [n,n] = size( K ) ;
%Newmark演算法
gama = 0.5 ;
beta = 0.25 ;
[n,m] = size( K ) ;
Nalpha0 = 1/beta/dt^2 ;
Nalpha1 = gama/beta/dt ;
Nalpha2 = 1/beta/dt ;
Nalpha3 = 1/2/beta - 1 ;
Nalpha4 = gama/beta - 1 ;
Nalpha5 = dt/2*(gama/beta-2) ;
Nalpha6 = dt*(1-gama) ;
Nalpha7 = gama*dt ;
NK1 = K + Nalpha0*M + Nalpha1*C ;
Nd = zeros( n, floor(tend/dt) + 1 ) ;
Nv = zeros( n, floor(tend/dt) + 1 ) ;
Na = zeros( n, floor(tend/dt) + 1 ) ;
f = zeros( n, floor(tend/dt) + 1 ) ;
Nd(1,1) = -7/15 ; %初始位
Nd(2,1)=-3/5;
Nv(1,1) = -3/5;%速度初始值不能少
Nv(2,1) = -8/15;%
f(:,1) =0;%初始載荷
Na(:,1) = 0; %初始加速度
t=0:dt:tend;

for i=2:1:length(t)
f(:,i)=[0 ;sin(t(i))];%不同時刻的載荷
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)) ;
Nd(:,i) = NK1f2 ;
Na(:,i)=Nalpha0*(Nd(:,i)-Nd(:,i-1))-Nalpha2*Nv(:,i-1)-Nalpha3*Na(:,i-1);%加速度不能少
Nv(:,i) = Nv(:,i-1) + Nalpha6*Na(:,i-1) + Nalpha7*Na(:,i) ;
end
% disp(Nd);
XX=-1/15*[9;8]*sin(t)-1/15*[7;9]*cos(t);
subplot(221)
plot(t,Nd(1,:),t,XX(1,:),--)
legend(X1演算法值,X1精確解);
hold on
subplot(222)
plot(t,Nd(2,:),k,t,XX(2,:),k--)
legend(X2演算法值,X2精確解);
subplot(223)
plot(t,Nv(1,:))
legend(X1演算法速度)
subplot(224)
plot(t,Nv(2,:))
legend(X2演算法速度)

並沒有出現題主的問題,自己對照吧~~~


推薦閱讀:

請問誰有非同步電機abc_to_dq0坐標轉換模塊?
Matlab如何爬蟲知乎
matlab 函數返回值列表太長,覺得醜陋,怎麼辦?
MATLAB App Designer快速入門體驗
這個Matlab圖像應用了什麼命令?

TAG:MATLAB |