Buscar

Aula 2 - Raízes

Prévia do material em texto

Computação Numérica
Aula de Laboratório 2: Raízes
Professor Filipe Taveiros
Cálculo de raízes
Sejam as funções:
𝑓 𝑥 = 𝑥 − 10
𝑓 𝑥 = 2𝑥2 − 20𝑥 − 10
𝑓 𝑥 = 1.2𝑥3 + 2𝑥2 − 20𝑥 − 10
𝑓 𝑥 = 𝑥 − 2𝑒−𝑥
Determine o valor de 𝑥 tal que 𝑓(𝑥) = 0
Cálculo de raízes
𝑓 𝑥 = 𝑥 − 10
0 = 𝑥 − 10
𝑥 = 10
Cálculo de raízes
𝑓 𝑥 = 2𝑥2 − 20𝑥 − 10
0 = 2𝑥2 − 20𝑥 − 10
𝑥 =
−𝑏 ± 𝑏2 − 4𝑎𝑐
2a
𝑎 = 2 𝑏 = −20 𝑐 = −10
𝑥1 = 10.477
𝑥2 = −0.477
Cálculo de raízes
𝑓 𝑥 = 1.2𝑥3 + 2𝑥2 − 20𝑥 − 10 ? ?
𝑓 𝑥 = 𝑥 − 2𝑒−𝑥 ? ?
Cálculo de raízes
𝑓 𝑥 = 1.2𝑥3 + 2𝑥2 − 20𝑥 − 10
Cálculo de raízes
𝑓 𝑥 = 𝑥 − 2𝑒−𝑥
Método da bisseção
1. Encontrar um intervalo [a,b] que contenha a raiz
2. Seccionar o intervalo no seu ponto médio
𝑥 =
𝑎 + 𝑏
2
3. Se x for uma solução aceitável para o valor da raiz,
pare.
4. Senão, use o Teorema para verificar se a raiz está em
[a,x] ou em [x,b]. Redefina o intervalo [a,b] e volte
ao passo 1.
5. Verificar a tolerância em relação ao passo anterior
Método da bisseção
Scinotes
Método da bisseção
//Entradas: a,b,tolerância,máximo de iterações 
Scinotes
Método da bisseção
//Entradas: a,b,tolerância,máximo de iterações 
//Saídas: x (raiz), número de iterações 
Scinotes
Método da bisseção
//Entradas: a,b,tolerância,máximo de iterações 
//Saídas: x (raiz), número de iterações 
function [x,N] = bissecao(a,b,p,Nmax)
Scinotes
Método da bisseção
//Entradas: a,b,tolerância,máximo de iterações 
//Saídas: x (raiz), número de iterações 
function [x,N] = bissecao(a,b,p,Nmax)
N=0; erro=1; x = a;
Scinotes
Método da bisseção
//Entradas: a,b,tolerância,máximo de iterações 
//Saídas: x (raiz), número de iterações 
function [x,N] = bissecao(a,b,p,Nmax)
N=0; erro=1; x = a;
while (erro>10^(-p) & N<Nmax)
Scinotes
Método da bisseção
//Entradas: a,b,tolerância,máximo de iterações 
//Saídas: x (raiz), número de iterações 
function [x,N] = bissecao(a,b,p,Nmax)
N=0; erro=1; x = a;
while (erro>10^(-p) & N<Nmax)
N = N+1; xa = x; x = (a+b)/2;
Scinotes
Método da bisseção
//Entradas: a,b,tolerância,máximo de iterações 
//Saídas: x (raiz), número de iterações 
function [x,N] = bissecao(a,b,p,Nmax)
N=0; erro=1; x = a;
while (erro>10^(-p) & N<Nmax)
N = N+1; xa = x; x = (a+b)/2;
if (func(x)*func(a)>0)
Scinotes
Método da bisseção
//Entradas: a,b,tolerância,máximo de iterações 
//Saídas: x (raiz), número de iterações 
function [x,N] = bissecao(a,b,p,Nmax)
N=0; erro=1; x = a;
while (erro>10^(-p) & N<Nmax)
N = N+1; xa = x; x = (a+b)/2;
if (func(x)*func(a)>0)
a = x;
Scinotes
Método da bisseção
//Entradas: a,b,tolerância,máximo de iterações 
//Saídas: x (raiz), número de iterações 
function [x,N] = bissecao(a,b,p,Nmax)
N=0; erro=1; x = a;
while (erro>10^(-p) & N<Nmax)
N = N+1; xa = x; x = (a+b)/2;
if (func(x)*func(a)>0)
a = x;
else
Scinotes
Método da bisseção
//Entradas: a,b,tolerância,máximo de iterações 
//Saídas: x (raiz), número de iterações 
function [x,N] = bissecao(a,b,p,Nmax)
N=0; erro=1; x = a;
while (erro>10^(-p) & N<Nmax)
N = N+1; xa = x; x = (a+b)/2;
if (func(x)*func(a)>0)
a = x;
else
b = x;
Scinotes
Método da bisseção
//Entradas: a,b,tolerância,máximo de iterações 
//Saídas: x (raiz), número de iterações 
function [x,N] = bissecao(a,b,p,Nmax)
N=0; erro=1; x = a;
while (erro>10^(-p) & N<Nmax)
N = N+1; xa = x; x = (a+b)/2;
if (func(x)*func(a)>0)
a = x;
else
b = x;
end
Scinotes
Método da bisseção
//Entradas: a,b,tolerância,máximo de iterações 
//Saídas: x (raiz), número de iterações 
function [x,N] = bissecao(a,b,p,Nmax)
N=0; erro=1; x = a;
while (erro>10^(-p) & N<Nmax)
N = N+1; xa = x; x = (a+b)/2;
if (func(x)*func(a)>0)
a = x;
else
b = x;
end
erro = abs((x-xa)/x);
Scinotes
Método da bisseção
//Entradas: a,b,tolerância,máximo de iterações 
//Saídas: x (raiz), número de iterações 
function [x,N] = bissecao(a,b,p,Nmax)
N=0; erro=1; x = a;
while (erro>10^(-p) & N<Nmax)
N = N+1; xa = x; x = (a+b)/2;
if (func(x)*func(a)>0)
a = x;
else
b = x;
end
erro = abs((x-xa)/x);
end
Scinotes
Método da bisseção
//Entradas: a,b,tolerância,máximo de iterações 
//Saídas: x (raiz), número de iterações 
function [x,N] = bissecao(a,b,p,Nmax)
N=0; erro=1; x = a;
while (erro>10^(-p) & N<Nmax)
N = N+1; xa = x; x = (a+b)/2;
if (func(x)*func(a)>0)
a = x;
else
b = x;
end
erro = abs((x-xa)/x);
end
endfunction
Scinotes
Método da bisseção
Scilab 5.5.1 Console
Método da bisseção
-->[x,N]=bissecao(-6,-4,3,30)
Scilab 5.5.1 Console
Método da bisseção
-->[x,N]=bissecao(-6,-4,3,30)
!--error 4 
Variável indefinida: func
at line 9 of function bissecao called by : 
[x,N]=bissecao(-6,-4,3,30)
Scilab 5.5.1 Console
Método da bisseção
-->[x,N]=bissecao(-6,-4,3,30)
!--error 4 
Variável indefinida: func
at line 9 of function bissecao called by : 
[x,N]=bissecao(-6,-4,3,30)
-->deff('y = func(x)','y = 1.2*x^3+2*x^2-20*x-10')
Scilab 5.5.1 Console
Método da bisseção
-->[x,N]=bissecao(-6,-4,3,30)
!--error 4 
Variável indefinida: func
at line 9 of function bissecao called by : 
[x,N]=bissecao(-6,-4,3,30)
-->deff('y = func(x)','y = 1.2*x^3+2*x^2-20*x-10')
Scilab 5.5.1 Console
Método da bisseção
-->[x,N]=bissecao(-6,-4,3,30)
!--error 4 
Variável indefinida: func
at line 9 of function bissecao called by : 
[x,N]=bissecao(-6,-4,3,30)
-->deff('y = func(x)','y = 1.2*x^3+2*x^2-20*x-10')
-->[x,N]=bissecao(-6,-4,3,30)
Scilab 5.5.1 Console
Método da bisseção
-->[x,N]=bissecao(-6,-4,3,30)
!--error 4 
Variável indefinida: func
at line 9 of function bissecao called by : 
[x,N]=bissecao(-6,-4,3,30)
-->deff('y = func(x)','y = 1.2*x^3+2*x^2-20*x-10')
-->[x,N]=bissecao(-6,-4,3,30)
N =
9. 
x =
- 4.7851562
Scilab 5.5.1 Console
Método da bisseção
Scilab 5.5.1 Console
Método da bisseção
-->[x,N]=bissecao(2,4,3,30)
Scilab 5.5.1 Console
Método da bisseção
-->[x,N]=bissecao(2,4,3,30)
N =
10. 
x =
3.6035156 
Scilab 5.5.1 Console
Método da bisseção
Método da bisseção
P: E se eu quiser usar o método para outra função?
Método da bisseção
Scilab 5.5.1 Console
P: E se eu quiser usar o método para outra função?
R: Use o comando deff para mudar a função.
Método da bisseção
-->deff('y = func(x)','y = x-2*exp(-x)')
Scilab 5.5.1 Console
P: E se eu quiser usar o método para outra função?
R: Use o comando deff para mudar a função.
Método da bisseção
-->deff('y = func(x)','y = x-2*exp(-x)')
Aviso: redefinindo a função: func 
Utilize funcprot(0) para evitar esta mensagem
Scilab 5.5.1 Console
P: E se eu quiser usar o método para outra função?
R: Use o comando deff para mudar a função.
Método da bisseção
Método da bisseção
P: Como escolher o intervalo?
Método da bisseção
Scilab 5.5.1 Console
P: Como escolher o intervalo?
R: Plote a função e veja onde há uma raiz.
Método da bisseção
-->a = -1:0.01:2; //Vetor de 
abscissas
Scilab 5.5.1 Console
P: Como escolher o intervalo?
R: Plote a função e veja onde há uma raiz.
Método da bisseção
-->a = -1:0.01:2; //Vetor de 
abscissas
-->plot(a,func(a))
Scilab 5.5.1 Console
P: Como escolher o intervalo?
R: Plote a função e veja onde há uma raiz.
Método da bisseção
-->a = -1:0.01:2; //Vetor de 
abscissas
-->plot(a,func(a))
Scilab 5.5.1 ConsoleP: Como escolher o intervalo?
R: Plote a função e veja onde há uma raiz.
Método da bisseção
Scilab 5.5.1 Console
P: Como escolher o intervalo?
R: Plote a função e veja onde há uma raiz.
Método da bisseção
-->plot(a,func(a),a,0*a)
Scilab 5.5.1 Console
P: Como escolher o intervalo?
R: Plote a função e veja onde há uma raiz.
Método da bisseção
-->plot(a,func(a),a,0*a)
Scilab 5.5.1 Console
P: Como escolher o intervalo?
R: Plote a função e veja onde há uma raiz.
Método da bisseção
Método da bisseção
P: E para testar o resultado?
Método da bisseção
Scilab 5.5.1 Console
P: E para testar o resultado?
R: Avalie a função na raiz encontrada. Quanto mais
próximo de zero, melhor.
Método da bisseção
-->func(x)
Scilab 5.5.1 Console
P: E para testar o resultado?
R: Avalie a função na raiz encontrada. Quanto mais
próximo de zero, melhor.
Método da bisseção
-->func(x)
ans =
0.0517225 
Scilab 5.5.1 Console
P: E para testar o resultado?
R: Avalie a função na raiz encontrada. Quanto mais
próximo de zero, melhor.
Método de Newton
1. Analisar a função para determinar um valor de 
x0 próximo a raiz.
2. Encontrar a derivada de f(x).
3. Calcular estimativas consecutivas para a raiz 
usando a expressão: 
𝑥𝑘+1 = 𝑥𝑘 −
𝑓 𝑥𝑘
𝑓′(𝑥𝑘)
4. Repetir o passo 3 até que se tenha obtido a 
precisão desejada.
Método de Newton
Scinotes
Método de Newton
//Entradas: chute, tolerância, máximo de iterações 
Scinotes
Método de Newton
//Entradas: chute, tolerância, máximo de iterações 
//Saídas: x (raiz), número de iterações 
Scinotes
Método de Newton
//Entradas: chute, tolerância, máximo de iterações 
//Saídas: x (raiz), número de iterações 
function [x,N] = newton(x,p,Nmax)
Scinotes
Método de Newton
//Entradas: chute, tolerância, máximo de iterações 
//Saídas: x (raiz), número de iterações 
function [x,N] = newton(x,p,Nmax)
N=0; erro=1;
Scinotes
Método de Newton
//Entradas: chute, tolerância, máximo de iterações 
//Saídas: x (raiz), número de iterações 
function [x,N] = newton(x,p,Nmax)
N=0; erro=1;
while (erro>10^(-p) & N<Nmax)
Scinotes
Método de Newton
//Entradas: chute, tolerância, máximo de iterações 
//Saídas: x (raiz), número de iterações 
function [x,N] = newton(x,p,Nmax)
N=0; erro=1;
while (erro>10^(-p) & N<Nmax)
N = N+1; xa=x;
Scinotes
Método de Newton
//Entradas: chute, tolerância, máximo de iterações 
//Saídas: x (raiz), número de iterações 
function [x,N] = newton(x,p,Nmax)
N=0; erro=1;
while (erro>10^(-p) & N<Nmax)
N = N+1; xa=x;
x = xa - func(xa)/dfunc(xa);
Scinotes
Método de Newton
//Entradas: chute, tolerância, máximo de iterações 
//Saídas: x (raiz), número de iterações 
function [x,N] = newton(x,p,Nmax)
N=0; erro=1;
while (erro>10^(-p) & N<Nmax)
N = N+1; xa=x;
x = xa - func(xa)/dfunc(xa);
erro = abs((x-xa)/x);
Scinotes
Método de Newton
//Entradas: chute, tolerância, máximo de iterações 
//Saídas: x (raiz), número de iterações 
function [x,N] = newton(x,p,Nmax)
N=0; erro=1;
while (erro>10^(-p) & N<Nmax)
N = N+1; xa=x;
x = xa - func(xa)/dfunc(xa);
erro = abs((x-xa)/x);
end
Scinotes
Método de Newton
//Entradas: chute, tolerância, máximo de iterações 
//Saídas: x (raiz), número de iterações 
function [x,N] = newton(x,p,Nmax)
N=0; erro=1;
while (erro>10^(-p) & N<Nmax)
N = N+1; xa=x;
x = xa - func(xa)/dfunc(xa);
erro = abs((x-xa)/x);
end
endfunction
Scinotes
Método de Newton
Scilab 5.5.1 Console
Método de Newton
-->[x,N]=newton(2,3,30)
Scilab 5.5.1 Console
Método de Newton
-->[x,N]=newton(2,3,30)
!--error 4 
Variável indefinida: dfunc
at line 5 of function newton called by : 
[x,N]=newton(2,3,30)
Scilab 5.5.1 Console
Método de Newton
-->[x,N]=newton(2,3,30)
!--error 4 
Variável indefinida: dfunc
at line 5 of function newton called by : 
[x,N]=newton(2,3,30)
𝑓 𝑥 = 1.2𝑥3 + 2𝑥2 − 20𝑥 − 10
Scilab 5.5.1 Console
Método de Newton
-->[x,N]=newton(2,3,30)
!--error 4 
Variável indefinida: dfunc
at line 5 of function newton called by : 
[x,N]=newton(2,3,30)
𝑓 𝑥 = 1.2𝑥3 + 2𝑥2 − 20𝑥 − 10
-->deff('y = dfunc(x)','y = 3.6*x^2+4*x-20')
Scilab 5.5.1 Console
Método de Newton
Scilab 5.5.1 Console
Método de Newton
-->[x,N]=newton(2,3,30)
Scilab 5.5.1 Console
Método de Newton
-->[x,N]=newton(2,3,30)
N =
8. 
x =
3.602259 
Scilab 5.5.1 Console
Método de Newton
-->[x,N]=newton(2,3,30)
N =
8. 
x =
3.602259 
-->func(x)
Scilab 5.5.1 Console
Método de Newton
-->[x,N]=newton(2,3,30)
N =
8. 
x =
3.602259 
-->func(x)
ans =
0.0000224 
Scilab 5.5.1 Console
Método da Secante
1. Analisar a função para determinar dois 
valores, x0 e x1, próximos à raiz.
2. Calcular estimativas consecutivas para a 
raiz usando a expressão:
𝑥𝑘+1 = 𝑥𝑘 − 𝑓(𝑥𝑘)
𝑥𝑘−𝑥𝑘−1
𝑓 𝑥𝑘 −𝑓 𝑥𝑘−1
3. Repetir o passo 2 até que se tenha obtido a 
precisão desejada.
Método da Secante
Scinotes
Método da Secante
//Entradas: chute1, chute2, tolerância, máximo de iterações 
Scinotes
Método da Secante
//Entradas: chute1, chute2, tolerância, máximo de iterações 
//Saídas: x (raiz), número de iterações 
Scinotes
Método da Secante
//Entradas: chute1, chute2, tolerância, máximo de iterações 
//Saídas: x (raiz), número de iterações 
function [x,N] = secante(x0,x1,p,Nmax)
Scinotes
Método da Secante
//Entradas: chute1, chute2, tolerância, máximo de iterações 
//Saídas: x (raiz), número de iterações 
function [x,N] = secante(x0,x1,p,Nmax)
N=0; erro=1;
Scinotes
Método da Secante
//Entradas: chute1, chute2, tolerância, máximo de iterações 
//Saídas: x (raiz), número de iterações 
function [x,N] = secante(x0,x1,p,Nmax)
N=0; erro=1;
while (erro>10^(-p) & N<Nmax)
Scinotes
Método da Secante
//Entradas: chute1, chute2, tolerância, máximo de iterações 
//Saídas: x (raiz), número de iterações 
function [x,N] = secante(x0,x1,p,Nmax)
N=0; erro=1;
while (erro>10^(-p) & N<Nmax)
N = N+1;
Scinotes
Método da Secante
//Entradas: chute1, chute2, tolerância, máximo de iterações 
//Saídas: x (raiz), número de iterações 
function [x,N] = secante(x0,x1,p,Nmax)
N=0; erro=1;
while (erro>10^(-p) & N<Nmax)
N = N+1;
x = x1 - func(x1)*(x1-x0)/(func(x1)-func(x0));
Scinotes
Método da Secante
//Entradas: chute1, chute2, tolerância, máximo de iterações 
//Saídas: x (raiz), número de iterações 
function [x,N] = secante(x0,x1,p,Nmax)
N=0; erro=1;
while (erro>10^(-p) & N<Nmax)
N = N+1;
x = x1 - func(x1)*(x1-x0)/(func(x1)-func(x0));
erro = abs((x-x1)/x);
Scinotes
Método da Secante
//Entradas: chute1, chute2, tolerância, máximo de iterações 
//Saídas: x (raiz), número de iterações 
function [x,N] = secante(x0,x1,p,Nmax)
N=0; erro=1;
while (erro>10^(-p) & N<Nmax)
N = N+1;
x = x1 - func(x1)*(x1-x0)/(func(x1)-func(x0));
erro = abs((x-x1)/x);
x0=x1;
Scinotes
Método da Secante
//Entradas: chute1, chute2, tolerância, máximo de iterações 
//Saídas: x (raiz), número de iterações 
function [x,N] = secante(x0,x1,p,Nmax)
N=0; erro=1;
while (erro>10^(-p) & N<Nmax)
N = N+1;
x = x1 - func(x1)*(x1-x0)/(func(x1)-func(x0));
erro = abs((x-x1)/x);
x0=x1;
x1=x;
Scinotes
Método da Secante
//Entradas: chute1, chute2, tolerância, máximo de iterações 
//Saídas: x (raiz), número de iterações 
function [x,N] = secante(x0,x1,p,Nmax)
N=0; erro=1;
while (erro>10^(-p)& N<Nmax)
N = N+1;
x = x1 - func(x1)*(x1-x0)/(func(x1)-func(x0));
erro = abs((x-x1)/x);
x0=x1;
x1=x;
end
Scinotes
Método da Secante
//Entradas: chute1, chute2, tolerância, máximo de iterações 
//Saídas: x (raiz), número de iterações 
function [x,N] = secante(x0,x1,p,Nmax)
N=0; erro=1;
while (erro>10^(-p) & N<Nmax)
N = N+1;
x = x1 - func(x1)*(x1-x0)/(func(x1)-func(x0));
erro = abs((x-x1)/x);
x0=x1;
x1=x;
end
endfunction
Scinotes
Método da Secante
Scilab 5.5.1 Console
Método da Secante
-->[x,N]=secante(-2,0,3,30)
Scilab 5.5.1 Console
Método da Secante
-->[x,N]=secante(-2,0,3,30)
N =
4. 
x =
- 0.4834095 
Scilab 5.5.1 Console
Método da Secante
-->[x,N]=secante(-2,0,3,30)
N =
4. 
x =
- 0.4834095 
-->func(x)
Scilab 5.5.1 Console
Método da Secante
-->[x,N]=secante(-2,0,3,30)
N =
4. 
x =
- 0.4834095 
-->func(x)
ans =
4.803D-11
Scilab 5.5.1 Console

Continue navegando