How to add iterations in Newton Raphson code of Kepler Equation

조회 수: 19 (최근 30일)
imran shaikh
imran shaikh 2021년 9월 19일
편집: imran shaikh 2021년 9월 22일
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
Alan Stevens 2021년 9월 21일
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

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Newton-Raphson Method에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by