Could someone please optimize this code?

1 vue (au cours des 30 derniers jours)
The Merchant
The Merchant le 28 Oct 2019
Commenté : Adam Danz le 15 Déc 2019
Could someone please optimize this code?
My code:
v0 = 10
gamma = 0.1
for k=1:101
theta = 0.8444 * pi/4 + (k-51)*0.0001;
dt = 0.0000001;
x = 0;
y = 0;
vx = v0 * cos(theta);
vy = v0 * sin(theta);
x = x + dt * vx;
y = y + dt * vy;
while (y>0)
v = sqrt(vx*vx+vy*vy);
vx = vx - dt * gamma * vx;
vy = vy - dt * 9.81 - dt * gamma * vx;
x = x + dt * vx;
y = y + dt * vy;
end;
t(k) = theta
a(k) = x
end;
plot(a)
[vv, jv] = max(a)
t(jv) / (pi/4)
  2 commentaires
John D'Errico
John D'Errico le 29 Oct 2019
It can be terribly difficult to optimize code if we are not told what the code is supposed to do. A few words of explanation would be a great help there.
Adam Danz
Adam Danz le 15 Déc 2019
Original question by OP in case it is deleted (this user has deleted many questions after being answered).
------------------------------------------------------------------
Could someone please optimize this code?
My code:
v0 = 10
gamma = 0.1
for k=1:101
theta = 0.8444 * pi/4 + (k-51)*0.0001;
dt = 0.0000001;
x = 0;
y = 0;
vx = v0 * cos(theta);
vy = v0 * sin(theta);
x = x + dt * vx;
y = y + dt * vy;
while (y>0)
v = sqrt(vx*vx+vy*vy);
vx = vx - dt * gamma * vx;
vy = vy - dt * 9.81 - dt * gamma * vx;
x = x + dt * vx;
y = y + dt * vy;
end;
t(k) = theta
a(k) = x
end;
plot(a)
[vv, jv] = max(a)
t(jv) / (pi/4)

Connectez-vous pour commenter.

Réponses (1)

Bob Thompson
Bob Thompson le 28 Oct 2019
I don't know about 'optimized,' but I'm pretty sure you can remove the entire for loop by vectorizing. Also, suppressing your values will actually do a surprising amount to speed up run time. Anything visual takes a lot more time and power to output, even just numbers and letters.
v0 = 10;
gamma = 0.1;
range = (-50:50);
theta = 0.8444 * pi/4 + range.*0.0001;
dt = 0.0000001;
x = 0;
y = 0;
vx = v0 * cos(theta);
vy = v0 * sin(theta);
x = x + dt * vx;
y = y + dt * vy;
while y>0
v = sqrt(vx*vx+vy*vy); % What does this do? It isn't used anywhere
vx = vx - dt * gamma * vx;
vy = vy - dt * 9.81 - dt * gamma * vx;
x = x + dt * vx;
y = y + dt * vy;
end
plot(x)
[vv, jv] = max(x);
t(jv) ./ (pi/4);
I suspect part of the problem is that your code doesn't ever actually produce a negative value for y. The first value is slightly >0, but after that all you're doing is adding more positive values.
  3 commentaires
The Merchant
The Merchant le 28 Oct 2019
I get the following error:
Unrecognized function or variable 't'.
Bob Thompson
Bob Thompson le 29 Oct 2019
I never got to t because the while loop was always positive and never stopped running. I would agree with the error that it is undefined.

Connectez-vous pour commenter.

Community Treasure Hunt

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

Start Hunting!

Translated by