phi_o(i) = (atand((0.5*g*t(i).^2*((1/3)*(2*sqrt(Vx(i)/Vx_o)+1)))/x(i)));
y(i) = y_o + x(i)*tand(phi_o(i))-(0.5*g*t(i).^2)*((1/3)*(1+(2*sqrt(Vx(i)/Vx_o))));
Part of the computation of y(i) is to take the tand of something that was computed by calling atand. If you look at the numerator of the body of the atand call that computes phi_o(i) it looks awfully similar to what you're subtracting from x(i)*tand(phi_o(i)) doesn't it? So if we define an intermediate variable we can write the expression for y(i) in terms of that temporary variable:
temp = 0.5*g*t(i).^2*((1/3)*(1+2*sqrt(Vx(i)/Vx_o)));
phi_o(i) = (atand(temp/x(i)));
y(i) = y_o + x(i)*tand(phi_o(i))-temp;
So y(i) looks like, for "nice" values of z = temp/x(i) where tand(atand(z)) is equivalent to z, to be y_o plus something that's effectively 0.
I would define temporary variables with descriptive names for some of the pieces of your calculations that you use repeatedly. This may help your code look closer to the equations in your textbook and/or may make it possible to simply read the code as English text and get a sense of what it's doing. For instance, it looks like some form of this quantity appears several times in your code. What does it represent?
sqrt(Vx_o/Vx(i))