Filter löschen
Filter löschen

MATLAB CODE NEWTON METHOD

43 Ansichten (letzte 30 Tage)
Adomas Bazinys
Adomas Bazinys am 5 Mär. 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.

Antworten (5)

Geoff Hayes
Geoff Hayes am 5 Mär. 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 am 5 Mär. 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 am 18 Okt. 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 am 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 am 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")

Kategorien

Mehr zu Programming finden Sie in Help Center und File Exchange

Tags

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by