- When using the Newton Raphson method if the derviative "f'(xn) = 0" at any iteration, the algorithm will attempt to divide the expression by zero leading to a runtime error.
- If the derivative is zero, the while loop would become infinite as the "err" variable will never decrease.
- If the function value "f(x(i+1)) is exactly zero, it breaks the loop without reporting about convergence or the number of iterations taken.
- The convergence check is based on the error between iterations. You can add a check for the function value approaching zero to indicate of the method is convergin to the root.
what should we do in matlab code for newtons raphson method in the case f'(xn)=0 ?
2 ビュー (過去 30 日間)
古いコメントを表示
This code doesnot work if f'(xn)=0 in some iteration so what should be the general code for Newtons raphson method?
0 件のコメント
回答 (1 件)
Maneet Kaur Bagga
2024 年 10 月 7 日
編集済み: Maneet Kaur Bagga
2024 年 10 月 7 日
Hi,
As per my understanding from the given code, following are the errors which can cause runtime errors:
To overcome the above edge cases you can check if the derivative is zero before computing the next approximation. Also, you can add a small pertubation to the point if the derivative is very close to zero to avoid division by zero.
Please refer to the modified code below for better understanding:
format long
f = @(x) x^3 - 2*x - 5;
f1 = @(x) 3*x^2 - 2;
tol = 0.001;
i = 1;
x(i) = 2;
err = 1;
while err >= tol
% Calculate the derivative at the current point
derivative = f1(x(i));
% Check if the derivative is close to zero
if abs(derivative) < 1e-10 % Adjust tolerance as needed
disp('Derivative is zero or very close to zero. Switching method or adjusting guess.')
% Option 1: Adjust the guess slightly (perturbation)
x(i) = x(i) + 1e-6; % Small perturbation
derivative = f1(x(i)); % Recalculate derivative after perturbation
end
% Newton-Raphson formula
x(i+1) = x(i) - (f(x(i)) / derivative);
err = abs(x(i+1) - x(i));
% Check for exact root
if f(x(i+1)) == 0
break;
end
i = i + 1;
end
% Display the result
fprintf('Root found: %f\n', x(end));
fprintf('Function value at root: %f\n', f(x(end)));
fprintf('Number of iterations: %d\n', i);
I hope this helps!
0 件のコメント
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!