How to add iterations in Newton Raphson code of Kepler Equation

16 views (last 30 days)
imran shaikh on 19 Sep 2021
Edited: imran shaikh on 22 Sep 2021
function [E] = Kepler(M,e,tol)
% File Kepler.m solves Kepler Equation
% Input: M = Mean anomoly in radians
% e = Eccentricity
% tol = tolerance
% Output: E = Eccentric anomoly in radians
En = M; % Using M as the first guess
Ens = En - (En-e*sin(En) - M)/(1 - e*cos(En)); % Newton Raphson iteration
while(abs(Ens-En)>tol) % Setting the tolerance as limit for iteration
En = Ens; % establishing forward step of iteration
Ens = En- (En - e*sin(En) - M)/(1 - e*cos(En)); % Re-calculation of new step
end
E = Ens; % update E
Matlab version used: Matlab R2020b
The above code works to provide a value of E, but how do i answer below question with only two input variables and add iterations to the code?

Alan Stevens on 21 Sep 2021
Like this
M = 0.908;
e = 0.725;
tol = 10^-6;
[E, its] = Kepler(M,e,tol);
E = 1.6579 after one iteration
disp(['E = ' num2str(E) ' after ' num2str(its), ' iterations'])
E = 1.6317 after 4 iterations
function [E,its] = Kepler(M,e,tol)
% File Kepler.m solves Kepler Equation
% Input: M = Mean anomoly in radians
% e = Eccentricity
% tol = tolerance
% Output: E = Eccentric anomoly in radians
En = M; % Using M as the first guess
Ens = En - (En-e*sin(En) - M)/(1 - e*cos(En)); % Newton Raphson iteration
its = 0;
while(abs(Ens-En)>tol) % Setting the tolerance as limit for iteration
En = Ens; % establishing forward step of iteration
Ens = En- (En - e*sin(En) - M)/(1 - e*cos(En)); % Re-calculation of new step
its = its+1;
if its==1
disp(['E = ' num2str(Ens) ' after one iteration'])
end
end
E = Ens;
end
imran shaikh on 22 Sep 2021
Thanks Alan, I will give it a try