Baixe o app para aproveitar ainda mais
Prévia do material em texto
Universidade Federal de Lavras Departamento de Ciências Exatas GEX240 – Cálculo Numérico – 2019/2 Prof. Tiago Vieira Apostila para aulas práticas com o Scilab Lavras – MG Sumário Guia rápido 3 Comandos no Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Sites de apoio para análise gráfica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Sistemas de numeração e erros 7 Revisão teórica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Rotinas computacionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Roteiro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Exerćıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Questões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Zeros de funções – métodos intervalares 11 Revisão teórica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Rotinas computacionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Roteiro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Exerćıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Questões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Zeros de funções – métodos abertos 15 Revisão teórica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Rotinas computacionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Roteiro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Exerćıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Questões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Sistemas não-lineares 19 Revisão teórica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Rotinas computacionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Roteiro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Exerćıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 1 Sistemas lineares – métodos iterativos 23 Revisão teórica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Rotinas computacionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Roteiro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Exerćıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Questões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Sistemas lineares – métodos exatos 28 Revisão teórica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Rotinas computacionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Roteiro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Exerćıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Questões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Regressão polinomial pelo método dos quadrados mı́nimos 33 Revisão teórica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Rotinas computacionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Roteiro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Exerćıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Questões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Interpolação polinomial 39 Revisão teórica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Rotinas computacionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Roteiro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Exerćıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Interpolação por splines 44 Revisão teórica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Rotinas computacionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Roteiro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 Exerćıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 Integração numérica 48 Revisão teórica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 Rotinas computacionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Roteiro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Exerćıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 Questões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 2 Guia rápido Comandos no Scilab comando Descrição do comando. ; (ponto e v́ırgula) Todo comando digitado terminado por um ; não mostra o resultado das operações executa- das. Se o comando não terminar com ponto e v́ırgula, então os resultados da execução do comando serão mostrados na janela de comandos do Scilab. a = [1:0.5:2.5] Atribui o vetor-linha [1, 1.5, 2, 2.5] à variável a. Para atribuir um vetor coluna, pode-se uti- lizar o mesmo comando adicionando uma aspa simples imediatamente depois do caractere ]. linha = [1,2,3], coluna = [1;2;3] Num vetor-linha definido por enumeração os elementos devem ser separados por v́ırgula. Os elementos de um vetor-coluna, por outro lado, eles devem ser separados por ponto e v́ırgula. A = [1,2,3;4,5,6;7,8,9] Atribui a matriz 1 2 3 4 5 6 7 8 9 à variável A. A transposta é obtida adicionando uma aspa simples logo depois de ]. cos(x), sin(x) e tan(x) Calcula respectivamente o cosseno, o seno e a tangente do ângulo x, que deve ser informado em radianos. O parâmetro x pode ser um único valor ou um vetor numérico. deff(‘[s1,s2,...]=identificador(e1,e2,...)’,[‘comando 1’;‘comando 2’;...]) Define uma função indicando seus valores de sáıda s1,s2,..., parâmetros de entrada e1,e2,..., o identificador que dá nome à função e os comandos por ela executados. Esse co- mando pode ser utilizando para definir funções matemáticas, por exemplo, f(x) = x2 · ln(x), a qual é definida através do comando deff(‘z=f(x)’,‘z=(x^2)*log(x)’) 3 Essa função tem o identificador f , o valor de retorno, o parâmetro de entrada x e executa apenas um comando. Como segundo exemplo, a função matemática g(x, y) = sen(x) · cos(x), que tem dois valores de entrada e um de sáıda, pode ser de definida com o comando deff(‘z=g(x,y)’,‘z=sin(x)*cos(y)’) Para exemplificar uma função mais genérica com dois valores de entrada, dois de sáıda e dois comandos, pode-se considerar a função deff(‘[Ea,Er]=E(xc,xa)’,[‘Ea=abs(xc-xa)’;‘Er=abs(Ea/xc)’]) exec(‘local do arquivo/arquivo.sci’) Executa uma rotina chamada arquivo.sci que se localiza no diretório (pasta) ‘local do arquivo’, que deve incluir toda a sequência de diretórios desde a raiz. Alter- nativamente, quando arquivo.sci estiver aberto no Scinotes (editor de códigos do Scilab), pode-se pressionar a tecla F5 ou a combinação Crtl+F5. horner(p,x) Calcula a imagem dos valores armazenados em x através do polinômiop. O valor retornado por esta rotina é uma matriz (ou vetor) com as mesmas dimensões de x. log(x) ou log2(x) ou log10(x) Calcula o logaritmo do(s) valor(es) numérico(s) armazenado(s) na variável x. O logaritmo natural (base e) é calculado através da função log, o logaritmo de base 2 é calculado com o uso da função log2 e o logaritmo de base 10 por meio da função log10. [L,U,P]=lu(A) e [PL,U]=lu(A) Calcula a fatoração LU da matriz A. Essa rotina executa a fatoração junto com a estratégia de pivotamento parcial visando ter o maior pivô posśıvel a cada passo da execução da rotina. Se for utilizado o comando [L,U,P]=lu(A) a matriz triangular inferior ficará armazenada em L, a triangular superior em U e a matriz de permutação será armazenada em P. Ao utilizar o comando [PL,U]=lu(A) a variável PL guardará a matriz triangular inferior já com todas as operações de permutação executadas pela estratégia de pivotamento parcial citada, portanto podendo não ser exata- mente uma matriz triangular inferior, enquanto U guarda a matriz triangular superior. plot(‘abscissas’,‘ordenadas’,‘caracterı́sticas visuais’,...) Desenha na janela gráfica. Esse comando tem o seguinte padrão de chamada, o qual pode se repetir quantas vezes se deseje: o 1o parâmetro é um vetor de valores que dão as abscissas dos pontos a serem desenhados; o 2o parâmetro é um vetor contendo os valores das ordenadas dos pontos a serem desenhados; e o 3o parâmetro contém as caracteŕısticas visuais do desenho, como cor, tipo de linha e śımbolos para representar os pontos. Por exemplo, o comando plot(vx,vy,‘b.’) desenha os pontos com coordenadas horizontais vx e coordenadas verticais vy na forma de 4 pequenos ćırculos azuis. O . (ponto) diz que se deve desenhar pequenos ćırculos e o b informa que a cor é azul. Outro exemplo: plot(vxx,vyy,‘r’) ao invés de desenhar os pontos com coordenadas guardadas em vxx e vyy, na verdade desenha segmentos de reta ligando esse pontos e utilizando a cor vermelha por causa do r. Para mostrar ao mesmo tempo os pontos e os segmentos de reta que os ligam, pode-se usar o comando plot(vxx,vyy,‘r*-’) em que o * indica a figura utilizada para mostrar cada ponto e o - seguinte indica que eles devem estar ligados por segmentos de reta. Nesse tipo de comando, tanto os pontos quanto os segmentos de retas têm a mesma cor vermelha por causa do r. Para desenhar os pontos e segmentos de retas tracejados com cores diferentes, por exemplo, nas cores amarela e verde, respectivamente, usa-se plot(vxx,vyy,‘y*’,vxx,vyy,‘g--’) Esse último comando mostra outro padrão de chamada para a rotina plot, passando dois grupos de parâmetros “abscissas, ordenadas e caracteŕısticas visuais”. Pode-se chamar a rotina plot com quantos grupos desse quanto se deseje e sem a necessidade de que os vetores com as abscissas e ordenadas sejam iguais, por exemplo: plot(v1,v2,‘k*’,v3,v4,‘m’) desenha um conjunto de pontos com abscissas v1 e ordenadas v2 na forma * e na cor preta; e ao mesmo tempo desenha os segmentos de retas entre os pontos com abscissas v3 e ordenadas v4 na cor magenta. As cores que podem ser utilizadas e seus especificadores são azul amarelo magenta preto vermelho verde b y m k r g Os tipos de śımbolos utilizados para desenhar os pontos e seus especificadores são ponto asterisco ćırculo quadrado triângulo para cima triângulo para baixo . * o s ^ v Os estilos de linhas desenhadas para ligar os pontos e seus especificadores são sólida tracejada pontilhada traço e ponto - -- : -. scf() ou scf(3) O comando scf(); (sem passagem de parâmetros) abre uma janela gráfica sem identificação espećıfica. Se for desejado identificar a janela gráfica a ser aberta, o comando deve ser invocado com um valor numérico como parâmetro. Por exemplo, scf(3); 5 abre a “Janela gráfica número 3”. Identificar as janelas gráficas é útil quando se está utili- zando mais de uma aberta ao mesmo tempo e são feitos plots alternados numa janela e na outra. Nesse caso, antes de cada comando plot deve ser chamado o comando scf com o iden- tificador da janela na qual se deseja desenhar. O ponto e v́ırgula que finaliza cada chamada ao comando scf evita que sejam mostradas as propriedades da janela gráfica aberta. clc() Limpa todos os comandos mostrados na janela de comandos, não apagando nenhuma das variáveis armazenadas na memória do Scilab. clear Apaga uma ou mais variáveis definidas anteriormente que estão armazenadas na memória do Scilab. Se quiser apagar a variável a, utiliza-se o comando clear a Se quiser apagar mais de uma variável ao mesmo tempo, elas devem ser separadas por espaços. Por exemplo, para apagar as variáveis a, b e c utiliza-se o comando clear a b c Para apagar todas as variáveis armazenadas de um vez, basta utilizar o comando clear sem listar qualquer variável após a palavra “clear”. Sites de apoio para análise gráfica www.wolframalpha.com Para ver o gráfico da função f(x) = x sen(x) no intervalo [−π, 2π], usa-se o comando: plot x*sin(x) from -pi to 2*pi Para ver o gráfico de duas ou mais funções simultaneamente, basta separar as expressões algébricas das funções por v́ırgulas. Para ver os gráficos do seno e do cosseno, por exemplo, usa-se o comando: plot sin(x),cos(x) from -pi to 2*pi www.google.com Pode-se visualizar os gráficos de uma, duas ou mais funções simultaneamente ao se utilizar comandos iguais aos mostrados acima para a ferramente WolframAlpha. Os comandos devem ser digitados diretamente no campo de buscas. www.geogebra.org/graphing Para ver o gráfico de qualquer função, basta digitar sua expressão algébrica no campo ade- quado. www.graphsketch.com Para ver o gráfico de qualquer função, basta digitar sua expressão algébrica no campo ade- quado. 6 Sistemas de numeração e erros Revisão teórica • Dado um número qualquer representado pelo numeralD10 em base 10 e também pelo numeral B2 em base 2, a conversão entre ambos os sistemas de numeração segue este racioćınio: ao expandir D10 em potências de base 2, os coeficientes 0 ou 1 que multiplicam cada potência são os algarismos que formam o numeral B2. Ou seja, D10 = � k � Nk · 2k � ⇒ B2 = . . . N3 N2 N1 N0 . N(−1) N(−2) N(−3) . . . De forma similar, ao expandir B2 em potências de base 10, os coeficientes 0, 1, 2, . . . ou 9 que multiplicam cada potência são os algarismos que forma o numeral D10: B2 = � k � Mk · 10k � ⇒ D10 = . . .M3 M2 M1 M0 .M(−1) M(−2) M(−3) . . . • Erros de arredondamento derivam da impossibilidade de escrever adequadamente alguns números utilizando uma quantidade finita de algarismos. Erros de truncamento originam-se das limitações dos métodos numéricos utilizados. • Sendo x o valor exato de uma certa variável e x∗ seu valor aproximado, o erro absoluto é dado por EA = |x− x∗| e o erro relativo é ER = ���� x− x∗ x ���� • A série de Maclaurin para a função exponencial é ex = ∞� k=0 � xk · d k (ex) d xk � = ∞� k=0 xk k! = 1 + x+ x2 2! + x3 3! + · · · 7 Rotinas computacionais b2parab10.sci Realiza a conversão de um numeral binário para decimal. Os parâmetros de entrada são: (1o) st2: numeral em binário na forma de uma string. (2o) af: quantidade de algarismos fracionários que devem aparecer no numeral em decimal resultante. O valor de retorno da rotina é o numeral em notação decimal contendo a quantidade de algarismos fracionários especificada. Comando para execução: st10 = b2parab10(st2,af) b10parab2.sci: Converte um numeral de decimal para binário. Os parâmetros de entrada são: (1o) st10: numeral em decimal na forma de uma string. (2o) af: quantidade de algarismos fracionários que devem aparecer no numeral em binário resultante. O valor de retorno da rotina é o numeral em notação binária contendo a quantidade de algarismos fracionários especificada. Comando para execução: st2 = b10parab2(st10,af) b10parab2i.sci:Faz a conversão de um número decimal inteiro para binário. O parâmetro de entrada é a representação de um número inteiro em decimal na forma de uma string. O valor de retorno da rotina é o numeral em notação binário contendo a quantidade de algarismos fracionários especificada. Comando para execução: st2i = b10parab2i(st10,af) Essa rotina é utilizada internamente pela anterior, b10parab2.sci. aproxexp.sci: Calcula o valor aproximado da função exponencial de acordo com a série de Maclaurin truncada. Os parâmetros de entrada são: (1o) x: número para o qual se deseja aproximar o valor da função exponencial (base e). (2o) n: quantidade de termos considerada na expansão de Maclaurin. O valor de retorno da rotina é valor aproximado da exponencial ex ao considerar os n primeiros termos da série de Maclaurin. 8 Comando para execução: y = aproxexp(x,n) Roteiro 1. Carregar, através do comando exec, as rotinas no Scilab. 2. Utilize as rotinas de conversão entre binário e decimal para verificar como os erros de arredon- damento surgem ao se fazer conversões sucessivas com precisão numérica limitada. Converta o numeral ‘11.11’ de binário para decimal e seu resultado novamente para binário. Depois converta o numeral ‘11.11’ de decimal para binário e seu resultado novamente para decimal. Faça isso usando 2, 4 e 6 algarismos fracionários. 2 algs. 4 algs. 6 algs. binário 11.11 decimal binário 2 algs. 4 algs. 6 algs. decimal 11.11 binário decimal 3. Use a rotina aproxexp para observar como o erro de truncamento diminui com o aumento da quantidade de termos utilizados na aproximação da função exponencial. Por exemplo, observe como sucessivas aprovimações de e1 calculada através da soma de 1, 2, 3, 4, . . . 10 termos converge em direção ao número 2,718281828. Calcule o erro absoluto ou o erro relativo em relação à variável %e, que pode ser tomada como o valor correto de e1. n aproxexp(1,n) Erro 1 2 3 4 5 6 7 8 9 10 9 Exerćıcios 1. Repita o que foi feito no item 2 do roteiro, preenchendo as duas tabelas, mas considerando como numeral inicial ‘10.1’. 2. Refaça os cálculos do item 3 do roteiro, considerando o mesmo tipo de erro escolhido naquele item, mas agora calculando aproximações sucessivas de e2. Questões 1. Embora as duas tabelas do item 2 iniciem pelo mesmo numeral, os resultados obtidos na última linha de cada tabela não são os mesmos. Por que isso acontece? Explique da forma mais sucinta posśıvel levando em consideração a quantidade de algarismos no numeral 11.11 e a sequência de operações de conversão utilizadas. 2. Qual valor inicial poderia ser usado para as duas tabelas do item 2 de modo que ambas as tabelas tenham a última linha diferente da primeira linha? 3. A série de Maclaurin de uma função f(x) é desenvolvida na vizinhança de x = 0, portanto espera-se que quanto mais próximo de zero seja o valor de x, mais rápido a série convirja para o valor correto. Se for constrúıda uma tabela semelhante àquela do item 3 para calcular as sucessivas aproximações de e1/2, o que se espera dos valores calculados para o erro em comparação àqueles para as aproximações de e1? 10 Zeros de funções – métodos intervalares Revisão teórica • Chama-se de zero da função real f(x), o valor x = x∗ tal que f(x∗) = 0. • O teorema do valor intermediário permite afirmar que há um zero da função f(x) no intervalo [a; b] sempre que f(a) · f(b) ≤ 0. • Os métodos intervalares da bisseção e da posição falsa trabalham sobre um intervalo da reta real, diminuindo sucessivamente sua largura, afim de cercar de maneira cada vez mais precisa o zero da função. � O método da bisseção divide ao meio o intervalo [a; b] no qual se sabe haver um zero da função f(x): [a; b] → � [a;m] [m; b] , onde m = a+ b 2 . Em seguida utiliza o teorema do valor intermediário para decidir em qual das duas metades está o zero da função. � O método da posição falsa divide o intervalo [a; b] no qual há um zero da função f(x) em duas partes de tamanhos (geralmente) desiguais: [a; b] → � [a;m] [m; b] , onde m = a |f(b)|+ b |f(a)| |f(a)|+ |f(b)| . O teorema do valor intermediário é utilizado para decidir em qual das duas partes está o zero da função. • O método da posição falsa pode ser melhorado, garantindo uma convergência mais rápida, ao se exigir que, quando uma das extremidades é mantida durante duas iterações consecutivas, a imagem correspondente àquela extremidade seja dividida pela metade. Considerando que o intervalo inicial seja [a, b], a sequência de passos abaixo ilustra a afirmação anterior: [a, b] (1)−→ m = a |f(b)|+ b |f(a)||f(a)|+ |f(b)| (2)−→ [a,m] (3)−→ n = a |f(m)|+m ���f(a)2 ��� ���f(a)2 ���+ |f(m)| (4)−→ [n,m] (5)−→ 11 (5)−→ u = n ���f(m)2 ���+m |f(n)| |f(n)|+ ���f(m)2 ��� (6)−→ [u,m] (7)−→ v = a ���f(b)4 ���+ b |f(a)| |f(a)|+ ���f(b)4 ��� (8)−→ · · · (1) Dado o intervalo inicial [a; b], a primeira estimativa para o zero da função é calculada como sendo m. (2) Supõe-se que o zero da função está na metade esquerda do intervalo inicial: [a,m]. (3) A segunda estimativa do zero da função é calculada como n. Lembrando que a extre- midade inferior do intervalo de trabalho se repete, a imagem utilizada no passo (1) é didivida por 2. (4) Supondo o zero da função localizado na metade direita do intervalo anterior: [n,m]. (5) Cálculo da terceira estimativa para o zero da função, considerando que neste caso a extremidade superior do intervalo foi a que se manteve constante em duas iterações consecutivas. (6) Supõe que o zero da função esteja na metade direita do intervalo anterior: [u,m]. (7) Cálculo da quarta estimativa para o zero da função, considerando que a extremidade superior do intervalo manteve-ser constante por três iterações consecutivas. (8) Os cálculos devem continuar até que a condição de parada seja alcançada. Rotinas computacionais bissecao.sci Implementa o método da bisseção. Os parâmetros de entrada são: (1o) f: a função que se deseja encontrar um dos zeros. (2o) a: a extremidade inferior do intervalo no qual se sabe que está um dos zeros da função. (3o) b: a extremidade superior de tal intervalo. (4o) ed: o valor do erro máximo desejado. (5o) ted: (facultativo) o tipo do erro calculado, que deve ser informado com valor 0 para a largura do intervalo, 1 para o erro absoluto, 2 para o erro relativo e 3 para o cálculo da função na última estimativa do zero. O valor padrão é 0 (zero). (6o) nmax: (facultativo) a quantidade máxima de iterações que poderão ser executadas. O valor padrão é 20. Os valores de retorno da rotina são: (1o) x: a estimativa do valor do zero da função encontrado na última iteração. (2o) ec: (facultativo) o primeiro valor do erro que satisfaz a condição de parada. (3o) n: (facultativo) a quantidade de iterações executadas. 12 Comandos para execução: [x,ec,n] = bissecao(f,a,b,ed,ted,nmax) // todos os parâmetros ou x = bissecao(f,a,b,ed) // apenas parâmetros obrigatórios Essa rotina escreve na tela uma tabela composta por cinco colunas: a 1a coluna contém a contagem das iterações; a 2a contém a extremidade inferior do intervalo em cada iteração; a 3a contém a extremidade superior; a 4a traz cada uma das estimativas calculas para o zero da função; e a 5a coluna mostra o valor do erro calculado a cada iteração. pfalsa.sci Implementa o método da posição falsa, Os parâmetros de entrada e valores de retorno são os mesmos da rotina do método da bisseção. Comandos para execução: [x,ec,n] = pfalsa(f,a,b,ed,ted,nmax) // todos os parâmetros ou x = pfalsa(f,a,b,ed) // apenas parâmetros obrigatórios Essa rotina escreve na tela uma tabela semelhante àquela da rotina do método da bisseção. pfalsarap.sci Versão do método da posição falsa que tem a convergência acelerada em relação à imple- mentaçãopadrão. Os parâmetros de entrada e valores de retorno são os mesmos da rotina anterior. Comandos para execução: [x,ec,n] = pfalsarap(f,a,b,ed,ted,nmax) // todos os parâmetros ou x = pfalsarap(f,a,b,ed) // apenas parâmetros obrigatórios Escreve na tela uma tabela análoga àquela da rotina anterior. Roteiro 1. Carregar, através do comando exec, as rotinas no Scilab. 2. Defina a função f(x) = x3 − 2x utilizando o comando deff: deff(‘y=f(x)’,‘y=x^3-2^x’) 3. Utilize uma ferramenta computacional de análise gráfica para ver o gráfico desta função e poder escolher adequadamente intervalos iniciais que permitam aos métodos intervalares encontrar os zeros da função. 13 4. Escolha um intervalo inicial [a; b] de largura unitária (ou seja, b−a = 1) que cerque o primeiro zero da função (aquele que é mais próximo de x = 0). Em seguida chame a rotina do método da bisseção através de um comando do tipo [x,ec,n] = bissecao(f,a,b,ed) atribuindo valores adequados para os parâmetros. Considere como critério de parada o erro máximo de 10−2, calculado como a largura do intervalo. 5. Repita o passo anterior para o segundo zero da função f(x). 6. Repita os passos 4 e 5 para as duas rotinas citadas do método da posição falsa. 7. Preencha o quadro abaixo a partir dos resultados obtidos. 1o zero 2o zero Rotina [a, b] x n [a, b] x n bissecao pfalsa pfalsarap Exerćıcios 1. Repita os mesmos procedimentos do roteiro, considerando a mesma função, mas calculando o erro como sendo: (a) o erro absoluto; (b) o erro relativo; (c) o erro na estimativa de f(x). 2. Repita os passos 2 a 4 do roteiro para encontrar: (a) os dois zeros da função h(x) = ex − 3x; (b) os dois zeros da função p(x) = 2 + x− ex; (c) os dois zeros da função q(x) = exp(x/2)− 2x. Questões 1. Retorne aos itens 4 e 5 do roteiro, escolha intervalos iniciais diferentes daqueles usados antes, mas mantendo a largura unitária, e calcule novamente o primeiro e o segundo zero da função através do método da bisseção. Por que a quantidade de iterações se manteve a mesma? 2. Veja as tabelas geradas pelo método padrão da posição falsa. As últimas iterações mostram que as duas extremidades do intervalo de dados ficam praticamente fixas, enquanto uma delas está na vizinhança do zero da função. Que tipo de erro poderia ter sido utilizado para evitar que isso acontecesse e por quê? 14
Compartilhar