悬臂梁的振动问题(微分求积法求解悬臂梁自由振动程序)

Posted

篇首语:知识就是飞上天的羽翼。本文由小常识网(cha138.com)小编为大家整理,主要介绍了悬臂梁的振动问题(微分求积法求解悬臂梁自由振动程序)相关的知识,希望对你有一定的参考价值。

悬臂梁的振动问题(微分求积法求解悬臂梁自由振动程序)

微分求积法(简称DQM)是Bellman等人于上世纪70年代初提出的一种新的数值计算方法。这种算法由于不依赖泛函和变分原理,具有数学原理简单、计算精度高,计算量和内存需求小。微分求积法从提出至今,由于其具有计算量小和精度高等优点而不断受到重视,目前对该数值方法本身的研究尽管已经相当成熟。给大家分享一个Matlab实现悬臂梁自由振动的小程序,帮助大家学习微分微分求积法。

clear

digits()

u=i; %保留虚数

N=15; %节点数

X=[]; %离散的横坐标

R=[]; %DQ中的Rij

RR=[]; %用于计算R的中间矩阵

for i=1:N

X(i)=0.5*(1-cos(pi*(i-1)/(N-1)));

end


%建立RR和R

for i=1:N

for j=1:N

if i~=j

RR(i,j)=X(i)-X(j);

else

RR(i,j)=1; %建立完RR

end

end

end

R=prod(RR,2); %建立完R,矩阵按行排列

%建立C1

for i=1:N

for j=1:N

if i~=j

C1(i,j)=R(i)/((X(i)-X(j))*R(j));

else

C1(i,j)=0;

end

end

end

for i=1:N

C1(i,i)=-sum(C1(i,:));

end %建立完C1

% RR

% R

% C1

%建立C2

for i=1:N

for j=1:N

C2(i,j)=C1(i,:)*C1(:,j);

end

end %建立完C2

%建立C3

for i=1:N

for j=1:N

C3(i,j)=C2(i,:)*C1(:,j);

end

end %建立完C3

%建立C4

for i=1:N

for j=1:N

C4(i,j)=C3(i,:)*C1(:,j);

end

end %建立完C4

% %建立C5

% for i=1:N

% for j=1:N

% C5(i,j)=C4(i,:)*C1(:,j);

% end

% end %建立完C5

% %建立C6

% for i=1:N

% for j=1:N

% C6(i,j)=C5(i,:)*C1(:,j);

% end

% end %建立完C6


K=C4(3:(N-2),1:(N-2));

K=[K(:,1:2),C4(3:(N-2),(N-1):N),K(:,3:end)];

K4=C3(N:N,1:(N-2)); %用于形成新K的第4行

K4=[K4(:,1:2),C3(N:N,(N-1):N),K4(:,3:end)];

K3=C2(N:N,1:(N-2)); %用于形成新K的第3行

K3=[K3(:,1:2),C2(N:N,(N-1):N),K3(:,3:end)];

K2=C1(1:1,1:(N-2)); %用于形成新K的第2行

K2=[K2(:,1:2),C1(1:1,(N-1):N),K2(:,3:end)];

K1=zeros(1,N);

K1(1,1)=1; %用于形成K的第1行

K=[K1;K2;K3;K4;K];

Sbb=K(1:4,1:4);

Sbb=inv(Sbb); %考虑求Sbb的逆

Sbd=K(1:4,5:end);

Sdb=K(5:end,1:4);

Sdd=K(5:end,5:end);

S=-Sdb*Sbb*Sbd+Sdd;

lambda=eig(S); %考虑求S的特征值

w=sqrt(sqrt(lambda));

w=sort(w)

相关参考