Hello. I needed to make a program for university in witch to i needed to code the finite elementh method useing triangles. I wanted to make the figure in witch i was showing the triangles a bit more visible so i used an axis to make it a bit wider but i get the following error: Error using set Bad property value found. Object Name : axes Property Name : 'YLim' Values must be increasing and non-NaN.
Error in axis>LocSetLimits (line 208) set(ax,…
Error in axis (line 94) LocSetLimits(ax(j),cur_arg);
Error in Metoda_elementului_finit_cu_dreptunghiuri (line 63) axis([a-0.2,b+0.2,c-0.2,d+0.2])
The program is as fallowing:
if true % function []=Metoda_elementului_finit_cu_dreptunghiuri()
enda=input('a=');b=input('b=');d=input('c=');c=input('d=');N=input('N=');M=input('M=');Nod=zeros((N+1)*(M+1),3);Dr=zeros(N*M,4);x=linspace(a,b,N+1);y=linspace(c,d,M+1);k1=0;for j=1:M+1 for i=1:N+1 k=i+(N+1)*(j-1); Nod(k,1)=x(i); Nod(k,2)=y(j); Nod(k,3)=0; if((i~=1)&&(i~=N+1)&&(j~=1)&&(j~=M+1)) k1=k1+1; Nod(k,3)=k1; end end enddisplay(Nod);%afisarea
figure(1)%linii verticale
for i=1:N+1 plot(x(i)*ones(1,M+1),y) hold on %pause(0.2)
end%linii orizontale
for j=1:M+1 plot(x,y(j)*ones(1,N+1)) hold on %pause(0.2)endfor k=1:(N+1)*(M+1) if Nod(k,3)==0 plot (Nod(k,1),Nod(k,2),'*b') hold on else plot(Nod(k,1),Nod(k,2),'or') hold on end axis([a-0.2,b+0.2,c-0.2,d+0.2]) end %matricea dreptunghiurilor
kT=0;for j=1:M+1 for i=1:N+1 k=i+(N+1)*(j-1); if(i<=N)&&(j<=M) kT=kT+1; Dr(kT,1)=k; Dr(kT,2)=k+N+1; Dr(kT,3)=k+N+2; Dr(kT,4)=k+1; end end enddisplay(Dr); MR=zeros((N-1)*(M-1));L=zeros((N-1)*(M-1),1);nd=N*M;for k=1:nd xd=zeros(4,1); yd=zeros(4,1); for j=1:4 xd(j)=Nod(Dr(k,j),1); yd(j)=Nod(Dr(k,j),2); endD=zeros(4);for j=1:4 D(1:4,j)=[xd(j)*yd(j);xd(j);yd(j);1];endDinv=inv(D);A=Dinv(1:4,1);B=Dinv(1:4,2);C=Dinv(1:4,3);Me=zeros(4);Le=zeros(4,1);aDr=(xd(3)- xd(1))*(yd(2)-yd(1));for i=1:4 for j=1:4 R=((A(i)*A(j)*(yd(2)^2 + yd(1)*yd(2) +... yd(1)^2 + xd(3)^2 + xd(3)*xd(1) + ... xd(1)^2 )*1/3)+(A(i)*B(j)+A(j)*B(i))... *(y(2)+y(1))+(A(i)*C(j)+A(j)*C(i))*(x(3)+... x(1))*1/2 +B(i)*B(j)+C(i)*C(j))*aDr; Me(i,j)=R; end Le(i)=(f(xd(i),yd(i))*aDr/4);enddisplay(Me)display(Le)for i=1:4 for j=1:4 if((Nod(Dr(k,i),3)~=0) && (Nod(Dr(k,j),3)~=0)) MR(Nod(Dr(k,i),3),(Nod(Dr(k,j),3)))=... MR(Nod(Dr(k,i),3),(Nod(Dr(k,j),3)))+Me(i,j); end if(Nod(Dr(k,i),3)~=0) L(Nod(Dr(k,i),3))=L(Nod(Dr(k,i),3))+Le(i); end endendenddisplay(MR);display(L); function[z]=f(x,y)z=2.*sin(x).*sin(y);end
end
Thanks in advance!
Best Answer