2 views (last 30 days)

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)

Bob Nbob
on 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.

Sign in to answer this question.

Opportunities for recent engineering grads.

Apply Today
## 2 Comments

## Direct link to this comment

https://www.mathworks.com/matlabcentral/answers/487815-could-someone-please-optimize-this-code#comment_761470

⋮## Direct link to this comment

https://www.mathworks.com/matlabcentral/answers/487815-could-someone-please-optimize-this-code#comment_761470

## Direct link to this comment

https://www.mathworks.com/matlabcentral/answers/487815-could-someone-please-optimize-this-code#comment_778140

⋮## Direct link to this comment

https://www.mathworks.com/matlabcentral/answers/487815-could-someone-please-optimize-this-code#comment_778140

Sign in to comment.