# how to get rid of imaginary numbers, after a root.

64 views (last 30 days)
oskar on 25 Oct 2013
Commented: Kumaresh Kumaresh on 14 Jun 2022 at 4:28
hi, i´m a beginner in matlab and i have been making a tracejtory with a basketball. my problem now is with the time.
This is a part of my script. My speed and angle are two vectors, because of the vectors sometimes the roots will be an imaginary number and (at=atand....) will get error. How do I do if i only want real numbers to go into at=atand....
time = roots([-g./2, v0y, y0-H]);
time = max(time);
at=atand((h0*cos(V))/((h0*sin(V))-(g*tid)));

Muruganandham Subramanian on 25 Oct 2013
time = roots([-g./2, v0y, y0-H]);
time = max(time);
time=real(time);
at=atand((h0*cos(V))/((h0*sin(V))-(g*tid)))
##### 2 CommentsShowHide 1 older comment
Kumaresh Kumaresh on 14 Jun 2022 at 4:28
Thanks ^^ Thas helps

Simon on 25 Oct 2013
Hi!
What do you expect, physically? Your trajectory is a parabola with negative prefactor in front of t^2. So, the apex is the highest point of your curve. If it is negative you won't find real roots of the polynom. Pyhsically this means you throw your ball from below the earth's surface and it is falling downwards ... ;-)

oskar on 25 Oct 2013
I know, thats why i have two vectors wich will eventually get it into the baskethoop, but when the all the numbers "time" is going into the at=atand... i don't want the imaginary numbers to go into at=atand...
Simon on 25 Oct 2013
If you just want to skip the atand command for imaginary time you may surround it with
if isreal(time)
atand ...
end