06-262
Spring
2014:
Newtons
Method
in
MATLAB
From
Pseudo-Code
to
ImplementaEon
in
MATLAB
IntroducEon
Newtons
Method
(also
known
as
Newton-Raphson
Method)
is
used
to
solve
nonlinear
(system)
of
equaEons,
which
can
be
represented
as
follows:
where
is
a
general
univariate
nonlinear
funcEon
and
is
a
(scalar)
variable,
and
where
is
a
vector
of
general
mulEvariate
nonlinear
funcEons
and
is
a
vector
of
variables
Examples
Single
nonlinear
equa-on
where
is
the
(unknown)
extent
of
reacEon
(variable
to
be
solved
for)
and
is
a
(known)
equilibrium
constant
(a
number)
System
of
nonlinear
equa-ons
where
are
unknowns
and
the
other
symbols
are
known
Newtons
Method:
Pseudo-Code
Overview:
hTp://en.wikipedia.org/wiki/Newton's_method
Idea:
given
iniEal
guess
(crucial,
as
close
to
the
soluEon
as
possible),
iterate
towards
the
soluEon
of
the
nonlinear
equaEon(s)
using
rst-order
derivaEve
informaEon
(makes
convergence
fast).
Method
converges
to
one
soluEon,
but
mulEple
soluEons
may
exist
that
depend
on
the
chosen
iniEal
guess.
Pseudo-code
for
the
univariate
case:
Input:
iniEal
guess
(x0),
maximum
number
of
iteraEons
(N),
convergence
criterion
(tol)
Output:
soluEon
to
nonlinear
equaEon
n
1
while
(n
N)
fn1
f(xn1)
fn1
f(xn1)
xn
xn1
fn1/fn1
if
(|fn1|
tol)
then
break
end
end
Newtons
Method:
MATLAB
Code
Pseudo-Code
MATLAB
n
1
n = 2;!
while
(n
N)
while (n <= N + 1)!
fn1
f(xn1)
fe = f(x(n - 1));!
fn1
f(xn1)
fpe = fp(x(n - 1));!
xn
xn1
fn1/fn1
x(n) = x(n - 1) - fe/fpe;!
if
(|fn1|
tol)
then
if (abs(fe) <= tol)!
break
break;!
end
end!
n
n
+
1
n = n + 1;!
end
end!
Note
that
arrays
in
MATLAB
are
one-based,
thus
x(1)
x0
Also
note
that
the
funcEon
(equaEon)
and
its
rst-order
derivaEve
must
be
provided
You
can
use
anonymous
funcEons
in
MATLAB
to
avoid
creaEng
an
M-le
for
each
funcEon
Numeric
Example:
MATLAB
Script
f = @(x) x + x^(4/3); % Equation definition!
fp = @(x) 1 + 4/3*x^(1/3); % First-order derivative of f!
x0 = 1; % Initial guess!
N = 10; % Maximum number of iterations!
tol = 1E-6; % Convergence tolerance!
x = zeros(N + 1,1); % Preallocate solution vector where row => iteration!
x(1) = x0; % Set initial guess!
!
% Newton's Method algorithm!
n = 2;!
nfinal = N + 1; % Store final iteration if tol is reached before N iterations!
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; % Store final iteration!
break;!
end!
n = n + 1;!
end!
!
% Plot evolution of the solution!
figure('Color','White')!
plot(0:nfinal - 1,x(1:nfinal),'o-')!
title('Newton''s Method Solution: $f(x) = x + x^{\frac{4}{3}}$','FontSize',
20,'Interpreter','latex')!
xlabel('Iteration','FontSize',16)!
ylabel('$x$','FontSize',16,'Interpreter','latex')!
Numeric
Example:
Plot
MATLAB
BuilEn
FuncEons
For
univariate
nonlinear
equaEons,
you
may
use
the
funcEon
fzero
hTp://www.mathworks.com/help/matlab/ref/fzero.html
For
a
system
of
nonlinear
equaEons,
you
may
use
the
funcEon
fsolve
hTp://www.mathworks.com/help/opEm/ug/fsolve.html
They
are
more
robust
and
rigorous
than
the
simple
implementaEon
shown
in
the
previous
slides