主题:[讨论]求助
function linear(n);
tic;
format long g;
dlg=sprintf('Linear result');
disp(dlg);
h=1/n;
x0=0;
y0=0;
area=h^2/2;
nodesnum=(n+1)^2;
bnodenum=4*n;
bound=ones(bnodenum,1);
layercount=n+1;
% area 为单元三角形的面积,h为分段长度,(x0,y0)为起始点坐标
% nodesum为总节点的个数,bnodenum边界点的个数,bound存放边界点的矩阵
tb=[1/12 1/24 1/24;
1/24 1/12 1/24;
1/24 1/24 1/12]*(2*area);
% tb为单元质量矩阵
com=[-h h 0;
-h 0 h];
%this is mistaken.F.FFFFFF
ta=com'*com/(4*area);
% ta为单元刚度矩阵
areatemp=ones(3,3);
templj=ones(2,3);
stiff=zeros(nodesnum,nodesnum);
mass=zeros(nodesnum,nodesnum);
p=ones(4,1);
ft=ones(3,1);
st=ones(3,1);
for elenum=0:1:n^2-1
col=mod(elenum,n);
row=floor(elenum/n);
p(1)=row*layercount+col+1;
p(2)=p(1)+1;
p(3)=p(2)+layercount;
p(4)=p(1)+layercount;
ft(1)=p(1);
ft(2)=p(2);
ft(3)=p(4);
st(1)=p(3);
st(2)=p(4);
st(3)=p(2);
%按次序取出每个三角形的坐标
%stiff为刚度矩阵,mass为质量矩阵
%ft存放下三角形节点,st存放上三角形节点
for i=1:3
for j=1:3
stiff(ft(i),ft(j))=stiff(ft(i),ft(j))+ta(i,j);
stiff(st(i),st(j))=stiff(st(i),st(j))+ta(i,j);
mass(ft(i),ft(j))=mass(ft(i),ft(j))+tb(i,j);
mass(st(i),st(j))=mass(st(i),st(j))+tb(i,j);
end
end
end
%按次序将得到的每个三角形单元刚度和载荷矩阵进行叠加
prod=1;
for k=1:nodesnum
if (mod(k-1,n+1)==0) | (mod(k,n+1)==0)
bound(prod)=k;
prod=prod+1;
else
for j=2:n
if mod(k-j,n*(n+1))==0
bound(prod)=k;
prod=prod+1;
end
end
end
end
%找出平面区域的边界点
j=0;
for i=1:bnodenum
stiff(bound(i)-j,:)=[];
stiff(:,bound(i)-j)=[];
mass(bound(i)-j,:)=[];
mass(:,bound(i)-j)=[];
j=j+1;
end
%去除边界
d=sort(eig(stiff,mass));
d(1:min(6,size(d,1)));
fprintf('n=%2d \n ',n);
for i=1:min(6,size(d,1))
fprintf('%20.14f \n',d(i));
end
程序运行是提示说n没有定义,大家能告诉我怎么改吗?
tic;
format long g;
dlg=sprintf('Linear result');
disp(dlg);
h=1/n;
x0=0;
y0=0;
area=h^2/2;
nodesnum=(n+1)^2;
bnodenum=4*n;
bound=ones(bnodenum,1);
layercount=n+1;
% area 为单元三角形的面积,h为分段长度,(x0,y0)为起始点坐标
% nodesum为总节点的个数,bnodenum边界点的个数,bound存放边界点的矩阵
tb=[1/12 1/24 1/24;
1/24 1/12 1/24;
1/24 1/24 1/12]*(2*area);
% tb为单元质量矩阵
com=[-h h 0;
-h 0 h];
%this is mistaken.F.FFFFFF
ta=com'*com/(4*area);
% ta为单元刚度矩阵
areatemp=ones(3,3);
templj=ones(2,3);
stiff=zeros(nodesnum,nodesnum);
mass=zeros(nodesnum,nodesnum);
p=ones(4,1);
ft=ones(3,1);
st=ones(3,1);
for elenum=0:1:n^2-1
col=mod(elenum,n);
row=floor(elenum/n);
p(1)=row*layercount+col+1;
p(2)=p(1)+1;
p(3)=p(2)+layercount;
p(4)=p(1)+layercount;
ft(1)=p(1);
ft(2)=p(2);
ft(3)=p(4);
st(1)=p(3);
st(2)=p(4);
st(3)=p(2);
%按次序取出每个三角形的坐标
%stiff为刚度矩阵,mass为质量矩阵
%ft存放下三角形节点,st存放上三角形节点
for i=1:3
for j=1:3
stiff(ft(i),ft(j))=stiff(ft(i),ft(j))+ta(i,j);
stiff(st(i),st(j))=stiff(st(i),st(j))+ta(i,j);
mass(ft(i),ft(j))=mass(ft(i),ft(j))+tb(i,j);
mass(st(i),st(j))=mass(st(i),st(j))+tb(i,j);
end
end
end
%按次序将得到的每个三角形单元刚度和载荷矩阵进行叠加
prod=1;
for k=1:nodesnum
if (mod(k-1,n+1)==0) | (mod(k,n+1)==0)
bound(prod)=k;
prod=prod+1;
else
for j=2:n
if mod(k-j,n*(n+1))==0
bound(prod)=k;
prod=prod+1;
end
end
end
end
%找出平面区域的边界点
j=0;
for i=1:bnodenum
stiff(bound(i)-j,:)=[];
stiff(:,bound(i)-j)=[];
mass(bound(i)-j,:)=[];
mass(:,bound(i)-j)=[];
j=j+1;
end
%去除边界
d=sort(eig(stiff,mass));
d(1:min(6,size(d,1)));
fprintf('n=%2d \n ',n);
for i=1:min(6,size(d,1))
fprintf('%20.14f \n',d(i));
end
程序运行是提示说n没有定义,大家能告诉我怎么改吗?