You are on page 1of 6

Mtodos Numricos e Computao para a Economia

Exerccios e solues

Sistemas de equaes no lineares


J.A. Matos, P.B. Vasconcelos (FEP)

Contedo
1 Clculo da
2

2 3 6

2 Zeros de funes 3 Zeros de funes usando fzero

Mestrado em Economia Faculdade de Economia da Universidade do Porto

Mtodos Numricos e Computao para a Economia

-Mestrado em Economia

1 Clculo da

Encontrar uma aproximao da raz quadrada de 2 usando usando para isso os zeros de uma equao no linear.

Soluo
A equao linear mais fcil que satisfaz os requisitos
x2 2 = 0 . Sendo que esta equao tem duas razes 2. Podemos resolver ento este problema

procurando os zeros do polinmio que est acima. Para mostrar mais algoritmos signicativos usamos o formato longo.
format long p = [1 0 2] roots (p)

>> format long >> p = [1 0 2] p= 1 >>


ans

Ou resultado ento:

roots

(p)

1.41421356237310

1.41421356237309

Sistemas de equaes no lineares

2/ 6

Mtodos Numricos e Computao para a Economia

-Mestrado em Economia

2 Zeros de funes
Para cada uma das seguintes funes no lineares encontrar os zeros no intervalo indicado e comparar os resultados obtidos por cada um dos mtodos estudados anteriormente (bisseces sucessivas, Newton e secante).
x3 2x 5 sin x x 0.001 log(x + 2/3)
3

[0, 3] [1, 4] [1, 1] [0, 1] [1, 4] [0, 5] [0, 5]

sign(x 2) |x 2| atan(x) /3
1 x

Soluo
Podemos comear por criar uma funo que compara os resultados obtidos pelos diferentes mtodos. Abaixo est uma verso simples mas podemos adicionar outros testes como calcular a qualidade da soluo obtida comparando com outros mtodos que saibamos dar resultados exactos neste contexto.
function

comp = compara_metodos ( fun , a , b , fprime ) [ xb , kb ] = b i ss e c ( fun , a , b ) ; [ xs , ks ] = secant ( fun , a , b ) ; [ xn , kn ] = newton ( fun , fprime , ( a+b ) / 2 ) ;

end

comp = [ xb , kb ; xs , ks ; xn , kn ] ;

>> compara_metodos (@(x) x^32x 5, 0 , 3 , @(x) 3 x^2 2) ans = 2.0946 2.0946 2.0946 53.0000 14.0000 7.0000

Os resultados que se obtm so ento os seguintes:

>> compara_metodos ( @sin , 1 , 4 , @cos ) ans = 3.1416 3.1416 3.1416 53.0000 7.0000 5.0000
1,

>> compara_metodos (@(x) x^3 0.001 , ans =


Sistemas de equaes no lineares

1 , @(x) x^2)

3/ 6

Mtodos Numricos e Computao para a Economia

-Mestrado em Economia

1.0000 e 01 1.0000 e 01 0.0000 e+00

5.7000 e+01 6.9990 e+03 0.0000 e+00


1,

>> compara_metodos (@(x) x^3 0.001 , warning : d i v i s i o n by zero ans = 0.10000 0.10000
Inf

2 , @(x) x^2)

58.00000 20.00000 6.00000

>> compara_metodos (@(x) log (x+2/3) , 0 , 1 , @(x) 1/(x+2/3)) warning : d i v i s i o n by zero ans = 0.33333 0.33333 0.33333 54.00000 8.00000 5.00000

>> b i s se c (@(x) sign (x 2) sqrt ( abs (x 2)) , 1 , 4) ans = 2 >> [ x , k ] =b is s e c (@(x) sign (x 2) sqrt ( abs (x 2)) , 1 , 4) x= 2 k = 53 >> [ x , k ] = secant (@(x) sign (x 2) sqrt ( abs (x 2)) , 1 , 4) warning : d i v i s i o n by zero x= 2 k = 76 >> compara_metodos (@(x) atan (x) pi /3 , 0 , 5 , @(x) 1/(1+x^2)) warning : d i v i s i o n by zero ans = 1.7321 1.7321 1.7321 55.0000 13.0000 7.0000
1/(xpi )^2)

