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?
Neeta Dsouza answered .
2025-11-20
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)
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