Effacer les filtres
Effacer les filtres

how can i use a "while" loop to automatically increment omega?

7 vues (au cours des 30 derniers jours)
Emily Gobreski
Emily Gobreski le 17 Juin 2016
Commenté : Star Strider le 17 Juin 2016
theta=120
sign=(cosd (theta)/abs (cosd (theta)))
u=.8
w=(2*pi/5)
R=1
c=4.05/12
H=18/12
y=H-(R*sind(theta/2))
Md=50/32.2
Id=(.5*Md*R^2)
Mp=75/32.2
Mb=30/32.2
alpha=0
u=.8
L=(6/12*R)
g=32.2
ax=(-R*w^2)*cosd(theta)
ab=(-R*w^2*cosd(theta))-(R*w^2*sind(theta))
ay=(-R*w^2)*sind(theta)
AA=[1 0 1 0 0 0 0 0 0; 0 1 0 1 0 0 0 0 0; 0 0 -R*sind(theta) R*cosd(theta) 0 0 0 0 0; 0 0 0 0 1 0 1 0 0; 0 0 0 0 0 1 0 1 0; 0 0 -1 0 -1 0 0 0 0; 0 0 -c 3*R -c -3*R 0 0 0; 0 0 0 0 0 0 0 0 0; 0 0 0 0 0 0 0 0 0]
CC=[0 Md*g Id*alpha 0 Md*g Id*alpha Mp*ax Mp*ay+Mp*g Mb*g]
xx=CC*AA
if (0<theta) & (theta<180), x=C*a
else xx=CC*AA
end
w = 2*pi/5;
theta = 0:2:360
  1 commentaire
Emily Gobreski
Emily Gobreski le 17 Juin 2016
This is the email I have from the professor. It might explain the process a little better:
Modify your program to have it solve the kinetoics problem for a full 360 degree rotation of the drive disk at a specified angular velocity omega (start with 2*pi/5 if you'd like). Use a theta increment of 2 degrees)
Increase omega until you find that NB <0 somewhere during the contact phase (e.g., box slides free of the push link). You can choose to manually adjust omega and re-run your program several times OR perhaps use a while loop to automatically increment omega.

Connectez-vous pour commenter.

Réponse acceptée

Star Strider
Star Strider le 17 Juin 2016
I imagine by ‘omega’, you actually intend:
w=(2*pi/5);
A while loop is best used if you want to increment it and then test to see if a specific value meets a specific criterion, and stop the loop when it does.
If you just want to increment it over a range without testing, use a for loop instead.
I experimented with vectorising your code by making ‘omega’ a vector and using element-wise operations where I could. It works for some calculations, but it makes the ‘xx’ calculation impossible. A loop is likely the only way to go.
I could not run this because ‘C’ and ‘a’ are not defined. Correct that, then see if this works for you:
theta=120;
sign=(cosd (theta)/abs (cosd (theta)));
u=.8;
wv = linspace(0, (2*pi/5), 10); % Vector Of Values For ‘w’
R=1;
c=4.05/12;
H=18/12;
y=H-(R*sind(theta/2));
Md=50/32.2;
Id=(.5*Md*R^2);
Mp=75/32.2;
Mb=30/32.2;
alpha=0;
u=.8;
L=(6/12*R);
g=32.2;
for k1 = 1:length(wv)
w = wv(k1);
ax = (-R*w.^2)*cosd(theta); % Modified For Element-Wise Operations
ab = (-R*w.^2*cosd(theta))-(R*w.^2*sind(theta)); % Modified For Element-Wise Operations
ay = (-R*w.^2)*sind(theta); % Modified For Element-Wise Operations
AA=[1 0 1 0 0 0 0 0 0; 0 1 0 1 0 0 0 0 0; 0 0 -R*sind(theta) R*cosd(theta) 0 0 0 0 0; 0 0 0 0 1 0 1 0 0; 0 0 0 0 0 1 0 1 0; 0 0 -1 0 -1 0 0 0 0; 0 0 -c 3*R -c -3*R 0 0 0; 0 0 0 0 0 0 0 0 0; 0 0 0 0 0 0 0 0 0];
CC=[0 Md*g Id*alpha 0 Md*g Id*alpha Mp*ax Mp*ay+Mp*g Mb*g];
xx=CC*AA;
if (0<theta) & (theta<180), x{k1} = C*a;
else xx{k1} = CC*AA
end
end
I left ‘x’ and ‘xx’ as cell arrays because I don’t know how large they are.
  8 commentaires
Emily Gobreski
Emily Gobreski le 17 Juin 2016
It works! You're the best! Thank you so much!!!!!
Star Strider
Star Strider le 17 Juin 2016
As always, my pleasure!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Characters and Strings dans Help Center et File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by