Vector imbalance error in while loop
Afficher commentaires plus anciens
I am trying to plot based on a certain situation. In the first to situation (Beam. Load == 1 and Beam.Support == 1) and (Beam. Load == 1 and Beam.Support == 2), I need to create two sets of y values and two sets of x values and then join them together such that x1 is the x values and y is y values. When I run this script in MATLAB the other cases work, but not the one stated above. Instead MATLAB returns the error:
In an assignment A(I) = B, the number of elements in B and I must be the same.
Error in Beam_Deflection_GUI>process (line 395)
y1(i) = (F.*x.^2/6*E*I).*(3*a-x); % 0<x<a
Error while evaluating uicontrol Callback
Here is the Code:
I = Beam.Inertia;
a = Beam.Location;
F = Beam.Magnitude;
L = Beam.Length;
b = Beam.Length-Beam.Location;
x = linspace(0,Beam.Length);
o = Beam.Magnitude/Beam.Length; % Magnitude is them same as the force
y1 = zeros(1,100);
y2 = zeros(1,100);
x1 = zeros(1,100);
x2 = zeros(1,100);
i = 1;
Beam.x1 = x;
if Beam.Load == 1 % Referring to the point in the list during the selection
if Beam.Support == 1
while x(i) < a
y1(i) = (F.*x.^2/6*E*I).*(3*a-x); % 0<x<a
x1(i) = x(i);
i = i + 1;
end
while x(i) <= L && x(i) < a
y2(i) = (F.*a^2/6*E*I).*(3*x-a); % a<x<L
x2(i) = x(i);
i = i+1;
end
Beam.y1 = [y1, y2];
Beam.x1 = [x1, x2];
else % x.Support == 2
while x(i) < a
y1 = (F*b.*x/6*L*E*I).*(L^2-x.^2-b^2); % 0<x<a
i = i+1;
x1 = x(i);
end
while x(i) <= L
y2 = (F*b/6*E*L*I).*((L/b).*(x-a).^3+(L^2-b^2).*x-x.^3);% a<x<L
i = i+1;
x2 = x(i);
end
Beam.y1 = [y1, y2];
Beam.x1 = [x1, x2];
end
else % x.Load == 2
if Beam.Support == 1
Beam.y1 = (o.*x.^2/24*E*I).*(x.^2+6*L^2-4*L.*x);
else % x.Support == 2
Beam.y1 = (o.*x.^2/24*E*I).*((L^3-2*L.*x.^2)+x.^3);
end
end
Réponse acceptée
Plus de réponses (2)
Walter Roberson
le 4 Déc 2012
Your loop is while x(i) < a implying that x is a vector. But then you have
y1(i) = (F.*x.^2/6*E*I).*(3*a-x);
and if x is a vector then the result of the calculation is going to be a vector, and you then try to store that vector into the single result y1(i) .
Perhaps you want
y1(i) = (F.*x(i).^2/6*E*I).*(3*a-x(i));
and similar fixes in other lines.
Lawson Hoover
le 4 Déc 2012
Catégories
En savoir plus sur Code Performance 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!