kfcoffee 发表于 2006-4-12 16:24

MATLAB编程求单跨梁振型及频率(两端任意约束)

b=input('please input b.' );
h=input('please input h.' );
Rho=input('please input Rho.' );
E=input('please input E.' );
ds=input('How many elments do you want to devide?');
l=input('Pleaes input the length');
Lres=input('Pleaes input the left restraint,Fix->3,Hinged2->2,Hinged1->1,Free->0 ');
Rres=input('Pleaes input the left restraint,Fix->3,Hinged2->2,Hinged1->1,Free->0 ');
I=b*(h^3)/12;
EI=E*I;

x1=0;x2=sym('L');
x=sym('x');
j=0:3;v=x.^j;
a=[1,x1,x1^2,x1^3;
0,1,2*x1,3*x1^2;
1,x2,x2^2,x2^3;
0,1,2*x2,3*x2^2];
d=v/a;
dt=d';
m=dt*d;
M=Rho*b*h*int(m,x,0,'L');
M=subs(M,'L',l/ds);
M=double(M);
Ni=diff(d,x,2);
Nt=Ni';
k=Nt*Ni;
KL=EI*int(k,x,0,'L');
KL=subs(KL,'L',l/ds);
KL=double(KL);

KGC=cell(1,ds);
for n=1:ds
KGC{n}=zeros((ds+1)*2);
end
for n=1:ds;
for i=1:4
for j=1:4
KGC{n}(i+2*n-2,j+2*n-2)=KL(i,j);
end
end
end
KG=zeros((ds+1)*2);
for n=1:ds
KG=KGC{n}+KG;
end

MGC=cell(1,ds);
for n=1:ds
MGC{n}=zeros((ds+1)*2);
end
for n=1:ds;
for i=1:4
for j=1:4
MGC{n}(i+2*n-2,j+2*n-2)=M(i,j);
end
end
end
MG=zeros((ds+1)*2);
for n=1:ds
MG=MGC{n}+MG;
end

if Lres==3;
MG=MG(3:end,3:end);KG=KG(3:end,3:end);
for n=1:ds;
KGC{n}=KGC{n}(3:end,3:end);
end
elseif Lres==2|Lres==1;
MG=MG(2:end,2:end);KG=KG(2:end,2:end);
for n=1:ds;
KGC{n}=KGC{n}(2:end,2:end);
end
else MG=MG;KG=KG;
end

if Rres==3;
MG=MG(1:end-2,1:end-2);KG=KG(1:end-2,1:end-2);
for n=1:ds;
KGC{n}=KGC{n}(1:end-2,1:end-2);
end
elseif Rres==2|Rres==1;
MG=MG(,);KG=KG(,);
for n=1:ds;
KGC{n}=KGC{n}(,);
end
else MG=MG;KG=KG;
end

=eig(KG/MG);

[ 本帖最后由 suffer 于 2006-10-9 20:00 编辑 ]

andy_3656 发表于 2006-4-30 23:13

<P>验算了一下,发现频率值偏大很多!振型也需要校核下!<BR>大家的看法呢?</P>

水男孩 发表于 2006-5-1 01:26

我算了简支梁:b=0.05m,h=0.008m,l=0.68m,E=2.06e11,mm=0.0314kg/cm,这是我们实验做的对象,实测数据证实了理论值完全可靠。开始只算了ds=2,只有一阶频率符合地很好,后来算了ds=8,发现前三阶频率都符合地很好。理论值f=pi/2*n^2*sqrt(EI/mm/l^4)=40.19*n^2;取ds=8,从算得的EValue中取出最小的三值:63764,1.0207e+006,5.178e+006,f=sqrt(63764)/2/pi=40.19,...,等等,符合得很好。<BR>楼主真是强人!<BR>我开始只用前面部分算质量矩阵和刚度矩阵,结果误差很大。《有限元方法编程》(ISBN7-5053-9115-1)一书中说分布质量矩阵用集中质量矩阵近似表示会在预测梁的频率方面产生较大的误差,可能是这个原因吧。<BR>

kfcoffee 发表于 2006-5-18 17:05

<P>谢谢各位学友的验证,这是我论文的一部分,但导师说他没有经费让我们做实验,同学们都学ANSYS了,本想让他们帮我算算的,但无赖他们只会静力分析,何况ANSYS算出后我也不知道怎样把ANSYS的数据导入MATLAB里,因为把振型和频率以及质量阵和刚度阵算出来后,用MATLAB编程诊断结构损伤。所以干脆我就用MATLAB算频率和振型了。第一次编程,还没有来得及验算理论值是不是对的就发上来了,谢谢学友的指正!</P>

wsh6759 发表于 2006-5-30 14:52

很好的程序,怎样提高运算精确度?<BR>

wsh6759 发表于 2006-5-30 14:59

有运行错无啊

wsh6759 发表于 2006-5-30 15:00

有点小错误,怎么调节?

jt1937 发表于 2006-5-30 16:10

确实不错,比只会用ANSYS的强多了

kfcoffee 发表于 2006-6-7 15:39

的确会有点错误。

<P>是的,就是那个input语句的存在而导致的。我用MATLAB6.5运行,有时可以通过,有时MATLAB却假死。非得强制关闭。input语句是想做得更加人性化一点。但无赖却有点小问题。希望学友们指正。想每次运行都通过,不用那个语句直接赋值就可以了。</P>

xinyuxf 发表于 2006-8-22 15:30

强!请问有没有做过求薄板频率和振型阿?

fx2003521 发表于 2006-9-14 12:50

大哥,还有没有其他关于这方面的东西

haiyangnvshen 发表于 2006-10-23 20:19

运行的时候出现   Warning: Explicit integral could not be found.    这是怎么回事呢?

suffer 发表于 2006-10-24 15:51

原帖由 haiyangnvshen 于 2006-10-23 20:19 发表
运行的时候出现   Warning: Explicit integral could not be found.    这是怎么回事呢?

估计你的数据是随便输入的
导致积分不存在

suffer 发表于 2006-10-24 15:52

原帖由 xinyuxf 于 2006-8-22 15:30 发表
强!请问有没有做过求薄板频率和振型阿?

呵呵,你去写一个发出来就有了

suffer 发表于 2006-10-24 15:53

原帖由 wsh6759 于 2006-5-30 14:52 发表
很好的程序,怎样提高运算精确度?<BR>

改变建模方法,把集总质量法改为有限元法估计精度就能提高很多
页: [1] 2
查看完整版本: MATLAB编程求单跨梁振型及频率(两端任意约束)