Help to solv a equation with iteration

25 views (last 30 days)
Claus Madsen on 8 Mar 2013
I need help, how do i make a code in matlab for iterate the following eq:
x=0.46-0.5*cos(3.14*(y/d))+0.004*cos(2*3.14*(y/d))
where y is the only unknown constant? i know the value of x and d.
Azzi Abdelmalek on 8 Mar 2013
What do you mean?

Youssef Khmou on 9 Mar 2013
hi Clauss,
there are many ways to solve the equation, but with iterations i have few ideas : there is a method called Bisection :
d=1.3; % I SUPPOSED d=1.3
f=@(y) 0.46-0.5*cos(3.14*(y/d))+0.004*cos(2*3.14*(y/d))
format long
eps_abs = 1e-5;
eps_step = 1e-5;
a = 70.0; % Initial Guess to your function such that f(a)>0.
b = 78.0; % Initial Guess to your function such that f(b)<0.
while (b - a >= eps_step || ( abs( f(a) ) >= eps_abs && abs( f(b) ) >= eps_abs ) )
c = (a + b)/2;
if ( f(c) == 0 )
break;
elseif ( f(a)*f(c) < 0 )
b = c;
else
a = c;
end
end
Claus Madsen on 10 Mar 2013
From what i can understand this solve the eq for f(c)=0 but as i wrote in my problem, i know what x is, and its not 0 but 0.2?

Roger Stafford on 9 Mar 2013
Edited: Roger Stafford on 9 Mar 2013
You can solve that equation without doing any iteration, Claus. Using the formula
cos(2*A) = 2*cos(A)^2-1
.008*cos(3.14*y/d)^2-.5*cos(3.14*y/d)+.456-x = 0
and this is a quadratic equation in cos(3.14*y/d) which you can solve for. You will then have the unknown y expressed as d/3.14 times the arccosine of the two possible roots of this quadratic. (I presume 3.14 is your approximation for pi.) Provided either of these roots lie between -1 and +1, this will give you an infinite number of possible real-valued solutions for y.