Filter löschen
Filter löschen

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

7 Ansichten (letzte 30 Tage)
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 Kommentar
Emily Gobreski
Emily Gobreski am 17 Jun. 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.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Star Strider
Star Strider am 17 Jun. 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 Kommentare
Emily Gobreski
Emily Gobreski am 17 Jun. 2016
It works! You're the best! Thank you so much!!!!!
Star Strider
Star Strider am 17 Jun. 2016
As always, my pleasure!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Characters and Strings finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by