能请matlab高手看看这个程序,并解释一下语句的含义吗?
如题,最近在该论坛上看到一个用matlab编写的梁的振动程序如下:b=input('please input b.' );%(输入b)
h=input('please input h.' );%(输入h)
Rho=input('please input Rho.' );(????)%%输入密度,如果我理解没错的话
E=input('please input E.' );%(输入E)
ds=input('How many elments do you want to devide?');%(输入离散的单元数)
l=input('Pleaes input the length');%(输入跨径l)
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');???? %%定义符号变量 其实可以写成 syms L x, 把L附值给x2
x=sym('x');?????
j=0:3;v=x.^j;?????%% j =0,1,2,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');?????%%int(m,x,0,'L') 表达式m对x从0到L积分
M=subs(M,'L',l/ds);?????将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);???????生成0矩阵
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;?????这个是cell型
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);??????????从3到最后
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);
能请matlab高手看看这个程序解释一下各个语句的含义吗?尤其问号之处为不理解的地方!我是刚刚学习matlab,希望高手能帮我解答,不甚感激!!!
[ 本帖最后由 sigma665 于 2008-5-14 16:00 编辑 ] 很多命令,如果不知道的话
查找帮助就知道了
谢谢!
谢谢sigma665的细心解答!!!
页:
[1]