自已编程验证了一下,以下是matlab代码。可能看代码不太了解,里面有些数学推导省掉了,总之,最后得到的U有三列,其值越小,说明误差越小,有兴趣的朋友可以参考下。
%验证:1.自由梁刚体模态与各阶弹性模态是否正交
%验证:2.自由梁的各阶弹性模态广义质量是否等于梁的质量
clc,clear;
syms r x Y L a B V;
L=25; %梁长
for r=1:50 %r代表弹性模态阶数
if r==1
a=4.73;
else
a=(r+0.5)*pi;
end
B=a/L;
V=-(cosh(a)-cos(a))/(sinh(a)-sin(a));
%y1,y2分别是刚体浮沉振型和点头振型与各阶弹性振型的正交项
%Y是各阶弹性振型本身的正交项,即模态广义质量的一部分
y1=@(x)[cosh(B*x)+cos(B*x)+V*(sinh(B*x)+sin(B*x))];
y2=@(x)[(L/2-x).*(cosh(B*x)+cos(B*x)+V*(sinh(B*x)+sin(B*x)))];
Y=@(x)[(cosh(B*x)+cos(B*x)+V*(sinh(B*x)+sin(B*x))).^2];
%对各个正交项沿梁长数值积分
p1(r)=quad(y1,0,L);
p2(r)=quad(y2,0,L);
m(r)=quad(Y,0,L);
end
m=m-L;
U=[m;p1;p2];U=U';
%结论:前10阶正确,精度较高。随着阶数增加,误差越来越大。
[ 本帖最后由 micjor 于 2009-8-21 23:58 编辑 ] |