61 lines
1.5 KiB
Matlab
Executable File
61 lines
1.5 KiB
Matlab
Executable File
function x=newton(Fs,FPs,P0,y,P,TOL);
|
|
% NEWTON-RAPHSON ALGORITHM 2.3
|
|
%
|
|
% To find a solution to f(x) = 0 given an
|
|
% initial approximation p0:
|
|
%
|
|
% y,P can be used for additional info if the function
|
|
% requires it.
|
|
%
|
|
% Initially written by Burden and Faires, revised by
|
|
% B.A. Broughton, 10/01/1999
|
|
%
|
|
% INPUT: initial approximation p0; tolerance TOL;
|
|
% maximum number of iterations NO.
|
|
%
|
|
% OUTPUT: approximate solution p or a message of failure
|
|
|
|
TRUE = 1;
|
|
FALSE = 0;
|
|
F = inline(Fs,'x','P','y');
|
|
FP = inline(FPs,'x','P');
|
|
NO=150;
|
|
OUP = 1;
|
|
F0 = F(P0,P,y);
|
|
% STEP 1
|
|
I = 1;
|
|
OK = TRUE;
|
|
% STEP 2
|
|
while I <= NO & OK == TRUE
|
|
% STEP 3
|
|
% compute P(I)
|
|
FP0 = FP(P0,P);
|
|
D = F0/FP0;
|
|
% STEP 6
|
|
P0 = P0 - D;
|
|
F0 = F(P0,P,y);
|
|
% STEP 4
|
|
if abs(D) < TOL
|
|
% procedure completed successfully
|
|
% fprintf(OUP,'\nApproximate solution = %.10e\n',P0);
|
|
% fprintf(OUP,'with F(P) = %.10e\n',F0);
|
|
% fprintf(OUP,'Number of iterations = %d\n',I);
|
|
% fprintf(OUP,'Tolerance = %.10e\n',TOL);
|
|
OK = FALSE;
|
|
% STEP 5
|
|
else
|
|
I = I+1;
|
|
end
|
|
end
|
|
if OK == TRUE
|
|
% STEP 7
|
|
% procedure completed unsuccessfully
|
|
fprintf(OUP,'\nIteration number %d',NO);
|
|
fprintf(OUP,' gave approximation %.10e\n',P0);
|
|
fprintf(OUP,'with F(P) = %.10e not within tolerance %.10e\n',F0,TOL);
|
|
end
|
|
x = P0;
|
|
|
|
|
|
|
|
|