MATLAB CODE NEWTON METHOD

138 views (last 30 days)
Adomas Bazinys
Adomas Bazinys on 5 Mar 2018
f = @(x) exp(x)-3*x;
fp = @(x) exp(x)-3;
x0 = 1;
N = 10;
tol = 1E-10;
x(1) = x0; % Set initial guess
n = 2;
nfinal = N + 1;
while (n <= N + 1)
fe = f(x(n - 1));
fpe = fp(x(n - 1));
x(n) = x(n - 1) - fe/fpe;
if (abs(fe) <= tol)
nfinal = n;
break;
end
n = n + 1;
end
plot(0:nfinal - 1,x(1:nfinal),'o-')
title('Solution:')
xlabel('Iterations')
ylabel('X')
I have a few questions about my code. What is happening with variable n during execution? And how could I make my code printing an iteration table? I can see iterations in the graphic but I need to print a table also.

Answers (5)

Geoff Hayes
Geoff Hayes on 5 Mar 2018
Adomas - your code is using n as an index into x. On each iteration of the loop, you increment n by one in preparation for the next iteration. n will be the length of your array x and so will tell you how many iterations have occurred until the tolerance has been satisfied (or until the maximum N has been reached).
As for displaying the data in a table, do you mean your x? Something like
table([1:length(x)]',x']
I'm using the ' so that the data is transposed (into a column).

Jan
Jan on 5 Mar 2018
What is happening with variable n during execution?
It is increased by 1 in each iteration. It counts the number of iterations.
how could I make my code printing an iteration table?
Insert a command to display the current values:
...
x(n) = x(n - 1) - fe/fpe;
fprintf('%3d: %20g %20g\n', n, x(n), abs(fe));
if (abs(fe) <= tol)
...

Mohamed Elsayed Abo Heiba
Mohamed Elsayed Abo Heiba on 18 Oct 2019
f = @(x) exp(x)-3*x;
fp = @(x) exp(x)-3;
x0 = 1;
N = 10;
tol = 1E-10;
x(1) = x0; % Set initial guess
n = 2;
nfinal = N + 1;
while (n <= N + 1)
fe = f(x(n - 1));
fpe = fp(x(n - 1));
x(n) = x(n - 1) - fe/fpe;
if (abs(fe) <= tol)
nfinal = n;
break;
end
n = n + 1;
end
plot(0:nfinal - 1,x(1:nfinal),'o-')
title('Solution:')
xlabel('Iterations')
ylabel('X')

Hamza saeed khan
Hamza saeed khan on 24 Nov 2020
f = @(x) exp(x)-3*x;
fp = @(x) exp(x)-3;
x0 = 1;
N = 10;
tol = 1E-10;
x(1) = x0; % Set initial guess
n = 2;
nfinal = N + 1;
while (n <= N + 1)
fe = f(x(n - 1));
fpe = fp(x(n - 1));
x(n) = x(n - 1) - fe/fpe;
if (abs(fe) <= tol)
nfinal = n;
break;
end
n = n + 1;
end
plot(0:nfinal - 1,x(1:nfinal),'o-')
title('Solution:')
xlabel('Iterations')
ylabel('X')
table([1:length(x)]',x']
x(n) = x(n - 1) - fe/fpe;
fprintf('%3d: %20g %20g\n', n, x(n), abs(fe));
if (abs(fe) <= tol)

Aristi Christoforou
Aristi Christoforou on 10 Apr 2021
function[root]=newtonmethod(f,df,xo,tol,n)
xn=xo;
for k=1:n
xn1=xn-f(xn)/df(xn);
dx=abs(xn1-xn);
xn=xn1;
if dx<tol
dis("newton method has converged")
root=xn;
return
end
end
disp("no convergence after n interactions")

Categories

Find more on Programming in Help Center and File Exchange

Tags

Products

Community Treasure Hunt

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

Start Hunting!