Anda di halaman 1dari 6

Receitas para soluo de sistemas de equaes usando o mtodo de Newton-Raphson no Scilab

Prof. Fabio Azevedo - Clculo Numrico - MAT01169

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)

Exemplo: Procuremos a soluo do problema apresentado em exemplo prxima a x = .5 e y = 1.


Iniciamos o mtodo com x(0) = .5 e y (0) = 1

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

Repetindo o processo, temos:

[ ] [ ] [ ]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)

2 Receita com derivada numrica


Nesta receira, mostraremos como calcular a soluo aproximada de uma sistema no linear via mtodo de
Newton-Raphson prxima a um ponto dado usando o Scilab para obter. Assim como na receita bsica no
explicaremos como obter condies iniciais para o mtodo.
Primeiro passo Idntico ao da receita bsica, o qual repetimos para convenincia do leitor.
Partimos de um problema de n equaes e n incgnitas e o escrevemos na forma F (x) = 0 onde F : Rn
R .
n

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 Para calcular a matriz jacobiana numericamente com ajuda da funo 'derivative()',
necessrio implementar a funo F no Scilab como uma funo que recebe como entrava um vetor e retorna
um vetor de sada. Para tal sugerimos o seguinte cdigo:
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

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

3 Receita de grco implcito


Nesta receita, mostraremos como traar o grco de curvas descritas por equaes do tipo f (x, y) = 0.
Exemplo: Traaremos as curvas correspondentes s funes do exemplo, ou seja:
f (x, y) = x + cos(x) y y 3
g(x, y) = x2 + y 2 1
Primeiro passo Denimos as funes R R R:
function w=f(x,y)
w=x+cos(x)-y-y^3
endfunction

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.

4 Receita bsica para problemas de otimizao


Nesta receira bsica, mostraremos como encontrar numericamente um ponto crtico de uma funo 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 uma funo f : Rn R G(x) = f (x) = 0 onde G : Rn Rn .
Exemplo: Queremos encontrar o ponto de mximo da funo
e(x1) 2(y2)
2 2

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

5 Receita para problemas de otimizao com clculo numrico do


gradiente
Nesta receira bsica, mostraremos como encontrar numericamente um ponto crtico de uma funo via mtodo
de Newton-Raphson prxima a um ponto dado. Ou seja, no explicaremos como obter condies iniciais para
o mtodo. Em contraste com a receita anterior, o gradiente ser aproximado numericamente.
Ateno: O uso de aproximao numrica do gradiente pode deteriorar a qualidade da
soluo.
Primeiro passo
Partimos de uma funo f : Rn R G(x) = f (x) = 0 onde G : Rn Rn .
Exemplo: Queremos encontrar o ponto de mximo da funo
e(x1) 2(y2)
2 2

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 .

6 Receita de grco de curvas de nvel


Nesta receita, mostraremos como traar o grco de curvas de nvel descritas por funes do tipo f (x, y).
Este tipo de grco til em problemas de otimizao.
Exemplo: Traaremos as curvas de nvel correspondentes funo do exemplo anterior, ou seja:
e(x1) 2(y2)
2 2

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.