Running multiple for loops
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I am extremely new to MATLAB and I am trying to develop a code that will give me an output for a series of equations that are affected by one another. This is extremely simple in Excel; however, I am required to do this in MATLAB. The first for loop runs and works perfectly but I can not get the second for loop to give me an output. I am positive that this extremely simple, I am just not familiar with this program. Thanks.
%%First 4-Bar%%
O2O4=2; O2A=5.38517; O4B=4; AB=1:1.74457;
%%Second 4-Bar%%
AC=1.41422; AG=6.96923; CG=5.87276; GE=1.82186; CD=4; DE=3:.967108; DE=3:.001:.967108;
for i=1:.001:1.74457
thetaO2A=180-acosd((O2A^2+O2O4^2-(O4B+(i))^2)/(2*(O2A*O2O4)));
thetaO4B=acosd((O2O4^2+(O4B+(i))^2-O2A^2)/(2*(O2O4*(O4B+(i)))));
thetaAC=(180-156.8014)+thetaO2A;
thetaAG=(180-121.46776)+thetaO2A;
thetaCG=(180-136.66081)+thetaAC;
pointA=[O2A*cosd(thetaO2A);+O2A*sind(thetaO2A)];
end
for ii=3:0.001:.967108
thetaGE=(acosd((CG^2+GE^2-(CD+(ii))^2)/(2*CG*GE)))-(180-CG)
end
for iii=3:0.001:1.19133
%another theta equation I have not derived yet that will reference the
%previous two for loops and the third variable iii
end
0 commentaires
Réponses (2)
Andrew Newell
le 5 Déc 2014
Modifié(e) : Andrew Newell
le 5 Déc 2014
In the second and third loops, the starting value is higher than the end. Maybe you want
for ii=3:-0.001:.967108
(this counts down from 3 to 0.968).
2 commentaires
Andrew Newell
le 5 Déc 2014
If you mean, will it change the output for a given value of ii? No. Note that, if you want to keep all the values of thetaGE, you could replace the loop by a vector expression:
x = .968:.001:3;
thetaGE=(acosd((CG^2+GE^2-(CD+x).^2)/(2*CG*GE)))-(180-CG);
The .^2 represents element-by-element taking of the power.
Stephen23
le 5 Déc 2014
Modifié(e) : Stephen23
le 5 Déc 2014
It seems like the basic problem is a lack of indexing to keep the results of each loop. Currently each loop simply redefines the variable pointA to be the result of the last line in the loop, but this is just a 2x1 array, and so you loose all of the results from the previous iterations.
However an even better solution is to vectorize your code, which is faster, neater and reads more like the maths it represents. Note the use of array operations , e.g. .^ instead of ^.
%%First 4-Bar%%
O2O4=2; O2A=5.38517; O4B=4; AB=1:1.74457;
%%Second 4-Bar%%
AC=1.41422; AG=6.96923; CG=5.87276; GE=1.82186; CD=4; DE=3:.967108; DE=3:.001:.967108;
%
vec = 1:.001:1.74457;
%
thetaO2A = 180-acosd((O2A^2+O2O4^2-(O4B+vec).^2)/(2*(O2A*O2O4)));
thetaO4B = acosd((O2O4^2+(O4B+vec).^2-O2A^2)/(2*(O2O4*(O4B+vec))));
thetaAC = (180-156.8014)+thetaO2A;
thetaAG = (180-121.46776)+thetaO2A;
thetaCG = (180-136.66081)+thetaAC;
pointA = [O2A*cosd(thetaO2A);+O2A*sind(thetaO2A)];
%
%for n=3:0.001:.967108
% thetaGE = acosd((CG^2+GE^2-(CD+n)^2)/(2*CG*GE)) - (180-CG)
%end
I leave the second loop as an exercise for the reader...
Also note that you should not use i for your loop variable, as this is the name of the inbuilt imaginary unit .
0 commentaires
Voir également
Catégories
En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!