Array indices must be positive integers or logical values.
이전 댓글 표시
array indices must be positve
this error is coming
please help
답변 (1개)
Walter Roberson
2023년 5월 9일
이동: Walter Roberson
2023년 5월 9일
You initialize nodes to all zero and never change that. You use nodes(i,j) as a subscript to Xcoord, so you are indexing Xcoord at offset 0, which is not permitted in MATLAB.
clear
elementX = 10; %input('Enter no of elements in X direction:');
elementY = 4; %input('Enter no of elements in Y direction:');
Xnode=elementX+1;
Ynode=elementY+1;
Xzero=0.0;
Yzero=0.0;
Xlength = 3.14; %input('Enter length in X direction:');
Ylength = 2; %input('Enter length in Y direction:');
eps = 0.15; %input('Enter eccentricity:');
Xnel=Xnode-1;
Ynel=Ynode-1;
nel=Xnel*Ynel;
nnode=Xnode*Ynode;
delX=Xlength/Xnel;
delY=Ylength/Ynel;
nodes=zeros(nel,4);
gcoord=zeros(nnode,2);
grhs=zeros(55,1);
gm=zeros(55,55);
gm1=zeros(55,55);
sol=zeros(55,1);
Q1=zeros(11);
E=0;
gcoord
Xcoord=gcoord(:,1);
Ycoord=gcoord(:,2);
for i=1:nel
for j=1:4
X(j)=Xcoord(nodes(i,j));
Y(j)=Ycoord(nodes(i,j));
end
Xvec=[X(1),X(2),X(3),X(4)];
Yvec=[Y(1),Y(2),Y(3),Y(4)];
plot(Xvec,Yvec);
hold on;
elX=mean(Xvec(1:4));
elY=mean(Yvec(1:4));
text(elX,elY,num2str(i));
end
xlabel('X axis');
ylabel('Y axis');
title(num2str(i));
for jj=1:nnode
text(gcoord(jj,1),gcoord(jj,2),num2str(jj));
end
zeta(1)=-1/1.732;
eta(1)=-1/1.732;
zeta(2)=1/1.732;
eta(2)=-1/1.732;
zeta(3)=1/1.732;
eta(3)=1/1.732;
zeta(4)=-1/1.732;
eta(4)=1/1.732;
for i1=1:nel;
for i=1:4;
Jacb=[dxzeta,dyzeta;dxeta,dyeta];
detJacob=det(Jacb);
detJacob
Jacobinv=inv(Jacb);
inv(Jacb)
for i=1:4;
dnx(i)=Jacobinv(1,1)*dzeta(i)+Jacobinv(1,2)*deta(i);
dny(i)=Jacobinv(2,1)*dzeta(i)+Jacobinv(2,2)*deta(i);
end
h=0;
dh=0;
%eps=0.6;
for k=1:4;
h=h+Shape(k)*(1+eps*cos(Xcoord(nodes(i1,k))));
dh=dh+dnx(k)*(1+eps*cos(Xcoord(nodes(i1,k))));
end
h1=h.^3/12;
for i=1:4;
rhs(i,1)=rhs(i,1)-Shape(i)*1/2*dh*detJacob;
for j=1:4;
em(i,j)=em(i,j)+h1*(dnx(i)*dnx(j)+dny(i)*dny(j))*detJacob;
end
end
end
em
for ij=1:4;
ii=nodes(i1,ij);
grhs(ii,1)=grhs(ii,1)+rhs(ij,1);
for ji=1:4;
jj=nodes(i1,ji);
gm(ii,jj)=gm(ii,jj)+em(ij,ji);
end
end
end
for m=1:55
for n=1:55
gm1(m,n)=gm(m,n);
end
end
gm1
gm;
grhs;
for i=1:11
for j=1:55
gm(i,j)=0;
end
gm(i,i)=1;
grhs(i,1)=0;
end
for i=45:55
for j=1:55
gm(i,j)=0; gm(i1,j)=0;
end
gm(i1,i1)=1;
grhs(i1,1)=0;
end
for i=1:55
disp(gm(i,i))
end
gm;
grhs;
sol=gm\grhs;
sol
xx=zeros(11);
yy=zeros(11);
for i=12:22
yy(i)=sol(i);
xx(i)=gcoord(i,1);
end
for i=23:33
yy(i)=sol(i);
xx(i)=gcoord(i,1);
end
for i=34:44
yy(i)=sol(i);
xx(i)=gcoord(i,1);
end
plot(xx,yy)
wzeta=0;
weta=0;
for ie=1:40
for ig=1:4;
%int=int+1;
Shape(1)=(1-zeta(ig))*(1-eta(ig))/4;
Shape(2)=(1+zeta(ig))*(1-eta(ig))/4;
Shape(3)=(1+zeta(ig))*(1+eta(ig))/4;
Shape(4)=(1-zeta(ig))*(1+eta(ig))/4;
dzeta(1)=-(1-eta(ig))/4;
dzeta(2)=(1-eta(ig))/4;
dzeta(3)=(1+eta(ig))/4;
dzeta(4)=-(1+eta(ig))/4;
deta(1)=-(1-zeta(ig))/4;
deta(2)=-(1+zeta(ig))/4;
deta(3)=(1+zeta(ig))/4;
deta(4)=(1-zeta(ig))/4;
dxzeta=0;dyzeta=0;dxeta=0;dyeta=0;
wzeta=wzeta+Shape(i)*sol(ii,1)*cos(gcoord(ii,1))*detJacob;
weta=weta+Shape(i)*sol(ii,1)*sin(gcoord(ii,1))*detJacob;
end
end
wload=sqrt(wzeta.^2+weta.^2)
wload
카테고리
도움말 센터 및 File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!