Ben <benvoeveren@gmail.com> wrote in message <279599969.28875.1279127546346.JavaMail.root@gallium.mathforum.org>...
> Hello,
>
> I don't know how to use the solve function. I've read the matlab doc, but I don't know how to solve this problem.
>
> I have the following parameters.
>
> a =1;
> b = 1.5;
> c = 0;
>
> I want to use this equation:
> A = solve('a*cos(x)  b*sin(x)=c');
>
> This gives:
> A =
> (2)*atan((b  (a^2 + b^2  c^2)^(1/2))/(a + c))
> (2)*atan((b + (a^2 + b^2  c^2)^(1/2))/(a + c))
>
> How can I get the answer in numbers between pi and pi?
       
My symbolic toolbox came up with the same answer, Ben . However, this form of expression can produce a NaN where none ought to occur. For example, let a = 1, b = 1, and c = 1, which is a perfectly reasonable combination of values. However, the first of the two symbolic expressions when computed numerically with double precision numbers will give rise to a NaN because it involves a zerodividedbyzero situation. This is an entirely artificial difficulty; there ought to be no trouble with that combination of values for a, b, and c.
I much prefer the following two expressions:
A = [mod(atan2(b,a)+acos(c/sqrt(a^2+b^2)),2*pi)pi;
mod(atan2(b,a)acos(c/sqrt(a^2+b^2)),2*pi)pi]
These values will also always fall between pi and +pi. The only accuracy difficulty this encounters occurs when c/sqrt(a^2+b^2) is very nearly +1 or 1, and that is inherent in the problem. A tiny change in c here makes a much larger change in x. The symbolic expressions also have the same difficulty in that circumstance.
Roger Stafford