>> compara_metodos (@(x) 1/(xpi ) , 0 , 5 , @(x) warning : d i v i s i o n by zero warning : d i v i s i o n by zero warning : d i v i s i o n by zero warning : d i v i s i o n by zero warning : d i v i s i o n by zero warning : d i v i s i o n by zero warning : d i v i s i o n by zero ans = 3.1416
I n f I n f

53.0000 1481.0000 514.0000

Vrias notas que podem ser retiradas desta anlise. O mtodo mais rpido sem dvida o mtodo de Newton, quando converge. O mtodo da secante tambm muito

Sistemas de equaes no lineares

4/ 6

Mtodos Numricos e Computao para a Economia

-Mestrado em Economia

rpido, em especial quando comparado com o mtodo das bisseces sucessivas. H casos dignos de nota como por exemplo a raz de x3 0.001 em que foram precisas quase 7000 (!) iteraes para se atingir a preciso pretendida no mtodo da secante enquanto que o mtodos das bisseces sucessivas precisou das mesmas das outras funes e o mtodo de Newton converge ou no dependendo da aproximao inicial. No clculo da raz de sign(x 2) |x 2| o mtodo das bisseces sucessivas foi o mais rpido, mais rpido ainda que o mtodo da tangente e o mtodo de Newton cou preso, sem no entanto divergir. Para ver o que est a acontecer neste caso instrutivo mandar imprimir o valor da aproximao em cada iterao do mtodo. Para fazer isso vamos modicar ligeiramente o mtodo de Newton para retornar toda a rbita (sequncia de aproximaes) e no s o ltimo ponto. Uma vez que sabemos que provavelmente no conseguimos terminar vamos tambm passar um novo argumento de entrada que d o nmero mximo de iteraes permitidas. A nossa nova funo ca ento:
function

end end

[ orbita , k ] = newton_orbita ( f , fprime , x , iter_max ) k = 0; xprev = x 1 . 1 ; while abs (x xprev ) > eps abs (x) && k < iter_max xprev = x ; x = x f (x)/ fprime (x ) ; k = k + 1; orbita (k)=x ;

>> [ x , k ] = newton_orbita (@(x) x= 1.5000 2.5000 k = 10 2.5000 1.5000

O resultado que se obtm ento ao aplicar esta funo ao caso estudado :


sign

(x 2) sqrt ( abs (x 2)) , @(x) 1/(2 sqrt ( abs (x 2))) , 2.5 , 10) 1.5000 2.5000 1.5000 2.5000 1.5000

2.5000

A aproximao vria, com perodo dois, entre duas solues. Fica como sugesto testar estar funo para uma aproximao inicial diferente e ver qual o comportamento da aproximao em cada iterao. Por m de notar que a ltima funo quebra uma das regras implcitas que usamos at agora, que a funo a estudar contnua no intervalo apresentado. Esta funo nem contnua nem tem zeros. Ou seja devemos sempre vericar que os pressupostos so vericados antes de analisarmos qualquer resultado.

Sistemas de equaes no lineares

5/ 6

Mtodos Numricos e Computao para a Economia

-Mestrado em Economia

3 Zeros de funes usando fzero


Aplicar a funo fzero aos casos estudados no exerccio anterior.

Soluo
Basta adaptar o cdigo anterior para passar a conter uma linha onde
function

comp = compara_metodos_fzero ( fun , a , b , fprime ) [ xb , kb ] = b i ss e c ( fun , a , b ) ; [ xs , ks ] = secant ( fun , a , b ) ; [ xn , kn ] = newton ( fun , fprime , ( a+b ) / 2 ) ; [ x ] = f z e r o ( fun , [ a b ] ) ;

end

comp = [ xb , kb ; xs , ks ; xn , kn ; x ] ;

Sistemas de equaes no lineares

6/ 6