Error running for loop
Afficher commentaires plus anciens
Hello,
I am working with the following MATLAB code, it works properly if I want to calculate the values at some fixed points, but if I run the same code using for loop (for n=0:4), it reports an error (Error using vertcat
Dimensions of arrays being concatenated are not consistent.)
How could I resolve this issue.
I would be very grateful for your kind support.
Here's my MATLAB code:
syms P
l=100; a=50; b=20; h0=50; E=200; h1=50;%n=1.5;
for n=1:0.5:4
I0=b*h0^3/12; I1=b*h1^3/12;
L0=sqrt(P/(E*I0-P*n));%L0=simplify(L00);
L1=sqrt(P/(E*I1-P*n));%L1=simplify(L11);
v=0.3;
s=0.5;
f=1.93-3.07*s+14.53*s^2-25.11*s^3+25.8*s^4;
k=(E*I1)/(6*pi*h1*f*(1-v^2));
a11=cos(L1*l) - cos(L1*a) - L1*a*sin(L1*l) + L1*l*sin(L1*l);
a12=sin(L1*l) - sin(L1*a) + L1*a*cos(L1*l) - L1*l*cos(L1*l);
a13=cos(L0*a) - 1;
a14=sin(L0*a) - L0*a;
a21=-(L1*sin(L1*a) - L1*sin(L1*l)) - L1^2*cos(L1*a)*((P*n - E*I1)/k);
a22=(L1*cos(L1*a) - L1*cos(L1*l)) - L1^2*sin(L1*a)*((P*n - E*I1)/k);
a23=L0*sin(L0*a);
a24=(L0 - L0*cos(L0*a));
a31=-L1^2*cos(L1*a)*(P*n - E*I1);
a32=-L1^2*sin(L1*a)*(P*n - E*I1);
a33=L0^2*cos(L0*a)*(P*n - E*I0);
a34=L0^2*sin(L0*a)*(P*n - E*I0);
a41=L1^3*sin(L1*a)*(P*n - E*I1);
a42=-L1^3*cos(L1*a)*(P*n - E*I1);
a43=-L0^3*sin(L0*a)*(P*n - E*I0);
a44=L0^3*cos(L0*a)*(P*n - E*I0);
A=[a11 a12 a13 a14;a21 a22 a23 a24;a31 a32 a33 a34;a41 a42 a43 a44];
delta1=det(A);
delta2=subs(delta1);
delta=simplify(delta2);
F=matlabFunction(delta);
%FF=fplot(F)
%P=vpasolve(delta,P,1e3)
%P=feval(F,1e3 )% sol=fzero(F,1e3)
P=[];
for j = 0.01:10
PP = fzero(F, j);
P = [P; PP];
end
P_cr = min(P(P > 0))
D=plot(n,P_cr,'k.','linewidth',1.5)
%axis([0 4 0 1e6])
DD=double(D)
hold on
end
Réponse acceptée
Plus de réponses (1)
Colo
le 5 Jan 2020
1 vote
Hi,
I copied your code and ran it. First loop works fine because P is 1x1sym.
in line 38 you change the size of P to 10x1: P=[P;PP]
Thus, a11 becomes 10x10 and a41 10x1 during the following iteration. So the dimensions cannot match in A.
The solution is to keep P as a 1x1sym.
You can either add a line at the beginning of the loop declaring P again as syms:
syms P
or use another variable instead of deleting P in line 36 and the following nested for loop.
I hope this helped :)
1 commentaire
HINA
le 5 Jan 2020
Catégories
En savoir plus sur Logical dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!