MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn moreOpportunities for recent engineering grads.

Apply Today
Asked by Vahid on 9 Feb 2012

Hello all,

I have solved an initial value problem and I have gotten the following equation for that:

theta=(c_0/c_1)- (2/c_1)*atan( exp(-a*c_1*t)*tan((c_0-c_1*theta_0)/2) )

where

c_0=7*pi/6; c_1=0.3; a=0.055; theta_0=0;

and

t=[0:0.01:100];

I do expect the MATLAB returns theta=0 for t=0. In other words what I expect to see is:

theta(1)=0

because for t=0, the first equation can be simplified and as a result we have: theta=theta_0 : independent of c_0,c_1(~=0),and a.

but MATLAB returns something else:

theta(1)=20.9440

I would be grateful if somebody could explain me how I can get what I expect to get?

thanks a lot, Vahid

*No products are associated with this question.*

Answer by Matt Tearle on 9 Feb 2012

Accepted answer

All inverse trigonometry functions return to a specific limited range, because trig functions are periodic. Hence, if `x = 9*pi/2`, then `sin(x)` will be 1, so `asin(sin(x))` will be `pi/2`, not `9*pi/2`. That's what's happening here -- `atan` returns values between `-pi/2` and `pi/2` (see `doc atan`):

(c_0-c_1*theta_0)/2 % ans = 1.8326 > pi/2 tan((c_0-c_1*theta_0)/2) atan(tan((c_0-c_1*theta_0)/2)) atan(tan((c_0-c_1*theta_0)/2)) + pi

Answer by Wayne King on 9 Feb 2012

Why do you think it simplifies like that?

for t=0 and theta_0= 0, your expression evaluates to

(c_0/c_1)- (2/c_1)*atan(tan(c_0/2))

which is 20.9440

Matt Tearle on 9 Feb 2012

I think the point is that Vahid expects atan(tan(x)) to return x, in which case this simplifies to c0/c1 - (2/c1)*(c0/2) = c0/c1 - c0/c1 = 0.

Vahid on 9 Feb 2012

Since we have: atan(tan(arg))=arg and because of that I think the answer should be

(c_0/c_1)- (2/c_1)*(c_0/2)

which is equal to 0!

## 0 Comments