Pré-visualização parcial do texto
Baixe todos prontos e outras Manuais, Projetos, Pesquisas em PDF para Engenharia Química, somente na Docsity!
NT a i Algoritmos Numéricos %; Frederico Ferreira Campos, filho Professor do Departamento de Ciência da Computação da Universidade Federal de Minas Gerais EnrrADÁ va tRÊ re ISTRO E fio tor d DATA E BIBLIOTECA 5 aii CERGANID unzo Se de difusão da cultura e do conhecimento, o autor é os editores envidaram o 4 niáximo esforço para localizar os detentores dos direitos autorais de qualquer material utilizado, dispondo-se a possíveis acertos posteriores caso, inadvertidamente, a identificação de algum deles tenha sido omitida. É ] 1 + “q Aos meus pais Y . Frederico e Neuza Capa: A figura da capa foi construída utilizando-se um tangram. Ele é um milenar quebra-cabeça chinês composto por sete peças, com as quais se podem construir milhares de figuras. Analogamente, com os sete capítulos de Algoritmos Numéricos é possível resolver uma infinidade de problemas usando-se os métodos descritos. ! Direitos exclusivos para à língua portuguesa Copyright O 2001 by Frederico Ferreira Campos, filho LTC — Livros Técnicos e Científicos Editora S.A. , Travessa do Ouvidor, 11 . Rio de Janeiro, RJ — CEP 20040-040 Tel.: 21-2221-9621 Fax: 21-2221-3202 Reservados todos os direitos. É proibida a duplicação ou reprodução deste volume, no todo ou em parte, sob quaisquer formas ou por quaisquer meios (eletrônico, mecânico, gravação, fotocópia, distribuição na Web ou outros ; Ensiads re ISTRO E fio tor d DATA E BIBLIOTECA 5 aii CERGANID unzo Se de difusão da cultura e do conhecimento, o autor é os editores envidaram o 4 niáximo esforço para localizar os detentores dos direitos autorais de qualquer material utilizado, dispondo-se a possíveis acertos posteriores caso, inadvertidamente, a identificação de algum deles tenha sido omitida. É ] 1 + “q Aos meus pais Y . Frederico e Neuza Capa: A figura da capa foi construída utilizando-se um tangram. Ele é um milenar quebra-cabeça chinês composto por sete peças, com as quais se podem construir milhares de figuras. Analogamente, com os sete capítulos de Algoritmos Numéricos é possível resolver uma infinidade de problemas usando-se os métodos descritos. ! Direitos exclusivos para à língua portuguesa Copyright O 2001 by Frederico Ferreira Campos, filho LTC — Livros Técnicos e Científicos Editora S.A. , Travessa do Ouvidor, 11 . Rio de Janeiro, RJ — CEP 20040-040 Tel.: 21-2221-9621 Fax: 21-2221-3202 Reservados todos os direitos. É proibida a duplicação ou reprodução deste volume, no todo ou em parte, sob quaisquer formas ou por quaisquer meios (eletrônico, mecânico, gravação, fotocópia, distribuição na Web ou outros ; Ensiads como afirma o autor, somente os aspectos ma- temáticos são levados em conta 20 se elaborar o algoritmo, ficando, para outra etapa, a preocupação com as peculiaridades da linguagem de programação esco- lhida, o que é a maneira correta de se proceder. O, Java e outras. Dessa form Quando um método numérico é introduzido, discutido, exemplos de sua utilização são apresentados e, então, um algoritmo é proposto, com sua complexidade, seu custo computacional ou esforço computacional despendido para resolver o proble- ma. À análise dessa complexidade é que permite a decisão pela melhor maneira de se implementar um método numérico. Também esta é, a meu ver, abordagem das mais adequadas é instigantes, do ponto de vista didático, para se introduzir um método numérico. Além disso, esta maneira de proceder evidencia o papel do Cálculo Numérico como importante instrumento capaz de permitir a solução (que se supõe ou se mostrou existir) de um problema, passo a passo, por meio de máquina de calcular (computadores etc.) desde que, naturalmente, o problema seja computável. Merece também destaque o tratamento que se faz do problema de erros que podem ocorrer durante o processo de obtenção da solução de um dado problema, da importância de que isto se reveste na correta avaliação dos resultados numéricos obtidos. Saber descobrir as causas desses erros é fundamental para se poder minimizar as suas, às vezes, funestas consequências. Em particular, ressalte-se o estudo que se faz do problema do malcondicionamento, algo cujas causas, há alguns anos atrás, eram desconhecidas ou mal compreendidas. Finalmente, julgo adequada, abrangente e equilibrada a escolha dos assuntos tra- tados: Computação numérica, Sistemas lineares, Interpolação, Ajuste de curvas, Integração numérica, Raízes de equações e Equações diferenciais ordinárias, prin- cipalmente, se o livro se destina, preferencialmente, a estudantes de graduação dos Cursos de Ciências Exatas e de Tecnologia. Está, pois, de parabéns o Prof. Frederico, pela feliz e oportuna iniciativa que, estou certo, irá contribuir significativamente para o enriquecimento da bibliografia brasileira de Cálculo Numérico é de Análise Numérica. São Carlos, 22 de maio de 2000 Odelar Leite Linhares Prefácio Análise Numérica é o estudo de algoritmos para os problemas de matemática contínua [36]. (Lloyd N. Trefethen, Professor of Numerical Analysis, University of Oxford) , O objetivo deste livro é servir de texto básico para as disciplinas Cálculo Numérico e Análise Numérica, bem como de texto complementar para Programação de Computadores, Programação Científica e Algoritmos e Estruturas de Dados. Usualmente, um curso de Cálculo Numérico e de Análise Numérica é ministrado com o suporte de uma linguagem de programação. No entanto, após a formulação de um método é mais interessante elaborar um algoritmo para depois implementá- lo em uma linguagem qualquer. Desta forma, somente os aspectos matemáticos são considerados ao fazer o algoritmo, ficando os detalhes da linguagem de pro- gramação para uma outra etapa. Essa, metodologia é adotada em Algoritmos Numéricos. Um método é discutido, são apresentados exemplos de sua utilização e ao final é proposto um algoritmo com à sua complexidade. A análise de comple- xidade de algoritmo torna. possível decidir pela melhor maneira de implementar um método numérico. Algoritmos Numéricos é composto de sete capítulos e quatro apêndices. No Capí- tulo 1, são descritas as etapas para à solução de um problema real qualquer, mostrando em qual delas se faz necessária a elaboração de um algoritmo. Uma notação algorítmica bem simples é apresentada, pois todos os algoritmos deste texto são descritos nessa notação. Também são mostrados os vários tipos de erros que ocorrem durante a solução de um problema, além dé explicar como um número é armazenado no computador. O Capítulo 2 trata da solução de sistemas de equações algébricas lineares. Descre- ve alguns conceitos fundamentais, sistemas triangulares, métodos diretos (Gauss, decomposição LU, Cholesky e espectral) e métodos iterativos estacionários (Jaco- bi e Gauss-Seidel). Uma seção é dedicada à análise de erro na solução de sistemas lineares. : eados em polinômios de O Capítulo 3 descreve os métodos de interpolação tro de trancamento ane Lagrange, Newton e Gregory-Newton, bem cómo o 2.3 “24 2.5 28 Br 28 29 2.2.3 Complexidade computacional . ..... DETNRRE 44 Eliminação de Gauss . . . cc ccscices 2.3.1 Sistemas equivalentes ..... sita = Eviges 2 Operações l-elementares ....cccccssciaatauas 46 3 Sistema triangular equivalente ..cccccstcccus 47 2.3.4 Cálculo do determinante ..... sas aerea 50 2.3.5 Pivotação parcial ;evssusesensuesansuua usa 51 Decomposição LU 53 2.4.1 Cálculo dos fatores . 5 24.2 Pivotação parcial 2.4.3 Cáleulo do determinante . . ... 2.44 Sistema com matriz singular 2.45 Algoritmos e complexidade Decomposição de Cholesky ....... 2.5.1 Cálculo do fator ......... ass: EEE 2.5.2 Cálculo do determinante... ..ccccccccacas 2.5.3 Algoritmo e complexidade Decomposição espectral ......... 2.6.1 Cálculo dos autovetores ..... 2.6.2 Solução de sistema . . Uso da decomposição... 2.7.1 Refinamento da solução . ..cicuccccscicsests 75 2.7.2 Cálculo da matriz inversa Ra ão - Métodos iterativos estacionários . . +... cu ca T9 2.8.1 Método de Jacobi ......... assa evo o BO 2.8.2 Método de Gauss-Seidel 86 2.8.3 Análise de convergência 91 2.84 Comparação dos métodos iterativos estacionários 93 Análise de erro na solução de sistemas 95 2.9.1 Malcondicionamento 95 2.9.2 Número de condição .. 96 2.9.3 Sensibilidade da solução . .. cc cucucussssesas 100 210 Estudos de caso : y «+ meses res « 101 2.10.1 Tensões em circuito elétrico « 102 uiometria de reação química NE: co 104 DI BXEBOCIOS sr sun “e memo mm meme 106 “3 Interpolação 5 113 “43.1 Polinômios interpoladores ......cccsccsnunutecaes n3 3.1.1 Interpolação linear ...ccccceseaeairrertrã 114 3.1.2 Interpolação quadrática ...cceceesterereas 115 xiii *3.2 Polinômios de Lagr 321 Fórmula de Lagrange ...ccccitncicasiarcs 322 Dispositivo prático... cen riste manera 3 Algoritmo e complexidade computacional . Polinômios de Newton 3.3.1 Operador de diferença dividida 3.3.2 Fórmula de Newton .... cc asaspas 3.3.3 Algoritmo e complexidade computacional .......... 124 x3.4 Polinômios de Gregory-Newton .....c. 3.4.1 Operador de diferença finita ascendente . 3.4.2 Fórmula de Gregory-Newton ....c.. Too 3.43 Algoritmo e complexidade computacional .... cc... 130 8; x3.3 3.5 Escolha dos pontos para interpolação . . . ...ccscsscacos 132 3.6 Erro de truncamento da interpolação polinomial .......ccs 133 3.7 Estudos de caso... ... cc 3.7.1 Curva de titulação 3.7.2 Interpolação inversa ..... 38 Exercícios ...cpnnlsânunevs cer ns mama cume sd Ajuste de curvas 4.1 Relações entre variáveis 4.2 Regressão linear simples 4.21 Diagrama de dispersão 4.22 Retas de regressão ...... 42.3 Método dos quadrados mínimos 4.3 Qualidade do ajuste ....cccccs 43.1 Coeficiente de determinação . . 43.2 Variância residual 4.4 Regressão linear múltipla Equações normais ....... Regressão polinomial. ..... Algoritmo . scene cearenses “Transformações não lineares . . . ....... 44.5 Malcondicionamento . ..... 4.5 Formas alternativas de estimar os parâmetros . ... 45.1 Decomposição QR ....ccccuincctts 45.2 Decomposição do valor singular 45.3 Comparação dos métodos computacionais para RLM .... 171 46 Diferença entre regressão e interpolação 47 Estudos de caso... css CRU 4.7.1 Tensão-deformação de aço . . . ..ccnics 4.7.2 Produto iônico da água “e 5 | Integração numérica 181 “5.1 Fórmiulas de Newton-Cotes 181 5.1.1 Regra do trapézio a 186 51.2 Regra do 1/3 de Simpson . a 19% 53 5.5 6.4 65 5.1.3 Regra dos 3/8 de Sim] 3 514 Erro de integração dos métodos de Newton-Cotes ..... 199 5.1.5 Algoritmo e complexidade Quadratura de Gauss-Legendre . . . o 5.2.1 Fórmula para dóis pontos 5.22 Fórmula geral . 5.2.3 Erro de integração: da fórmula de Gauss-Legêndre a 5.24 Algoritmo . cicero Comparação dos métodos de integração simples . ... Integração dupla pelas fórmulas de Newton-Cotes . . 5.4.1 Fórmulas simples. ...cccccccco 542 Fórmulas compostas . Ro 543 Algoritmo... cc Integração dupla via fórmulas de Gauss-Legendre . 5.5.1 Fórmula para dois pontos... gia 5.5.2 Fórmulageral........c ; 515: Algolitmos: « à 5 ESa Ea NSSGRSS ES E les 5.6 Comparação dos métodos para integração dupla . 5.7 Estudos de caso = aves . 5.7.1 Distribuição de probabilidade . 232 5.7.2 Integral imprópria . 234 DS MRBNGICIBA! somas é a grem a mmmaoa de RSA 0 MAG ED Ag E 236 6 Raízes de equações 241 6.1 Isolamento de raízes BRO - «242 6.1.1 Equações algébricas . «242 6.1.2 Equações transcendentes . . 253 6.1.3 Convergência da raiz. . . 256 6.2 Método da bisseção «257 6.3 Métodos baseados em aproximação linear . EM o 6.3.1 Método da secante-. . . 6.32 Método da regula falsi . 63.3 Método pégaso .... 6.3.4 Ordem de convergência Métodos baseados em aproximação Husasatiaa 6.4.1 Método de Muller 6.4.2 "Método de van Wijngaarden-Dekker-Brent ... Métodos baseados em tangente aaa 8.5.1 Método de Newton vom» 6.7 6.8 8.5.2 Método de Schróder ...icicio Comparação dos métodos para cálculo de raízes « . Estudos de caso... .... z 6.7.1 Juros de financiamento . 6.7.2 Cabosuspenso ..... Exercícios . .iicicicccc Equações diferenciais ordinárias 293 Ti 7.2 .3 Ta 75 76 Tr Solução numérica de EDO ....iiiiiiiiiiiiit 294 7.1.1 Problema de valor inicial 7.1.2 Método de Euler... 7.13 Definições ....... Métodos de Runge-Kutta o 7.2.1 Métodos de segunda ordem ... 7.2.2 Métodos de quarta ordem .... 7.23 Método de Dormand-Prince .. Métodos de Adams . .....ci. 7.31 Métodos de passo dois 7.3.2 Métodos de passo três .... 7.33 Método de Adams-Bashforth- Moulton. de idea ia Comparação de métodos para EDO . . E 7.4.1 Métodos de Runge-Kutta . 7.4.2 Métodos de Adams. .... 7.4.3 Comparação de métodos para EDO. Sistemas de equações diferenciais ordinárias . 7.5.1 Algoritmo de Runge-Kutta para sistema de crdeio: dois 7.5.2 Equações diferenciais de segunda ordem Estudos de caso... ..lcciccio 7.6.1 Controle de poluição... 7.6.2 Deflexãodeviga .... Exercícios . .cillls Linguagem FORTRAN 325 . Linguagem Pascal 339 Linguagem MATLAB . 355 Respostas dos exercícios 365 Referências Bibliográficas 375 Índice 379 9 Capítulo 1. Computação numérica Numerical Integrator And Calculator), foi projetado para fazer cálculos balísticos &, atualmente, 0s maiores supercomputadores no mundo inteiro estão dedicados a realizar cálculos numéricos. Neste capítulo de Algoritmos Numéricos, serão mostradas as etapas a serem se- guidas para a solução de um problema, à notação algorítmica adotada para à descrição dos métodos, as fontes de erros que ocorrem durante a solução do pro- blema e como é armazenado um número no computador. 1.1 Etapas na solução de um problema Dado um problema prático qualquer, como resolvê-lo no computador utilizando as técnicas do Cálculo Numérico? Será mostrado, a partir de um exemplo simples, que a solução de um problema pode ser obtida em quatro etapas: definição do problema, modelagem matemática, solução numérica e análise dos resultados. 1.1.1 Definição do problema Nesta etapa, define-se qual é o problema real a ser resolvido. Por exemplo, calcular va, a > 0, usando apenas as quatro operações aritméticas. - 1.1.2 Modelagem matemática O problema real é transformado no problema original por meio de uma formulação matemática. No exemplo, s=vassi=a-s f(s)=2?-0=0. Neste caso, o problema real, calcular a, a > 0, foi transformado no problema original que é determinar a raiz de uma equação algébrica de grau 2. Gerálmente, o problema original possui mais soluções que o problema real. No exemplo, +/a e —v/a são as duas raízes da equação algébrica. 1.1.3 Solução numérica Nesta etapa, é feita a escolha do método numérico mais apropriado para resol- ver O problema original oriundo da modelagem matemática. Feita a escolha do método, este é descrito por intermédio de um algoritmo, o qual é posteriormente implementado em um computador para obtenção dos resultados numéricos. Esta etapa pode ser dividida em três fases: elaboração do algoritmo, codificação do programa e processamento do programa. Elaboração do algoritmo Um algoritmo é a descrição de um conjunto de comandos que, quando ativados, resultam em uma sucessão finita de acontecimentos. Em vez de implementar ura método diretamente em uma linguagem de programação, é preferível descrevêlo 1.1. Etapas a solução de um problema por meio de uma notação algorímica. Com isto, é possível abstrair dos detalhes da linguagem de programação do computador utilizado e concentrar apenas nos aspectos maternáticos do método. Além do mais, à descrição do método em uma notação algorítmica facilita à sua implementação em qualquer linguagem de programação. Na seção 1.2, é apresentada a notação algorítmica adotada para descrever os métodos numéricos incluídos neste texto. Codificação do programa Nesta fase, o algoritmo é implementado na linguagem de programação escolhi- da. Como os aspectos matemáticos do método já foram pensados na fase de elaboração do algoritmo, a questão agora é só se preocupar com os detalhes de implementação da linguagem adotada. Os apêndices mostram como passar da notação algorítmica descrita na seção 1.2 para as linguagens de programação FORTRAN (apêndice À), Pascal (apêndice B) e MATLAB (apêndice C). Processamento do programa Finalmente, o código do programa obtido da implementação do algoritmo em uma linguagem de programação deve ser editado em um arquivo para que possa ser executado pelo computador. Se for detectado algum erro de sintaxe, ele tem que ser corrigido para que a execução do programa produza os resultados aguardados. Exemplo 1.1 Para exemplificar a etapa de solução numérica no exemplo de cálculo de ya, será utilizado o método de Newton, a ser descrito na seção 6.5.1, para calcular uma raiz de f(x) = q? - a = 0: f(x%) Ce (a) Substituindo f(x) e f(x), tem-se que a: tg-a E ori EE 2 + ou seja, mn = (+ =) x0,5. Tk Este é um processo iterativo para calcular ya, à partir de um valor inicial zo, usando apenas as operações aritméticas. Ele foi proposto pelos matemáticos A Capítulo 1. Computação numérica babilônicos, mas, às vezes, também é atribuído à Heron de Alexand d. 0.) ou ao grego Arquitas (428-365 a: C,). O processo babilônico produz os seguintes resultados para cáleulo de 3 usando m= x: x. i-3 1.0000 5.0000 2.0000 3.4000 0.4000 *3.0235 0.0235 3.0001 0.0001 3.0000 0.0000 NAwNHO A coluna x. i mostra as sucessivas aproximações de v/ a cada iteração i; a coluna x. i-3 mostra a diferença entre o valor aproximado x..i e o valor exato 3. 1.1.4 Análise dos resultados A adequação da solução numérica ao problema real é verificada nesta última etapa. Se a solução não se mostrar satisfatória, deve-se obter um novo problema original por intermédio de uma nova formulação matemática e determinar uma nova solução numérica. Exemplo 1.2 Para o exemplo de cálculo de raiz quadrada, se for atribuído o valor inicial xo = —2, então o processo convergirá para —3 que, embora seja uma raiz de f(r)=2? -9=0, não é 9. ã xi xi (o) -2.0000 1 -3.2500 -6.2500 2 -3.0096 -6.0096 3 -3.0000 -6.0000 Usualmente, a solução do modelo matemático pode produzir soluções que não têm sentido físico, como, por exemplo, tempo negativo, concentração complexa etc. A função da análise dos resultados é justamente discernir qual a solução válida. 1.2 Notação algorítmica A descrição de um algoritmo!, por intermédio de uma notação algorítmica, me- lhora o seu entendimento, pois apenas os aspectos do raciocínio lógico são enfati- zados sem ser necessário levar em consideração os detalhes de implementação de uma linguagem de programação. Os algoritmos numéricos neste texto são descri- tos em uma notação baseada naquela proposta por Farrer e outros [18]. Apesar “Esta palavra deriva do nome do matemático árabe Mohammed ibu-Musa al-Khowarizmi (800 d. G.). 12. Notação algorítmica 5 da descrição nos apêndices dé como implementar os algoritmos deste texto em algumas linguagens, a bibliografia deve ser consultada para obter mais material erência de como implementar os algoritmos nas linguagens de programação [t7], FORTRAN (16] e Basic [19] (esta não consta no apêndice). 1.2.1 Estrutura do algoritmo Unm algoritmo deve iniciar com [ higoritmo e terminar com algo: Também, [ fobjecivo: ) | deve ser utilizado para descrever a finalidade do algoritmo. Os dados necessários para a execução de um algoritmo são requisitados por meio do comando parâmetros de entrada | onde são os nomes das variáveis, separadas por vírgulas, contendo os valores fornecidos. Não se faz necessário descrever exatamente como os valores destas variáveis serão fornecidos ao algoritmo. Compete ao progra- mador decidir durante a codificação do programa se os dados serão fornecidos interativamente pelo console, lidos de um arquivo, passados como argumentos de um subprograma ou até mesmo definidos como constantes dentro do próprio programa. Por outro lado, os valores de interesse calculados pelo algoritmo são disponibili- zados pelo comando [ parâmetros de saída | podendo a ser ampliada ou reduzida pelo programador. Exemplo 1.3 Algoritmo Exemplo (Objetivo: Mostrar a estrutura de um algoritmo ) parâmetros de entrada a, b, c parâmetros de saída x, y fim algoritmo [7] Capítulo 1. Computação numérica A tabela 1,5 mostra os resultados obti W= verdadeiro e F = falso. aeb [ aoudb não a ab[v]r) [ab[v[F] [alv/r V [viril [vo [vjv FjV F elle lvle Tabela 1.5: Resultados com operadores lógicos. com os operadores lógicos, sendo que é Exemplo 1.6 Para os valores definidos no exemplo 1.5, o resultado de (d > ce x + y+5=2) éVeVqueimplicaem verdadeiro. Poroutrolado,(d=coux +y = 2) é F ou F implicando em falso. Expressões literais Uma expressão literal é formada por operadores literais e operandos, os quais são constantes e/ou variáveis do tipo literal. O caso mais simples de uma expressão literal é uma constante literal, a qual é constituída por uma cadeia de caracteres delimitada por aspas, por exemplo, mensagem + “matriz singular”. 1.2.4 Comandos de entrada e saída leia é usado para indicar que a lista-de-variáveis está disponível para leitura em algum dispositivo externo. Por sua vez, o comando escreva deve ser utilizado para indicar onde certos valores de interesse estão disponíveis no programa e podem ser escritos em algum dispositivo externo. Compete ao programador decidir pela ampliação da ou mesmo a omissão do comando escreva. O comando Exemplo 1.7 parâmetros de entrada grau, coeficientes parâmetros de saída ordenada leiagrau, coeficientes escreva ordenada o algorítmica 1.2.5 Estruturas condicionais O uso de uma estrutura condicional torna possível a escolha dos comandos a s rem executados quando certa condição for ou não satisfeita, possibilitando, desta maneira, alterar o fluxo natural de comandos. Esta condição é representada por uma expressão lógica. Às estruturas condicionais podem ser simples ou compos- tas. Estrutura condicional simples Esta estrutura apresenta a forma se então fim se Neste caso, a lista de será executada se, e somente se, a expressão lógica tiver como resultado o valor verdadeiro. Exemplo 1.8 se peso / O então delta — raizo(peso +b) ce + cos(peso) fim se Os comandos delta — raiza(peso + b) e c + cos(peso) só serão executados sea variável peso contiver um valor diferente de zero. Estrutura condicional composta Quando houver duas alternativas possíveis, deve ser usada uma estrutura da forma se então senão fim se ressão lógica tiver como resultado o valor verdadeiro, então ncia será executada e a seqiiência < comandos.2 > não será executada. Por outro lado, se o resultado de for falso, então será a lista a única à ser executada. i 10 Capítulo 1. Computação numérica Exemplo 1:9 se temperatura > [) então abstemp + temperatura varia + linear + abstemp senão abstemp + —temperatura fim se Se a variável temperatura contiver um valor positivo, então somente os dois comandos abstemp <- temperatura e varia < linear + abstemp serão executa- dos. No entanto, se temperatura contiver um valor negativo ou nulo, o comando abstemp + temperatura será o único a ser executado. 1.2.6 Estruturas de repetição Uma estrutura de repetição faz com que uma seqiiência de comandos seja exe- cutada repetidamente até que uma dada condição de interrupção seja satisfeita. Existem, basicamente, dois tipos destas estruturas, dependendo se o número de repetições for indefinido ou definido. Número indefinido de repetições Este tipo de estrutura de repetição apresenta a forma repita se então interrompa fim se fim repita < comandos 3 > O comando interrompa faz com que o fluxo de execução seja transferido pa- ra O comando imediatamente a seguir do fim repita. Deste modo, as listas e serão repetidas até que a expressão lógica resulte no valor verdadeiro. Quando isto ocorrer, a repetição será interrompida e a lista < comandos.3 >, após ao fim repita, será executada. 12. Notação algorítmica u Exemplo 1.10 ie-o repita iei+l sei> 5então interrompa fim se raiz +- raizo(i) escreva i, raiz fim repita jo Esta segiiência faz com que sejam calculadas as raízes quadradas dei = 1,2,...,5. Quando a variável i assumir o valor 6, então a estrutura repita--fimrepita é abandonada (vB não é calculada) e o comando j + 10 será executado. A forma repita--fimrepita é o caso geral de uma estrutura de repetição. Se a lista < comandos. 1 > não existir, ter-se-á uma estrutura de repetição com in- terrupção no início (estrutura enquanto). Similarmente, se não houver a lista , então será uma estrutura com interrupção no final (estrutura repita--até). Número definido de repetições Quando se souber, exatamente, quantas vezes a estrutura deve ser repetida, pode ser usado um comando de forma mais simples: para +- até passo faça fim para Nesta estrutura, inicialmente, é atribuído à variável o e verificado se ele é maior do que o . Se não for maior, então os serão executados e a variável será incrementada com 6 valor de . Novamente, é verificado se a variável é maior do que o , se não for maior, então os serão executados e assim sucessivamente. As repetições se processam até que à variável seja maior do que o . Quando o incremento -tiver o valor 1, então passo pode ser omitido da estrutura para--taça. 14 Capítulo 1. Computação numérica 1.2.9 Complexidade computacional E usual definir uma função de complexidade F para medir o custo de execução de um programa. Esta função F(n) pode ser tanto uma medida. do tempo para executar o algoritmo que resolve um problema de tamanho n. quanto o espaço de memória requerido para esta execução. A complexidade computacional de um algoritmo se refere à estimativa do esforço computacional despendido para resolver o problema e é medido pelo número necessário de operações aritméticas e lógicas como, por exemplo, o número de adições e multiplicações efetuadas para resolver um sistema linear de ordem n. 1.2.10 Notação matemática Definida a modelagem matemática por meio de expressões aritméticas e lógicas, o passo seguinte é passar dessa notação matemática para a notação algorítmica proposta. Esta passagem será ilustrada por meio de alguns exemplos. Exemplo 1.14 A norma-2 ou norma Euclidiana de um vetor x de tamanho n é definida pela expressão: a lizla =| Do txfP. i=1 Um algoritmo resultante desta notação matemática é mostrado na figura 1.2. Algoritmo Norma? (Objetivo: Calcular a norma-2 de um vetor ) parâmetros de entrada n, x ( tamanho do vetor e o vetor ) parâmetros de saída n2 ( norma-2 do vetor ) soma + O parai + laténfaça soma +- soma + (abs(x(1)))? fim para n2+ raizo(soma) fim algoritmo Figura 1.2: Norma-2 de um vetor x de tamanho n. (Ver significado das funções abs e raizz na tabela 1.1 na página 6.) Exemplo 1.15 A norma-oo ou norma de máxima magnitude de um vetor x de tamanho n é: lilo = gal. A figura 1.3 mostra um algoritmo para calcular a norma-oo. 1.2. Notação algorítmica = [ atgoritno NormaInf (Objetivo: Calcular à norma-oo de um vetor ) parâmetros de entrada n, x ( tamanho do vetor e o vetor |. parâmetros de saída ninf ( norma-co do vetor | ninf + abs(x(1)) parai +-2até n faça se absi(x(i)) > ninf então ninf + abs(x(i)) fim se fim para fim algoritmo Figura 1.3: Norma-co de um vetor x de tamanho n. (Ver significado da função abs na tabela 1.1 na página 6.) Exemplo 1.16 Seja o polinômio interpolador de Lagrange de grau n., definido por (3.6), na página 117: n n Z-T; Lala) = u H Ea io j=0 Ji Expandindo, resulta a Expressão 1, cujo algoritmo é mostrado nã figura 1.4: 2-2. Ef Ed E E Lnlx) = * ver n() E maets * Eyia t—Tn z-T z-m E + W+ + pal Mão ido t—Tn Zn-1 Tn-1 Considerando que o número de pontos m usados na interpolação é iguala n +1, onde n é o grau do polinômio, então a complexidade computacional do algoritmo da figura 1.4 é m Adições: 5) Xm — 1) +1=2m?-2m+m = 2An+1)?-(n41) = 20º +3n +41; i=l m Multiplicações: Sm -)=m*-m=(n+1P-(n+)=n" +; 1=1 Divisões: Sm -D)=m?-m=(n41P-(n+)=n"+m. i=1 16 Capítulo 1. Computação numérica | Algoritmo Lagrange Expressão 1 (Objetivo: Interpolar usando polinômio de Lagrange ) parâmetros de entrada m, X, y, 2 ( número de pontos, abscissas | f ordenadas e valor a interpolar ) parâmetros de saída r ( valor interpolado ) re-0 parait-latém faça D+ yli paraj + latém faça seizjentão pe p+((2—x(]))/(x(i) — x(5))) fim se fim para re-r+p fin para fim algoritmo Figura 1.4: Exemplo de algoritmo de polinômio de Lagrange. Estes resultados estão resumidos na tabela 1.6. Complsddade Adições 2n?+3n+1 Multiplicações | nº +n Divisões nn Tabela 1.6: Complexidade da interpolação de Lagrange. (m: grau do polinômio interpolador.) O polinômio de Lagrange também pode ser expandido de modo à resultar a Expressão 2: (r—-m)+(z—22)+...*(x— 2h) Elé) = pá te) = do (xo — 21) + (xo — 22) +...+ (zo — 2) Em (r=20)+(n=25) +. (2-2) “ay —20)+ (21 — 29) +... (71 — 27) RC E DR (za — no) * (in Fm) +...» (2a 2n-1) O algoritmo desta expressão é mostrado na figura 3.2, na página 120, e à sua complexidade computacional é compilada na tabela 3.2, na página 120. 1.3. Tipos de erros 7 belas 1.6 e 3.2, nota-se que o número de adições é o mesmo é o de multiplicações é da mesma ordem (n?). No entanto, o número de divisões utilizado pela Expressão 2 é de uma ordem de grandeza & menos. O polinômio de Lagrange serve para exemplificar que uma mesma notação ma- temática pode resultar em algoritmos de diferentes complexidades. Isto deve ser lembrado ao elaborar um algoritmo. Comparando os resultados das tal 1.3 Tipos de erros Durante as etapas de solução de um problema, surgem várias fontes de erros que podem alterar profundamente os resultados obtidos. E de importância funda- mental conhecer as causas desses erros para minimizar as suas consegiências. Erro de truncamento O erro de truncamento é devido à aproximação de uma fórmula por outra. E sabido que, para avaliar uma função matemática no computador, somente as quatro operações aritméticas podem ser requeridas, por serem as operações que ele é capaz de efetuar. Por exemplo, para avaliar f(x) = sen(x) esta tem que ser aproximada por uma série, tal como, E a o aê o wf seno) =D ma? TO Ha eiÉAs, aja À medida que n aumenta, mais o valor da série se aproxima do valor real. A tabela 1.7 mostra 2 diferença entre o valor obtido pela série de sen(7) e um valor mais exato, para n =2, 3e 4. Quando n aumenta, o erro de truncamento diminui, ficando claro que estes erros são devidos aos truncamentos da série. Ea q qnt »1) (E Ã sen(z) T [| n=2 [n=3 [ n=4 0 0 0 0 7/16 | 2,4x10-8 | 2,2x1079 | 1,2x10722 7/8 | 7,8x10-5 | 2,9x1077 | 6,1x10-10 7/6 | 33x10-* | 2,1x10-8 | 8,1x10-º x/4 | 2,5x1073 | 3,0x10-5 | 3,1,10-7 Tabela 1.7: Efeito do erro de truncamento no cálculo de sen(z). sa asucdá 20 Capítulo à. Computação numérica O zero é representado de uma forma especial: todos os dígitos d; do significando e do expoente são nulos. O mais importante a ser observado acerca dos números de ponto flutuante é que eles são discretos e não contínuos como um número real definido na Matemática, conforme pode ser visto na figura 1.5, Figura 1.5: Valores discretos dos números de ponto flutuante. O concéito de sempre existir um número real entre dois números reais quaisquer não é válido para os números de ponto flutuante. A falha deste conceito tem con- seqiiência desastrosa, conforme será mostrado a seguir. Considere a representação binária 0,810 = 0,100110011001...2 é 0,710 = 0,1011001100110...9. Se estes dois números forem armazenados naquele computador hipotético, eles serão representados igualmente como .10; x 2º. Isto significa que tanto 0,60 quanto 0,719 serão vistos como 0,519 por aquele computador. Esta é uma grande causa de erro de arredondamento nos processos numéricos. A forma de representação de um número de ponto flutuante depende do fabricante do computador, portanto um mesmo programa implementado em computadores que utilizam formatos diferentes pode fornecer resultados diferentes. O formato utilizado pela maioria dos microcomputadores e estações de trabalho é aquele proposto pelo IBEE (Institute of Electrical and Electronics Engineers), O qual é mostrado na tabela 1.8. à precisão propriedade simples | dupla | estendida. Comprimento total 32 64 so Bits na mantissa 23 52 o Bits no expoente 8 nu 15 Base 2 2 2 Expoente máximo 127 1023 16383 Expoente mínimo —126 —1022 —16382 Maior número =3,40x10%8 | =1,80x10%08 | =1,19x101932 Menor número =1,18x10738 | =:2,23x10-308 | =3,36x10-14932 Dígitos decimais 7 16 19 Tabela 1.8: Formato IEEE de ponto flutuante [26]. Se uma operação aritmética resultar em um número que seja maior em módulo que o maior número representável ocorrerá um overflow. Se, por outro lado, 1.4. Aritmética de ponto fiutuante a resultar em um número que em módulo seja menor que o menor número repre- sentável diferente de zero, ocorrerá um underflow. O modo de tratar overflow e underflow dependerá do compilador utilizado para gerar o programa. Será mostrada, a seguir, a precisão das operações numéricas envolvendo números de ponto flutuante. Para tal, será utilizado um outro computador hipotético-com dois dígitos (p = 2), base B = 10 para facilitar o entendimento, e expoente na faixa —5 00 10º. A subtração deu 0 em vez de 1. A perda de precisão quando dois números aproximadamente iguais são subtraídos é a maior fonte de erro nas operações de ponto flutuante. Exemplo 1.19 Somar 691 e 2,71. Capítulo 1. Computação numérica Os números são armazenados no formato especificado, as casas decimais são ali- nhadas e a operação de adição é efetuada. O resultado é arrendondado para dois dígitos: 691 + 2,71 = .69x10? + 27410! = 8 dO 0027 «10? 6927 103 —> 69 10º. A adição resultou em 690 em vez de 693,71. O deslocamento das casas decimais de 2,71 causou uma perda total dos seus dígitos durante a operação. 1+ Exemplo 1.20 Multiplicar 1234 por 0,016. Os números são armazenados no formato definido e a operação de multiplicação é efetuada, utilizando 2p = 4 dígitos na mantissa. O resultado é arrendondado para dois dígitos e normalizado: 1234 x 0,016 = .12x10! x .16x1071 = 12 10! x 16 101 = 0192 «102 > 49 102, O resultado da multiplicação foi 19 em vez de 19,744. Exemplo 1.21 Multiplicar 875 por 3172. Os números são armazenados no formato indicado e a operação de multiplicação é efetuada, utilizando 2p = 4 dígitos. O resultado é arrendondado, normalizado e como o expoente e = 7 > 5 (máximo definido para este computador hipotético), então ocorre um overflow: 875 x 3172 = .88x10º x .32x10! = .88 x10º x 32 x104 = 2816 x107 — overflow. A multiplicação resultou em um valor maior do que este computador pode repre- sentar. Exemplo 1.22 Dividir 0,00183 por 492. Os números são armazenados no formato especificado e a operação de divisão é efetuada utilizando 2p = 4 dígitos na mantissa, O resultado é arrendondado para dois dígitos e normalizado: 0,00183 + 492 = 18.102 = 4910! = 18 102 49 dO? = 3673 x105 => 37 «10. 1.4. Antrétic; a de ponto flutuante O erro relativo desse resultado foi de aproximadamente 0,52%. Exemplo 1.23 Dividir 0,0064 por 7312. Os números são armazenados no formato definido e a divisão é efetuada utilizando 2p =4 dígitos na mantissa. O resultado é arrendondado, normalizado e sendo o expoente e = —6 < —5, então ocorre um underfiow: 0,064 + 7312 = 641072 + 73,10! = .64 »1072 + 3 x10º = 8767 «1078 — underfiou. O resultado da divisão foi um valor menor que este computador pode armazenar, sem considerar o zero que tem uma representação especial. Além dos erros descritos na seção 1.3, uma outra causa de erros quando se usa um computador é devida à conversão de base. Geralmente, um número é fornecido ao computador na base 10 e, no entanto, ele é armazenado na base 2. Quando os números forem inteiros, a representação binária é exata, como, por exemplo, 449 = 1011002. No entanto, um número com decimais pode resultar em um número binário com infinitos dígitos (0,40 = 0,01100110...2) que têm que ser arrendondados para o armazenamento em um formato de ponto flutuante.