Baixe o app para aproveitar ainda mais
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
Compartilhar