1 Receita bsica
Nesta receira bsica, mostraremos como calcular a soluo aproximada de uma sistema no linear via mtodo
de Newton-Raphson prxima a um ponto dado. Ou seja, no explicaremos como obter condies iniciais para
o mtodo.
Primeiro passo
Partimos de um problema de n equaes e n incgnitas e o escrevemos na forma F (x) = 0 onde F : Rn
Rn .
Exemplo: Partimos do sistema
x + cos(x) = y + y 3
x2 + y 2 = 1
E o escrevemos na forma [ ]
x + cos(x) y y 3
F (x, y) =
x2 + y 2 1
Segundo passo Calculamos a matriz jacobina
F1 F1 F1
x1
x2 xn
F2 F2 F2
x1 x2 xn
JF =
. ... ..
.. .
Fn Fn Fn
x1 x2 xn
Exemplo: Partimos da funo do exemplo anterior
[ ]
x + cos(x) y y 3
F (x, y) =
x2 + y 2 1
F F1
1
x y [ ]
1 sen(x) 1 3y 2
JF = =
F F2 2x 2y
2
x y
Segundo passo Construmos o processo iterativo:
{ ( )1 ( (n) )
x(n+1) = x(n) JF x(n) F x
x = condio inicial
(0)
1
[ ] [ ] [ ]
x + cos(x) y y 3 cos(.5) 1.5 0.6224174
F (x, y) = =
x2 + y 2 1 0.25 0.25
F F1
1
x y [ ] [ ] [ ]
1 sen(x) 1 3y 2 1 sen(.5) 4 0.5205745 4
JF = = =
F F2 2x 2y 1 2 1 2
2
x y
Logo
[ ] [ ] [ ]1 [ ]
x(1) x(0) 0.5205745 4 0.6224174
=
y (1) y (0) 1 2 0.25
[ ] [ ] [ ]
.5 0.0485673 0.5485673
= =
1 0.1492836 0.8507164
[ ] [ ] [ ]1 [ ]
x(2) x(1) 0.4785347 3.171155 0.0645556
=
y (2) y (1)1.0971346 1.7014327 0.0246444
[ ] [ ] [ ]
0.5485673 0.0073802 0.5559474
= =
0.8507164 0.0192434 0.8314729
Da mesma forma
[ ] [ ]
x(3) 0.5560170
=
y (3) 0.8311709
[ ] [ ]
x(4) 0.5560171
=
y (4) 0.8311709
[ ] [ ]
x(5) 0.5560171
=
y (5) 0.8311709
O critrio de paragem foi a coincidncia at a stima casa decimal depois da vrgula para ambas incgnitas.
Este critrio heurstico, porm devido rpida convergncia esperado que a soluo esteja correta com
erro inferior a 107 .
2
Implementao no Scilab: Usaremos x(1) para x e x(2) para y.
function y=F(x)
y(1)=x(1)+cos(x(1))-x(2)-x(2)^3
y(2)=x(1)^2+x(2)^2-1
endfunction
function y=J(x)
y(1,1)=1-sin(x(1))
y(1,2)=-1-3*x(2)^2
y(2,1)=2*x(1)
y(2,2)=2*x(2)
endfunction
x=[.5;1]
x=x-J(x)\F(x) (4 vezes)
Observa que esta funo tem um vetor de duas componentes como entrada (x) e uma vetor de duas compo-
nentes como sada (y).
Uma vez implementada a funo, o comando 'derivative()' pode ser usado para aproximar a jacobiana em
em dado ponto. Exemplo:
x=[.5 ;1]
JF=derivative(F,x)
3
Observe que o vetor x deve obrigatriamente ser um vetor coluna.
Terceiro passo Execuo do processo iterativo de Newton-Raphson. Cada passa pode ser executado em
uma nica linha:
x=[.5 ;1]
x=x-derivative(F,x)\F(x) X 5 vezes
function w=g(x,y)
w=x^2+y^2-1
endfunction
Segundo passo Denimos a regio do grco. Neste caso, como sabemos que a funo g descreve um
crculo de raio 1 centrado na origem. Pelo que conveniente escolher a regio [1, 1] [1, 1] para traar o
grco.
Usamos o comando 'contour':
contour([-1:.1:1],[-1:.1:1],f,[0 0])
contour([-1:.1:1],[-1:.1:1],g,[0 0])
O termo '[0 0]' indica que apenas a curva de nvel de valor 0 deve ser traada.
f (x, y) = 20
1 + x2 + y 2
Calculamos o gradiente:
40(x 1)e(x1) 2(y2) e(x1) 2(y2)
2 2 2 2
40x
1 + x2 + y 2 (1 + x2 + y 2 )2
G(x, y) =
80(y 1)e(x1)2 2(y2)2 e(x1) 2(y2)
2 2
40y
1 + x2 + y 2 (1 + x2 + y 2 )2
4
Segundo passo Aplica-se a receita bsica ou a receita com derivada numrica ao sistema G(x) = 0 e
obtm-se x 0.8333410, y 1.8181909
f (x, y) = 20
1 + x2 + y 2
Observamos que a matriz jacobiana JG associada ao gradiente G(x) = f (x) a matriz hessiana de f e
usamos o comando 'derivative' para calcular simultaneamente a hessiana e o gradiente.
Segundo passo Implementamos no Scilab a funo f : Rn R.
Exemplo:
function w=f(v)
x=v(1)
y=v(2)
w=20*(exp(-(x-1)^2-2*(y-2)^2))/(1+x^2+y^2)
endfunction
Terceiro passo Implementamos no Scilab o processo iterativo de Newton-Raphson:
x(n+1) = x(n) Hf1 (xn )f (xn )
Exemplo:
v=[1;2]
[G,H]=derivative(f,v,H_form='blockmat');v=v-H\G' X 4
Observe que o Scilab produz o gradiente na forma de um vetor linha, pelo que necessrio transp-lo para
(G') para resolver o sistema Hx = G com o comando H\G .
f (x, y) = 20
1 + x2 + y 2
Primeiro passo Denimos a funo R R R:
5
function w=f(x,y)
w=20*(exp(-(x-1)^2-2*(y-2)^2))/(1+x^2+y^2)
endfunction
Segundo passo Denimos a regio do grco. Neste caso, como sabemos que o numerador da funo f
tem um mximo em x = 1 e y = 2. Pelo que escolhemos a regio [0, 2] [1, 3] para traar o grco. Deve-se
escolher os nveis a serem traados. Por inspeo da funo, vemos que conveniente traar valores positivos
menores que 4.
Usamos o comando 'contour':
contour([0:.025:2],[1:.025:3],f,[0:.25:4])
O termo '[0:.25:4]' indica que devem ser traadas as curvas de nvel de valores entre 0 e 4 com passo de
0.25.