function y=f3(x) y = x.^3-5*x+1;
Pretende-se calcular uma aproximação para a menor raiz positiva da equação
,pelos métodos de Newton-Raphson e ponto fixo.
a) Localize um intervalo que contenha a menor raiz positiva da equação dada
Determinar as raízes de é equivalente a determinar os
pontos que intersectam as funções e .
Graficamente podemos constatar que o intervalo I=[0, 0.5] contém a menor raiz positiva.
Podemos determinar o zero de uma função ou raiz da equação 0 utilizando a função fzero do MatLab. Para programar a função f(x) podemos utilizar a função inline na linha de comandos ou criar e salvar a função num ficheiro externo.
>> f3 = inline(‘x.^3-5*x+1'); ou no ficheiro f3.m
>> fzero('f3', [0,0.5]) ([0, 0.5] é o intervalo onde vai ser determinado o zero)
ans =
0.201639675723405
Como a função f(x) é um polinómio de grau 3 podemos alternativamente utilizar a função
roots para determinar as raízes de um polinómio.
>> roots([1 0 -5 1]) ([1 0 -5 1] representam os 4 coeficientes do polinómio de grau 3 , 5 1)
ans =
Teorema: (condições suficientes de convergência do método de Newton-Raphson): Sejafuma funçãoC2[a, b] .
Se forem satisfeitas as condições: 1) f(a) . f(b) < 0
2) f '(x) ≠ 0 , ∀ x ∈ [a, b] 3) f ‘’(x) ≠ 0 , ∀ x ∈ [a, b]
4) ( )
) ´( ) ( a b a f a
f < − e
) ( ) ´( ) ( a b b f b f − <
então ∀ x0 ∈ [a, b] o método de Newton-Raphson converge para o único zero α de f(x) em I= [a, b] .
b) Considerando como ponto inicial x
0=0.1, calcule uma aproximação do
menor zero positivo da função f(x) = x
3- 5x + 1 em [0, 0.5] pelo método de
Newton-Raphson utilizando como critério de paragem que |f(x
k) | < 10
-5.
f(x) = x3-5 x+1
Requer:
f ∈ C2 ([0, 0.5])
1) f(0) x f(0.5) < 0
f(0) = 1, f(0.5)= -1.375
2) f’(x) ≠ 0, ∀ x ∈ [0, 0.5] 3) f’’(x) ≠ 0, ∀ x ∈ [0, 0.5]
f’(x)= 3 x2 – 5 < 0 ∀ x ∈ [0, 0.5] f’’(x)= 6 x > 0 ∀ x ∈ (0, 0.5] (não muda de sinal)
4) a) 0.2 0.5 5 1 ) 0 ´( ) 0
( = ≈ <
f f
e b) 0.3235 0.5 4.250 -1.375 -) 5 . 0 ´( ) 5 . 0
( = ≈ <
f f
Como todas as condições são satisfeitas, podemos concluir que o método de Newton-Raphson converge para a única raiz em I= [0, 0.5] tomando como solução
Método de Newton-Raphson
Aproximação Inicial: x0= 0.1
Fórmula Iteradora:
,
1
,
2
,...
)
´(
)
(
1 1
1
−
=
=
− −
−
k
x
f
x
f
x
x
k k k
k
(f(x) = x3 – 5 x + 1, f’(x) = 3 x2 - 5)
Critério de Paragem: |f(xk )| < 10-5
Iter. Abcissa do ponto de intersecção da tangente com
o eixo x
Valor da função em xk
f(x) = x3 – 5 x + 1
Valor da 1ª derivada da função em xk
f’(x) = 3 x2 - 5
|f(xk)|
< 10-5 ?
k xk f(xk) f’(xk) | f(xk) |
0 0.1 0.501 -4.97 0.501
1 0.200804828973843 0.00407282377878 -4.879032261982 0.00407283 2 0.201639589549319 0.00000042035929 -4.87802442778 0.00000042 < 0.00001 PARAR !!!
Foram necessárias 2 iterações para aproximar a menor raiz positiva com a
tolerância desejada
α ≈ 0.201639675723405
(valor calculado com a função fzero do Matlab) x2 = 0.201639589549319 com erro absoluto:
|e 2 |= |α - x2| = 0.86174086006 x 10-7 < 0.5 x 10-6
IMPORTANTE:
O método de Newton-Raphson tem ordem de convergência linear
se α é um zero duplo, i.e., se f’(α)=0, f’’(α) ≠ 0
O método de Newton-Raphson tem ordem de convergência quadrática
se α é um zero simples, i.e., se f’(α) ≠ 0
c) Diga, justificando qual a ordem de convergência da sequência de
iterações obtida na alinha b) para aproximar a menor raiz positiva da
equação dada
Considerando para a menor raiz positiva α o valor aproximado pelo método de
Newton-Raphson x2 temos que f’(α) ≈ f’(x2) =- 4.878 ≠ 0
Como α é um zero simples de f(x) (f’(α)≠ 0), então a sucessão de aproximações {xk}
gerada pelo método de Newton-Raphson para qualquer aproximação inicial x0 em [0,
0.5] converge para α (a menor raiz positiva da equação dada) com ordem de
convergência quadrática e razão de convergência C= 0.1240:
0.5 0.2480 0.1240
8780 . 4
| 2098 . 1 2 1 ) ( '
) ( '' 2 1
lim 12 = × =
− = =
= +
∞
→
α
α
f f
e e C
k k k
2 3 (5 1)
3 5 )
( '
− =
x x
g
3 5 1 )
(x = x− g
d) Encontre uma função iteradora g(x) que torne o método do ponto fixo
convergente na aproximação do menor zero positivo da função
f(x) = x
3- 5x + 1 no intervalo [0, 0.5]
Definição: Um ponto fixo de uma função g(x) é um número real α tal que α=g (α).
Podemos encontrar uma função g(x) tal que f(x) = 0⇔x = g(x)
(g(x) é chamada função iteradora )
Função iteradora para aproximar a única raiz no intervalo I=[0, 0.5]
3 3
3
−
5
+
1
=
0
⇔
=
5
−
1
⇒
(
)
=
5
−
1
x
x
g
x
x
x
x
Teorema: (condições de convergência do método de ponto fixo)
Seja α uma raiz da equação f(x) = 0, isolada num intervalo I=[a,b].
Seja g(x) ∈ C’(I) uma função iteradora para a equação f(x) = 0.
se:
i)
g
(I) ⊂ I (g
(x) ∈ I, ∀x∈ I)ii) 0 < M= max |
g
’(x
)| < 1 (g é contractiva)
x
∈ Ientão ∀
x
0∈
I
2
5 3 ) (
' x x
g =
5 1 )
(
3+ = x x g
Como g'(x) não é contínua em I (para x=0.2 g'(x) está indefinida) não podemos
usar esta função iteradora em I=[0, 0.5].
Temos que procurar uma outra função iteradora alternativa:
5
1
)
(
5
1
0
1
5
3
3 3
+
=
⇒
+
=
⇔
=
+
−
x
x
g
x
x
x
x
Graficamente verifica-se que g(x) e g'(x) são contínuas em I. Além disso:
i) g(x) ∈ [0.2, 0.225] ⊂ I=[0, 0.5], ∀ x ∈ I
ii) 0 < M = max |g’(x)| < 1
Como g’(x) é monótona crescente então M= |g’(0.5) | =0.15 < 1
Então, ∀ x0 ∈ I=[0, 0.5] a fórmula iteradora definida por:
5
1
3 1
+
=
k−k
x
x
; k = 1, 2, …,5 1 )
(
3+ = x x g
e) Considerando como ponto inicial x
0=0.1, calcule uma aproximação do
menor zero positivo da função f(x) = x
3- 5x + 1 em [0, 0.5] utilizando a
iteradora g(x
k) encontrada na alinha anterior e usando como critério de
paragem |f(x
k) | < 10
-5.
Na alínea anterior foi provado que uma função iteradora g(x) convergente para aproximar a raiz em [0, 0.5] é
Método do Ponto-Fixo
Aproximação Inicial: x0= 0.1
Fórmula Iteradora:
,
1
,
2
,...
5
1
3
1
+
=
=
−k
x
x
kk
Critério de Paragem: |f(xk)| < 10-5
k xk = g(xk-1) |f(xk)|
0 0.1 0.501
1 0.200200000000000 0.007024024008
2 0.201604804801600 0.000170101940274
3 0.201638825189655 0.000004148924756
< 0.00001 PARAR !!!
Foram necessárias 3 iterações para aproximar a raiz com a tolerância desejada
Tomando como valor exacto, o valor obtido com a função fzero do MatLab
α = 0.20163967572405 (tomando o valor obtido em MatLab com fzero)
x3 = 0.201638825189655 com erro absoluto:
|e 3 |= |α - x3| ≈ 0.85053375 x 10-6≤ 0.5 x 10-5
A aproximação de α encontrada pelo método do ponto fixo tem pelo menos 5 casas
IMPORTANTE:
O método do ponto fixo tem convergência linear se g’(α) ≠ 0
O método do ponto fixo tem convergência quadrática se g’(α) = 0, g’’(α) ≠ 0
5 1 )
(
3+ = x x
g 2
5 3 ) (
' x x
g =
f) Diga, justificando qual a ordem de convergência da sequência de
iterações obtida pelo método do ponto fixo
Seja α o ponto fixo de em I=[0, 0.5] com
Como:
g’(x) ∈ [0, 0.15] (g(x) monótona cresce em I=[0, 0.5] , g’(0)=0 e g’(0.5)=0.15)
α∈ (0, 0.5)
⇒| g’(α) | ≠ 0
Assim, para qualquer aproximação inicial x0próxima da raiz em [0, 0.5], a sucessão
{xk} gerada pela fórmula iteradora
,
1
,
2
,...
5
1
3
1
+
=
=
x
−k
x
kk converge para α com
ordem de convergência linear e razão de convergência C = |g’(α)|.
Considerando para a menor raiz positiva α o valor aproximado x3 temos que
!
1
)
(
1
α
g
5 1 ) ( 3+ = x x g 5 1 ) ( 3+ = x x g
g) Compare as aproximações obtidas e exponha as conclusões a que chegou
tendo em conta a ordem de convergência de cada método
Método Ordem de convergência
lim |e k+1| = C |ek|p
k→∞
se p=1, linear se p=2, quadrática
Nº iter.
Valor aproximado xk
α ≈0.201639675723405 (valor obtido com a função
fzero do Matlab)
Erro absoluto |e k|
associado à aproximação
obtida
Newton Raphson
linear se zero duplo
(f’(α)=0, f’’(α)≠0)
quadrática se zero simples
(f’(α)≠0)
Como o zero que
corresponde à menor raiz positiva é simples então a convergência é quadrática com razão de convergência
0.1240 ) ( ' ) ( '' 2 1 ≈ = α α f f C
(tomando como α a
aproximação x2 obtida pelo método de N-R)
Assim, para k=1,2,…:
2 1 0.1240 k
k e
e + ≈ ×
2 x2=0.20163958954931 |e 2| ≤ 0.5 x 10-6
(6 casas decimais correctas)
Ponto Fixo x=g(x)
linear se g’(α) ≠0
quadrática se g’(α)=0,
g’’(α) ≠0 usando a função iteradora
como |g’(α)| ≠ 0, então a convergência é linear com razão de convergência
0.2016 )
( 1 ≈ = g α
C
(tomando como α a aproximação x3 obtida pelo método do ponto fixo) Assim, para k=1,2,…:
k
k
e
e
+1≈
0.2016
×
3 x3=0.20163882518966 |e 3| ≤ 0.5 x 10-5
(5 casas decimais correctas)
Como neste exemplo o método de N-R tem convergência quadrática e o do ponto fixo (com a função iteradora aqui usada) tem convergência linear, a sucessão gerada pelo método de N-R converge mais rapidamente para a menor raiz positiva da equação dada.
function [y, y1] = f3(x) y = x.^3-5*x+1;
y1= 3*x.^2-5;
function [y, y1] = f3(x)
y = polyval([1,0,-5,1], x); y1= polyval([3,0,-5], x);
function [y, y1] = f3(x)
y = polyval([1,0,-5,1], x); y1= polyval([3,0,-5], x);
Implementação em MatLab
Considerando como ponto inicial x
0=0.1, calcule uma aproximação do menor
zero positivo da função f(x) = x
3- 5x + 1 em [0, 0.5] pelo método de
Newton-Raphson utilizando como critério de paragem que |f(x
k) | < 10
-5.
Em Matlab podemos implementar o método de Newton utilizando a rotina newton1
do pacote de MN:
>> newton1('f3', 0.1, 0, 10^-5, 20)
A função f3 deve retornar os valores de y(x) e de y’(x). No caso de funções polinomiais é melhor utilizar a função polyval
Podemos também implementar duas iterações do método de Newton a partir da
aproximação inicial x0=0.1 através deste simples programa (script) em Matlab:
A função f3 deve retornar os valores de y(x) e de y’(x).
Ao executar o programa anterior obtemos
format long;
x0=0.1;
[y, dy]=f3(x0);
x1=x0-y/dy
[y, dy]=f3(x1); x2=x1-y/dy
x1 =
0.200804828973843
x2 =
e) Considerando como ponto inicial x
0=0.1, calcule uma aproximação do
menor zero positivo da função f(x) = x
3- 5x + 1 em [0, 0.5] de tal forma que
|f(x
k) | < 10
-5utilizando a iteradora convergente
,...
2
,
1
,
5
1
3
1
+
=
=
x
−k
x
kk
• Implementação na Linha de Comandos
• Implementação construindo um programa (script) em Matlab
Podemos também construir um script em MatLab que nos permita determinar todas
as aproximações utilizando o critério de paragem |f(xk)| < 10-5
>> g=inline('(x.^3+1)/5'); >> x0=0.1;
>> x1=g(x0)
x1 =
2.117911792127447
>> x2=g(x1)
x2 =
2.124546354697556
>> x3=g(x2)
x3 =
2.126993323960139
% dados de entrada f=inline('x.^3-5*x+1'); g=inline('(x.^3+1)/5'); x=0.1;
tol=1e-5
% processo iterativo for k=1:1000
x=g(x);
if (abs(f(x))< tol)
break; % foi satisfeito o critério de paragem
end
end
Para visualizar todas as aproximações, basta apenas enviar uma mensagem com o
comando display após de ser calculada cada aproximação.
• Implementação construindo a nossa própria função
Para que este algoritmo possa ser utilizado com outras funções f e g e outros dados, podemos construir uma função em MatLab com os seguintes parâmetros de entrada:
• a função f(x)
• a função iteradora g(x)
• a solução inicial x0
•
a tolerância desejada (segundo o o critério |f(xk) | < 10-5
• o número máximo de iterações kmax
e que como saída retorne o valor da aproximação encontrada.
% dados de entrada f=inline('x.^3-5*x+1'); g=inline('(x.^3+1)/5'); x=0.1;
tol=1e-5
% processo iterativo for k=1:1000
x=g(x);
display(['x(', num2str(k),')= ', num2str(x,8)]);
if (abs(f(x))< tol)
break; % foi satisfeito o critério de paragem
end
end
display('A aproximação encontrada é'); x
function x = pfixo(f, g, x0, tol, kmax)
x=x0;
for k=1:kmax x=g(x);
display(['x(', num2str(k),')= ', num2str(x,8)]);
if (abs(f(x))< tol)
break; % foi satisfeito o critério de paragem
end
end
if (k==kmax & f(x)>=tol)
disp('O ponto fixo não foi encontrado com a tolerância
desejada.')
else
display('A aproximação encontrada é'); x
Uma vez construída a função, esta deve ser guardada num ficheiro com o mesmo
nome, pfixo.m. Depois, pode ser chamada para execução na janela do comando do
MatLab:
Como resultado obtém-se:
• Implementação utilizando a função pontofixo do pacote de rotinas de MN
A função pontofixo pode ser chamada para execução na janela do comando do MatLab:
>> f=inline('x.^3-5*x+1'); >> g=inline('(x.^3+1)/5'); >> pfixo(f,g,0.1,1e-5,1000)
x(1)= 0.2002 x(2)= 0.2016048 x(3)= 0.20163883
A aproximação encontrada é x =
0.201638825189655
>> f=inline('x.^3-5*x+1');
>> g=inline('(x.^3+1)/5');