Newton-Raphson algorithm stuck running after 4 or 5 iterations

1 vue (au cours des 30 derniers jours)
Mosharof Hossain
Mosharof Hossain le 23 Mar 2023
Code:
%% initial setup
syms x real
f = x^5-2*x^3+4*x+2;
error_lim = 1e-5;
%% newton raphson
d_f = diff(f);
m = 5;
disp(m)
% iterate till root is found with certain accuracy
more off;
while true
e = m - subs(f,m)/subs(d_f,m);
err = abs(e-m);
fprintf("error = %g\n", err)
if err < error_lim
break
end
m = e;
fprintf("x_p = %g\n", m)
end
fprintf("the root newton raphson method is %g\n", e)
and the output is:
>> stat3_b
5
error = 0.972474
x_p = 4.02753
error = 0.774926
x_p = 3.2526
error = 0.620288
x_p = 2.63231
error = 0.505877
x_p = 2.12643
error = 0.439351
x_p = 1.68708
error = 0.467107
x_p = 1.21998
error = 0.968289
x_p = 0.251687
error = 0.817551
x_p = -0.565863
After 8th iterations matlab is busy, but nothing prints. It runs and gives appropriate solution of the function when initial m is set to 1 or 2 but problem arises when m is set to 3 or higher. What is wrong with the above allgorithm?
Thanks in advance.

Réponse acceptée

Dyuman Joshi
Dyuman Joshi le 23 Mar 2023
Modifié(e) : Dyuman Joshi le 23 Mar 2023
Converting to numeric data type is much faster than using symbolic values
syms x real
%I have defined f to be an explicit function of x, so that you can directly input
%the value to get the output instead of using subs()
f(x) = x^5-2*x^3+4*x+2;
error_lim = 1e-5;
%% newton raphson
%as a result, d_f is also an explicit function of x
d_f = diff(f)
d_f(x) = 
m = 5;
while true
%conversion to double
e = m - double(f(m)/d_f(m));
err = abs(e-m);
%fprintf("error = %g\n", err)
if err < error_lim
break
end
m = e;
%fprintf("x_p = %g\n", m)
end
%Succesful completion of while loop and result is obtained
fprintf("the root newton raphson method is %g\n", e)
the root newton raphson method is -0.581803

Plus de réponses (0)

Produits


Version

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by