Este - Cálculo Numérico Computacional
Transcrição
Este - Cálculo Numérico Computacional
CÁLCULO NUMÉRICO COMPUTACIONAL. Tarcisio Praciano-Pereira1 Universidade Estadual Vale do Acaraú Sobral, 26 de janeiro de 2008 1 [email protected] Edições Lab. de Matemática Computacional Universidade Estadual Vale do Acaraú Sobral - Ce copyleft by Tarcisio Praciano Pereira Praciano-Pereira, Tarcisio P496c Cálculo Numérico Computacional. Sobral: UeVA, Sobral, 26 de janeiro de 2008 133.p Bibliografia ISBN:85-87906-05-4 1 - Linguagem - Computação C/C++ 2 - Cálculo Numérico. I. Tı́tulo CDD 515.1 Sumário 1 A derivada aproximada 1.1 derivada . . . . . . . . . . . 1.2 Quocientes de diferenças de ordem superior . . . . . 1.3 Polinômios de Taylor . . . . 1.4 Derivadas parciais . . . . . 1.5 Solução de alguns exercicios 1.6 Vocabulário . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Raı́zes aproximadas 2.1 Raı́zes por varredura . . . . . . . . . . . . . . 2.1.1 Método computacional básico . . . . . 2.1.2 Busca de raı́zes por varredura . . . . . 2.2 A troca de sinal . . . . . . . . . . . . . . . . . 2.2.1 Análise de um programa . . . . . . . . 2.3 Raı́z do tipo secante . . . . . . . . . . . . . . 2.3.1 Método da secante . . . . . . . . . . . 2.4 Quando a derivada é zero . . . . . . . . . . . 2.5 O método da tangente . . . . . . . . . . . . . 2.5.1 Como funciona o método da tangente 2.5.2 Quando o método não funciona . . . . 2.5.3 A precisão do método . . . . . . . . . 2.6 Método da busca binária . . . . . . . . . . . . 2.7 Encontrar raı́zes, sumário . . . . . . . . . . . 2.8 Interseção de gráficos . . . . . . . . . . . . . . 3 Recursividade 3.1 exemplos . . . . . . . . . . . . . . . . . . 3.1.1 raı́z quadrada . . . . . . . . . . . . 3.2 Fundamentos da convergência de iteradas 3.3 O algoritmo babibilônio é convergente . . 3.4 Exercı́cios . . . . . . . . . . . . . . . . . . 3.5 Solução de alguns exercicios . . . . . . . ii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 . . . . . 10 18 21 26 26 . . . . . . . . . . . . . . . 28 29 30 37 44 44 47 49 57 62 63 64 65 70 74 77 . . . . . . 82 82 88 89 91 93 94 4 Splines 4.1 Aproximação polinomial clássica . . . . . . 4.1.1 Análise de dois casos particulares . . 4.1.2 A solução geral do problema . . . . 4.1.3 Interpolação polinomial de Lagrange 4.2 Funções polinomiais por pedaços . . . . . . 4.2.1 sensor . . . . . . . . . . . . . . . . . 4.2.2 aproximação . . . . . . . . . . . . . 4.3 Quase-splines . . . . . . . . . . . . . . . . . 4.3.1 polinomiais . . . . . . . . . . . . . . 4.4 Valor médio integral . . . . . . . . . . . . . 4.5 Splines cúbicos . . . . . . . . . . . . . . . . 4.5.1 convolução . . . . . . . . . . . . . . 4.5.2 suporte compacto . . . . . . . . . . . 4.6 Solução de alguns exercicios . . . . . . . . 4.7 Vocabulário . . . . . . . . . . . . . . . . . . 5 Integral aproximada 5.1 soma de Riemann . . . . . . . . . . . . 5.1.1 Integração geométrica. . . . . . 5.1.2 Somas de Riemann . . . . . . . 5.2 Integral no sentido de Riemann . . . . 5.2.1 propriedades da integral . . . . 5.2.2 Cálculo “numérico” da integral 5.3 trapésio . . . . . . . . . . . . . . . . . 5.4 polinômios . . . . . . . . . . . . . . . . 5.4.1 Apresentação do método . . . . 5.4.2 Integral num sub-intervalo . . . 5.5 quasi-splines . . . . . . . . . . . . . . . 6 E.D.O. 6.1 Método de Euler . . 6.2 Método de Taylor . . 6.2.1 segundo grau 6.2.2 grau maior do . . . . . . . . . . . . . . . . . . que dois . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 102 105 115 124 126 127 129 135 135 137 142 144 151 158 163 . . . . . . . . . . . 169 170 170 171 178 180 183 189 191 192 192 199 . . . . 200 203 207 207 208 Índice Remissivo Alfabético 211 Bibliografia 211 iii Lista de Figuras 1 3 Retângulos para aproximar uma integral Uma aproximação spline de uma curva. 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 A pedra, quando o cordão se rompe 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11 2.12 2.13 2.14 Raı́zes de f no intervalo [α, β] Partição do intervalo I . . . 3.1 3.2 3.3 4.1 4.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix xi . . . . Taxa de variação . . . . . . . . . . . . . Dados obtidos com um sensor . . . . . . . Dados obtidos por um sensor mais preciso . Curva que interpola os dados . . . . . . . interpolação não linear . . . . . . . . . . Qual pode ser o gráfico de f ? . . . . . . . grafico de f analisando f ′ . . . . . . . . . Dados amostrais . . . . . . . . . . . . . Reta tangente ao gráfico de f . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2 5 6 7 8 9 17 18 20 . . . . . . . . . . . . Malha sobre uma região do plano . . . . Vários representantes da única raiz . . . O método das secantes . . . . . . . . . Fluxograma - método da secante . . . . . Num ponto de tangência, tipo parabólico . Quando a derivada é zero . . . . . . . . Uma sequência de retas tangentes... . . . . . . . . . . . . . . . . . . . . . área limitada por duas curvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 32 35 40 48 54 60 62 63 65 78 80 81 81 √ Determinação de 10 . . . . √ Ponto inicial menor do que a √ Ponto inicial maior do que a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 91 92 . . . . . . . . . Duas tangentes se reproduzindo indefinidamente Interseção de curvas . . . . . . . . . . . . . . Região cuja área queremos calcular área limitada por duas parábolas . . . . . . . . . . . . . . . . . . . . . 103 . . . . . . . . . . . . . . . . . . . . . . . . 104 Uma reta interpola dois pontos A reta e o fenômeno real iv 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11 4.12 4.13 4.14 4.15 4.16 4.17 4.18 4.19 Duas soluções do problema homogêneo O teorema do módulo máximo . . . . . . . . . . Aproximação linear por pedaços - 1-spline . interpolação polinomial dos pontos . . . . . Polinômio de Lagrange . . . . . . . . . . Aproximação de uma função . . . . . . . . 4.20 Regularização por convolução 5.1 5.2 5.3 Trapésios para aproximar área Soma de Riemann . . . . . . 5.4 5.5 5.6 área do trapésio é uma média aritmética 6.1 6.2 6.3 Uma poligonal-solução aproximada O método de Euler - uma poligonal . . . . . . . . . . . . Derivada, tangente e Teorema do Valor médio . Uma função positiva cuja integral é 1 . . . . . Definição geométrica - produto de convolução . O significado geométrico de três valores . . . . Correção pelo valor médio numa vizinhança de c Média viciada . . . . . . Núcleos ou pulsos unitários . . . . . . . . . . . . . . . . . . . . . quadrado de convolução da função caracterı́stica 2-splines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Comparação: polinômio de Lagrange e splines . Comparação: polinômio de Lagrange e splines - quando os nós ficam uniformente próximos. . . . . . . . . . . . . . . . . 106 107 109 112 118 130 134 143 144 146 147 148 152 154 166 167 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 . . . . . . . . . . . . . . . . . . . . . . 168 . . . . . . . . . . . . . . . . . . . . . . 172 . . . . . . . . . . . . . . . . . . . . . . 173 R3 2 retângulos da soma de Riemann para x + 2x + 1 . . . . . . . . . . . 185 −3 . . . . . . . . . . . . . . . . . 190 . . . . . . . . . . . . . . . . . . . . 197 Modelagem com polinômios por pedaços . . . . . . . . . . . . . . . . . 198 Gráfico do polinômio por pedaços solução aproximada de y ′ = − yx . . . . . . . . . . . . . . . . . . . 202 . . . . . . . . . . . . . . . . . . . 204 . . . . . . . . . . . . . . . . . . . . . 206 v Introdução Faça apenas uma leitura superficial desta introdução como primeira leitura. Volte a lê-la depois mais algumas vezes até que ela lhe pareça mais clara. No inı́cio será difı́cil entendê-la por completo, porque ela fala de assuntos que serão objeto do trabalho do livro. Mas, ainda assim, o seu lugar é aqui mesmo, no inı́cio.... O autor deste livro sente responsabilidade com @ leitor@ e quer disponibilizar material complementar que incluir no texto o deixaria demasiado longo. Para isto há uma página na Internet em que o material complementar do livro pode ser encontrado, entretanto os links para páginas na Internet podem mudar e o endereço do autor é mais estável, havendo dificuldade com algum link, me envie um e-mail para [email protected], mas não se esqueça de que eu não posso lhe dar cursos particulares via e-mail, use este recurso de forma cuidadosa. Há duas áreas muito produtivas e com objetivos e métodos diferentes em que se utiliza o computador para fazer Matemática ou para aplicar Matemática: • Matemática aplicada e computacional, é a terminologia brasileira, que ainda se chama de computação cientı́fica; Um ramo da matemática aplicada e computacional é análise numérica que é onde se encontra a nossa disciplina, o cálculo numérico. O nosso trabalho se enquadra, portanto, nesta área, computação cientı́fica e neste caso os programas que usamos como auxiliares, neste livro são scilab, gnuplot, calc, e algumas linguagens de programação como C, C++, Python. Todos estes itens podem ser, em geral, encontrados nas distribuições Linux. • Computação algébrica que tenta, com razoável sucesso, substituir o cálculo aproximado pelo cálculo formal. Representantes deste trabalho são – Maxima um pacote de computação algébrica de domı́nio público que em geral é encontrado nas distribuições de GNU/Linux ; – Pari um pacote de computação algébrica voltado para Álgebra, de domı́nio público; – MuPad um pacote de computação algébrica publicado por um grupo de matemáticos da Universidade Paderborne (Alemanha) que é distribuido com uma licença amigável para usuários individuais, mas normalmente vendido; – Maple um pacote de computação algébrica publicado por um grupo de universidades do Canadá e Estados Unidos, que é vendido por um preço não muito acessı́vel; – Reduce que é semelhantes ao MuPad, do ponto de vista de distribuição; vi e há outros que são francamente comerciais e não vemos razão para citá-los aqui. A sintaxe usada no Maxima, MuPad, Maple é muito semelhantes, de modo que quem já usou algum deles, facilmente migra para outro, e naturalmente, sugerimos que se migre para Maxima que é distribuido sob GPL. Metodologia de comunicação O texto é completado com observações de dois tipos. Um dos tipos se chama claramente “observação”, o outro são as notas de rodapé. Você deve ler as observações na ordem em que elas aparecerem, mas sem lhes dar muita importância numa primeira leitura. Em geral elas são apresentadas com letra pequena, para salientar o fato de que você lhe deve dar pouca atenção, numa primeira leitura. Para lhe permitir uma busca mais acurada de informações, o livro tem um ı́ndice remissivo alfabético, ao final, em que todos os conceitos que surgem nas observações se encontram indexados, de forma que você poderá facilmente retornar a eles quando achar necessário. Também se encontram indexadas todas as palavras-chave do texto. Quando falamos usamos encenação para completar o sentido das palavras usadas no discurso: mexemos as mãos, o corpo e alteramos a entonação da voz. Para suprir um pouco deste teatro usaremos uma convenção tipográfica: texto em itálico representa material que você deve olhar com cuidado, possivelmente não está definido ainda e estamos usando a concepção intuitiva do termo. Quando usarmos texto tipográfico estaremos fazendo referência a um termo técnico já definido anteriormente ou considerado bem conhecido como tal. As palavras da linguagem C serão escritas no estilo tipográfico. Quan-do usarmos letra pequena estamos lhe querendo dizer que o assunto é polêmico e que há muito mais coisa para ser dito do que estamos conseguindo dizer naquele momento. Usamos texto sublinhado para chamar sua atenção de um detalhe que poderia passar desapercebido, tem o mesmo sentido texto em negrito. O que é Cálculo Numérico Acima dissemos que este livro é sobre Cálculo Numérico e queremos agora dizer-lhe qual é o planejamento do nosso trabalho, porque há muitas formas de desenvolver esta disciplina e nós vamos escolher uma que não precisa ser melhor do que qualquer outra, apenas traduz a nossa preferência. Se você gostar do nosso trabalho, insistiremos em que leia outros autores para completar a sua visão. • De uma forma simplificada é repetir o Cálculo Diferencial e Integral calculando, aproximadamente, aquilo que é obtido formalmente na outra disciplina; • Resolver, numéricamente, algumas questões que o Cálculo consegue apenas mostrar que tem solução; Por exemplo; – determinações de valores, números, raizes de equações para os quais o cálculo formal pode ser longo ou muito complexo, isto é feito aqui no capı́tulo 0. vii – criação de modelos semi-formais para representar dados de um fenômeno, este é o objeto do capı́tulo 0 mas o capı́tulo 0 também representa este item. – cálculo de algumas integrais para as quais não existem fórmulas, este é objeto do capı́tulo 0. – soluções aproximadas de equações diferenciais, isto é feito aqui, muito moderadamente, no capı́tulo 0, é somente uma introdução. • Associar uma linguagem de programação, ou pacotes computacionais para realizar o projeto acima descrito. Vamos discutir detalhadamente cada um dos tópicos que levantamos anteriormente. É preciso lembrar que não é fácil explicar o desconhecido e até poderiamos questionar a validade de uma introdução como esta. A idéia de tentar explicar o que faremos tem sentido ainda assim, porque em parte estamos falando de tópicos que os leitores deste livro já estudaram, no Cálculo Diferencial e Integral e cujos aspectos esta disciplina irá desenvolver com outro objetivo. Mas estamos nos referindo a itens novos também e a razão é lhe oferecer um plano do trabalho. Suas perguntas, entretanto, podem fornecer ao expositor “ganchos” valiosos na tentativa de deixar as coisas mais claras. O autor também se sentirá agradecido se os leitores tiverem a bondade de lhe mostrar o que não gostaram no texto. Raı́zes de uma função Este é o assunto do capı́tulo 0. Para a determinação das raı́zes de uma função vamos fazer uso de programas que apresentaremos resumidamente no texto. Os programas se encontram disponı́veis em endereço citado na biliografia. A busca de raı́zes é um assunto que não é diretamente discutido nos Cursos de Cálculo. Cálculo de integrais O cálculo de integrais é um dos itens mais importantes do Cálculo Diferencial e Integral. Sua importância supera a própria conceituação da integral, como cáculo de área ou volume. A integral é um método que se insere em outras definições, um exemplo bem simples disto são os conceitos qualificados com “quantidade de”, como é o caso de • quantidade de movimento; • quantidade de exposição à irradiação; • número de moléculas ou virus em determinado vetor. Aqui há duas versões do problema: • há integrais que não sabemos calcular formalmente, viii • ou, mesmo sabendo, o cálculo formal é muito complexo ou longo para certas aplicações, como nas telecomunicações, por exemplo. e o resultado é que se torna mais prático calcular estas integrais aproximadamente. Um dos instrumentos para o cálculo aproximado de integrais é a Soma de Riemann. Como instrumento, está longe de ser o melhor, mas os métodos melhores usam-na como método auxiliar. Porisso começaremos por discutı́-la. Veja na figura (fig. 1), o que é uma soma de Riemann. Soma de Riemann para f; passo=0.2 10 ’data’ 8 6 4 2 0 -2 -3 Figura 1: -2 -1 0 1 2 3 Retângulos para aproximar uma integral Nela você pode ver o domı́nio de integração subdividido em diversos intervalos e um retângulo associado a cada um destes sub-intervalos. A soma das áreas dos retângulos é uma aproximação para a integral desejada. Que precisamos para fazer este cálculo ? Quais são as técnicas envolvidas no cálculo de uma integral usando Somas de Riemann ? • Uma coleção de retângulos, devidamente dimensionados, representam uma área que aproxima a área de uma determinada função. • Um programa de computador permite o cálculo rápido de somas e portanto cria as condições para que usemos retângulos com bases ı́nfimas o que nos conduz a uma grande aproximação. Análise e controle de variação Um exemplo tı́pico, e bem atual, é o da qualidade da corrente elétrica que uma determinada instituição, um hospital, por exemplo, recebe da rede pública (manipulada por empresas privadas...) Veja o gráfico na figura (fig. ??), Como se poderia tratar este problema ? Qual é o problema ? quais são as ferramentas ? Surpreendemente, há uma superposição de técnicas a serem usadas aqui e no problema que discutimos anteriormente. Mas há técnicas novas também. Vamos rapidamente analisar o que precisamos. Deixando de lado a coleta de dados, que deveria ser feita por uma placa apropriada instalada em um computador, vamos resolver o problema a partir ix dos dados colhidos. Estamos indicando ao lado de cada uma das etapas o departamento cientı́fico responsável pela mesma. Chamamos isto de divisão do trabalho. 1. Leitura e digitalização de dados analógicos recebidos da placa coletora de dados (a digitalização pode ser trabalho da placa); (Computação, Engenharia Elétrica ) 2. Cálculo da variação da tensão criando uma série temporal com estes dados; (Cálculo Numérico e Estatı́stica) 3. Comparação dos piques de tensão com valores maximais selecionados como suportáveis. (Cálculo Numérico Engenharia elétrica) 4. Decisão, em tempo real, sobre conexão ou desconexão de aparelhos, com desvio para nobreakes ou outro tipo de alimentação de segurança. (Computação e Engenharia Elétrica); 5. O cálculo de uma integral faz o registro do consumo da energia elétrica recebida... (quantidade de energia que passou pela placa controladora), calcula médias, desvios. (Cálculo Numérico Tangente, derivadas. Para que servem. Examine a figura (fig. 1.1), página 2. Tangentes e derivada servem pelo menos para colher mangas maduras de árvores. Mas podemos, partindo deste exemplo, atingir um uso mais sofisticado. Como poderiamos colher mangas maduras usando derivada ? Indiretamente, é claro. A figura (fig. 1.1) sugere alguma coisa. Queremos lançar uma pedra, amarrada a um cordão, de modo que o cordão fique preso próximo a um conjunto de mangas. Rodamos a pedra preza ao cordão até que ela atinja uma velocidade angular razoável. Quando a pedra, em seu caminho sobre o “cı́rculo”se encontrar na posição adequada, soltamos o cordão que irá acompanhar a pedra se alojando entre as mangas. Usamos o coeficiente angular instâneo da pedra percorrendo o ‘cı́rculo”para escolher a direção certa. O mecanismo é o mesmo quando um computador vai dirigir a trajetória de um foguete. Com as informações guardadas na memória do computador sobre o mapa da Terra em sua órbita, o computador calcula a cada milésimo de segundo qual deve ser o coeficiente angular relativo do eixo do foguete e desta forma vai corrigindo a rota que levara a nave ao seu destino. O pilôto automático dos grandes aviões comerciais fazem algo parecido. Ao partir o pilôto humano coloca o avião na direção do aeroporto de destino. O piloto automático vai medindo o erros de rota impostos pelo fluxo do ar e calculando a direção para corrigir o erro. Aproximação polinomial de curvas As funções nos fornecem dados dinâmicos sobre diversos fenômenos. Mas nem sempre a natureza se conforma à matemática como nós gostariamos... x A solução é fazermos aproximações para os fenômenos naturais. Há diversos tipos de aproximações vamos analisar uma delas aqui, splines. Splines são uma melhora considerável dos polinômios de Taylor. Precisaremos deste assunto de Cálculo para desenvolver esta forma de aproximação que uma aproximação polinomial por pedaços. A figura (fig. 3) ilustra este tipo de aproximação usando polinômios do primeiro grau o que resulta numa poligonal. O objetivo do curso Discutir os problemas 180 ’data’ do Cálculo Diferencial e 160 140 Integral de modo a en120 contrar soluções aproxi100 madas para este proble80 mas. 60 Questionar a validade 40 20 destas aproximações. 0 Criar a sensação de -20 -20 -15 -10 -5 0 5 10 15 20 que a solução exata pode ser um mito. Linguagem de programação Vimos que métodos com- Figura 3: Uma aproximação spline de uma curva. putacionais são essenciais para desenvolvermos as aproximações. Os alunos, seja do curso de Computação, ou do curso de Matemática ou das Engenharias, já deveriam conhecer uma linguagem de programação, a esta altura. Infelizmente isto raramente é verdade. Mas achamos que é preciso forçar a barra, como temos feito com os nossos alunos de Cálculo Numérico, com resultados positivos: ao final do segundo mês de aula a maioria deles já sabe fazer programas e inclusive planejar um pequeno pacote, claro, isto pressupõe que eles tenham acesso a computadores. Na metologia que temos empregado os programas crescem de nı́vel de modo que, se o aluno se empenhar em entendê-los, ficará gradualmente no nı́vel dos mesmos. Nas duas ou tres primeiras semanas temos mantido a preocupação de explicar detalhadamente os programas. Mas aos poucos vamos deixando que o leitor comece a voar sozinho...obviamente, na companhia de um bom livro sobre uma linguagem de programação, e também sob a hipótese de que ele irá encontrar sempre um “hacker”a sua volta no laboratório de computação de modo a lhe tirar algumas dúvidas (e lhe implantar mais uma dezena...). Vamos adotar a linguagem C, mas ninguém deve se sentir obrigado a nos acompanhar nesta escolha. Use o que houver à sua mão, aquilo que ficar mais fácil, mas que os alunos aprendam a programar. As linguagens de programação de um certo tipo todas se parecem de formas que quando apresentarmos um programa em C facilmente ele poderá ser transformado para a linguagem preferida do leitor. xi Como é que se aprende uma linguagem ? Primeiro que tudo metendo a cara, depois perguntando muito a quem já sabe um pouco mais, e sem dar muita importância ao semblante de incomodado que algumas pessoas possam fazer... quem sabe um pouco mais, aprendeu perguntando aos outros. Pergunte! incomode inclusive o professor! use o seu endereço eletrônico para tirar suas dúvidas, mas não se esqueça de que será o seu esforço pessoal que será decisivo. Procure economizar a paciência dos outros, tente descobrir você sozinho como fazer as coisas. Este é seguramente o melhor aprendizado: quando você mesmo descobre. Estamos convencido de que o uso de computação no ensino de Matemática enriquece fortemente a experiência do aluno porque permite introduzir uma dinâmica que giz e quadro nã conseguem mais gerar ante uma nova mentalidade gráfica que está presente em nós todos. Isto vale para qualquer outra profissão e nós não tentariamos convencer os alunos de computação desta verdade. Vamos listar algumas linguagens de programação parecidas com C 1. Pascal, e você certamente vai encontrar [18] na biblioteca que lhe pode conduzir a dominar esta linguagem. 2. Python, é uma linguagem de domı́nio público que se encontra disponı́vel em todo sistema Gnu/Linux. Nestes sistemas você encontra um tutorial sobre esta linguagem no diretório /usr/doc/python/tutorial. 3. Java, praticamente de domı́nio público, se encontra disponı́vel em todo sistema Gnu/Linux 4. Computação Algébrica. • Domı́nio público ou relativamente livres MuPad, Reduce, Maxima • Comerciais - não aconselhamos! Maple, Derive 5. Cálculo Numérico, domı́nio público SciLab Octave 6. Cálculo Numérico, comercial MatLab. Scilab, Octave fazem tudo que MatLab faz. Os programas distribuidos sob o GPL, General Public License, são de excelente qualidade. Ninguém mais precisa, hoje, pagar, para ter um computador funcionando, além do preço da máquina... Este livro, todos os programas que o acompanham, todo o trabalho de pesquisa do autor, se desenvolve inteiramente com programas de domı́nio público rodando em ambiente Linux. xii Capı́tulo 1 A derivada aproximada A taxa de variação de f é uma das informações mais importantes que podemos ter sobre um fenômeno descrito por f . O Cálculo Diferencial e Integral define a derivada, usando o limite da taxa de variação ou a taxa de variação instantânea A taxa de variação é definida por um quociente de diferenças e esta é a definição básica que iremos usar neste capı́tulo. 1.1 Quociente de diferenças Uma função f é diferenciável se em cada ponto do domı́nio o gráfico graf (f ) tiver uma reta tangente A reta tangente no ponto (a, f (a) tem um coeficiente angular m e nós diremos que f ′ (a) = m. A função derivada, f ′ é uma outra função que descreve as derivadas de f e portanto as taxas de variação instantâneas de f . No Cálculo dizemos que a derivada define a reta tangente ao gráfico, aqui preferimos inverter a forma de falar porque vamos criar modelos, funções, a partir de dados amostrais e a taxa de variação será frequentemente um desses dados amostrais. Este primeiro capı́tulo é dedicado a uma revisão do Cálculo Diferencial e Integral e de programação como um alerta daquilo que você precisa saber para o desenvolvimento dos demais capı́tulos. Observe a figura (fig. 1.1) em que estamos simulando o que acontece com uma pedra que alguém esteja rodando presa a um cordão e que, num certo momento, o cordão (provavelmente podre) se rompa. A pedra “memoriza” o último coeficiente angular que o seu movimento tinha sobre o cı́rculo e segue em movimento uniforme não acelerado1 pela reta tangente. Assim o coeficiente angular da reta tangente é o coeficiente angular instantâneo da trajetória da pedra no cı́rculo. 1 falso, obviamente, porque a aceleração da gravidade está presente 1 CAPÍTULO 1. A DERIVADA APROXIMADA 2 Aqui se quebrou o cordão Ao se quebrar o cordão, a pedra sai pela tangente Figura 1.1: A pedra, quando o cordão se rompe Se f representar a parte da equação do cı́rculo onde vemos a pedra ainda presa ao cordão, e t1 for o valor do parâmetro no ponto em que o cordão se rompeu, então f ′ (t1 ) é a derivada de f no ponto (t1 , f (t1 ))) (1.1) Para dizer o mesmo que dissemos acima, o professor de Cálculo considera a seguinte figura (fig. 1.2) em que podemos ver uma reta tangente e três retas Tangente e uma sucessão de secantes a a+h (f(a+h)−f(a))/h Taxa de variação Figura 1.2: Taxa de variação secantes. As retas secantes são aproximações da tangente. Na figura (fig. 1.2) estão indicados apenas dois valores para o parâmetro a, a + h mas temos alı́ as secantes correspondentes a três valores: a1 , a2 , a3 e o o cálculo do coeficiente angular, das secantes, é feito assim: m1 = m2 = f (a1 )−f (a) a1 −a f (a2 )−f (a) a2 −a (1.2) (1.3) 3 CAPÍTULO 1. A DERIVADA APROXIMADA m3 = f (a3 )−f (a) a3 −a (1.4) Quanto mais próximo estiver ai de a mas preciso será o valor do coeficiente angular da secante, relativamente ao desejado coeficiente angular da tangente. Veja mais abaixo onde estamos explicando um método prático para cortar um cı́rculo em um folha de papel como um exemplo do que é aproximação. O coeficiente angular da tangente é o limite das taxas de variação. Como nem sempre podemos calcular o limite, seja recortando cı́rculos em papel (ou colocando foguetes em órbita), muita vezes temos que nos contentar com o coeficiente angular de uma reta secante, tentando minimizar o erro disto decorrente, ou tentando corrigir o erro ao longo do processo. Relembrando a equação da reta tangente f (x1 )−f (a) ≈ f ′ (a) x1 −a f (x1 )−f (a) = m = ∆f = ∆a (f ) x1 −a ∆x y1 − y0 = f (x1 ) − f (a) = m(x1 − a) f (x) − f (a) = f ′ (a)(x − a) + o(x − a) f (x) − f (a) ≈ f ′ (a)(x − a) y − f (a) = f ′ (a)(x − a) (1.5) (1.6) (1.7) (1.8) (1.9) (1.10) Vamos parar um pouquinho nas últimas equações. • A equação 7 representa a relação entre os lados de um triângulo sobre a reta secante que passa nos pontos (a, f (a)), (x1, y1 ). • As equações 8 e 9 são equivalentes, representam a aproximação que a reta tangente fornece para os valores de f . Na equação 8 o erro está representado com a notação o(x − a), o “o pequeno de Landau”2 • Na equação 8 estamos indicando com o termo corretor o(x − a) que a equação da reta fornece o valor de f (x) com este erro: o(x − a) • A última equação, 10, é simplesmente a equação da reta tangente: y − b = m(x − a) ; b = f (a), m = f ′ (a) Escrevemos a equação 8 com o termo corretor, o(x − a) porque a expressão y − f (a) = f ′ (a)(x − a) (1.11) é a equação de uma reta e o gráfico da função não precisa ser uma reta3 então a igualdade representada pela reta está errada e é isto que estamos representando com o termo de correção o(x − a). É uma forma prática de indicar que existe um erro sem precisar entrar no detalhe do valor do erro. 2 A notação dos “o s de Landau” nos ajudam a falar de aproximação de uma forma prática escondendo a precisão, veja mais a respeito no ı́ndice remissivo 3 compare as equações 8 e 10 CAPÍTULO 1. A DERIVADA APROXIMADA 4 Observação 1 Porque falar em “aproximação” Falaremos seguidamente de “aproximação”, neste livro. Podemos dizer que Cálculo Numérico faz de forma aproximada o que o Cálculo Diferencial e Integral diz que faz exatamente. Porque falar que as secantes são aproximações da tangente? Veja a seguinte experiência que você certamente já fez4 . Suponha que você deseje recortar um cı́rculo em papel. A geometria nos ensina que as tangentes a um cı́rculo são perpendiculares ao raio. Assim, se Posição da tesoura, perpendicularmente, ao raio do círculo quisermos recortar um cı́rculo em papel, devemos marcar o centro e ir mantendo a tesoura a distância constante do centro e sempre perpendicular a uma reta (imaginaria...) que parte do centro. Mas, quando você aciona a tesoura, você corta um “pequeno” segmento de reta, que dizer que você está na verdade recortando um polı́gono com um número de lados tão grande que lhe parece que o resultado é um cı́rculo. Você não está “cortando” tangentes, mas sim secantes. Mas você queria que fossem tangentes. O resultado é uma aproximação e você, em geral, ficará satisfeito com ela. Mas não é apenas uma situação tão simples quanto recortar cı́rculos em papel que nos interessam. Há situações bem mais importantes, como como colocar um satélite em órbita para tornar possı́vel as comunicacações. O método é bem parecido com o da construção de cı́rculos em papel com tesoura. No capı́tulo final, quando discutirmos equações diferenciais, estaremos mostrando como é parecido, recortar cı́rculos em papel, e colocar um foquete em órbita em que um computador, substituindo a tesoura, estará corrigindo a trajetória do foquete e fazendo-o percorrer “pequenos segmentos de reta” de algumas centenas de kilómetros. Corrigindo assim a trajetória para que o foguete atinja uma órbita (elı́ptica ) desejada. Portanto, para aprender a colocar foguetes em órbita no último capı́tulo, vá logo treinando com papel, tesoura e cı́rculos... O Cálculo Diferencial e Integral algumas vezes deixa uma sensação de que derivadas e integrais podem ser sempre calculadas exatamente. O Cálculo tem a sua função e aqui nós temos a nossa de corrigir o otimismo do Cálculo. Vejamos 4e se não tiver feito, use a primeira oportunidade para executar a experiência que estamos aqui relatando... 5 CAPÍTULO 1. A DERIVADA APROXIMADA no seguinte exemplo como podemos usar “derivadas aproximadas” como a única opção disponı́vel. Exemplo 1 Sensor e levantamento de dados Veja na figura (fig. 1.3) página 5, Dados amostrais x 1 x x 2 Figura 1.3: x4 3 x 5 Dados obtidos com um sensor Lendo a figura podemos dizer, sobre o fenômeno descrito, que • houve um descrescimento de x1 para x2 ; • de x2 em diante o fenômeno apenas cresceu; • houve um crescimento considerável entre x3 para x4 ; • o crescimento entre x4 para x5 foi relativamente reduzido. Mas esta impresão visual poderia ser tornada efetiva se usassemos um sensor de geração mais recente que fosse capaz de fazer micro medições ao redor de cada ponto, veja na figura (fig. 1.4) página 6, Na figura (fig. 1.4) estamos indicando que, em cada um dos pontos que o sensor mediu, ele também fez três medições a pequenos intervalos de tempo. Estas “micro-medições” nos permitem calcular a taxa de variação do fenômeno em cada um dos pontos: f (x12 )−f (x11 ) x12 −x11 f (x22 )−f (x21 ) x22 −x21 ; ; f (x13 )−f (x12 ) x13 −x12 f (x23 )−f (x22 ) x23 −x22 (1.12) (1.13) 6 CAPÍTULO 1. A DERIVADA APROXIMADA Dados amostrais refinados x 51 x 1 x x 2 x4 3 x x 52 x 53 5 foram tomadas três medidas medidas em cada um x x dos pontos: x i1 i3 i2 Figura 1.4: Dados obtidos por um sensor mais preciso f (x32 )−f (x31 ) x32 −x31 f (x42 )−f (x41 ) x42 −x41 f (x52 )−f (x51 ) x52 −x51 ; ; ; f (x33 )−f (x32 ) x33 −x32 f (x43 )−f (x42 ) x43 −x42 f (x53 )−f (x52 ) x53 −x52 (1.14) (1.15) (1.16) Além de sabermos o valor no ponto, podemos calcular a “derivada aproximada” da função que descreve o fenômeno. O Cálculo nos ensina que tudo pode ser descrito por alguma função, e isto é certı́ssimo, apenas nem sempre as funções tem equações algébricas que possamos derivar. Algumas vezes tudo que sabemos sobre estas funções são valores colidos por um sistema de amostragem, como as figuras que acabamos de comentar indicam. Para terminar o exemplo, vejamos mais duas figuras. A figura (fig. 1.5) página 7, nos apresenta uma interpolação linear dos dados, quer dizer, tudo que sabiamos eram os valores obtidos em cada ponto, e os segmentos de reta alı́ desenhados nos sugerem qual poderia ser o valor do fenômeno em pontos intermediários entre aqueles em que foram tomados medidas. Veja agora na próxima figura, (fig. 1.6) página 8, em que, usando as taxas de variação obtidas em cada um dos pontos, pudemos traçar uma curva não poligonal5 interpolante descrevendo melhor o que acontece nos pontos intermediários. 5 retas, são curvas, poligonais, são curvas, e tem curvas que não retas... 7 CAPÍTULO 1. A DERIVADA APROXIMADA Interpolação linear dos dados x 1 x 2 Figura 1.5: x 3 x4 x 5 Curva que interpola os dados Vamos ver como fazer isto no capı́tulo 0, esta curvas interpolantes serão pedaços de polinômios. Agora, com as taxas de variação podemos descrever melhor o fenômeno medido. Lendo o gráfico contido na figura (fig. 1.6), podemos dizer • Há um ponto de mı́nimo do fenômeno entre os pontos x1 e x2 ; • o crescimento abrupto que parecia acontecer entre x3 e x4 de fato acontece num pequeno pedaço deste intervalo, a partir do ponto médio. • também houve um crescimento abrupto próximo do ponto x5 . Observe que a interpolação linear não nos permitia tecer nenhuma dessas considerações. Sem o conhecimento da taxa de variação em cada um dos pontos, tudo que podemos fazer é uma interpolação linear que descreve um comportamento uniforme entre os pontos em que as medições foram feitas. Este exemplo nos mostra uma situação bem concreta do dia-a-dia em que a derivada formal seria inútil6 . A derivada tem que ser obtida aproximadamente a partir de algumas medições finas tomadas em alguns pontos escolhidos. O exemplo também nos mostra a importância da derivada como informação complementar. 6 mas se você estiver deduzindo que o estudo do Cálculo é inútil, engana-se. Precisamos de teorias formais, para produzir a técnica e as aproximações, mas isto é uma história mais longa, envolva o professor nesta discussão... 8 CAPÍTULO 1. A DERIVADA APROXIMADA Interpolação não linear dos dados x 1 x x 2 foram tomadas três medidas em cada um x x dos pontos: i1 i2 Figura 1.6: x4 3 x x 5 i3 interpolação não linear E o qual seria a taxa de variação a ser considerada em cada um dos pontos? Temos três medidas, logo duas taxas de variação. Aqui entra em cena uma decisão tı́pica de quem cria modelos para fenômenos. A média é uma melhor opção, ela corrige possı́veis erros de medidas. Um bom sensor tomaria não tres medições mas certamente uma dezena de micromedições o que permitiria uma boa média. Voltaremos a discutir interpolação mais a frente. Resumindo, • ∆a (f ) = ∆f ∆x representa o coeficiente angular de uma reta secante que desejamos que seja uma aproximação da reta tangente; • f ′ (a) é o coeficiente angular da reta tangente ao gráfico de f no ponto (a, f (a)). • Usaremos, quando a técnica nos permitir, o valor médio de uma coleção de taxas de variação, obtidas com micro medições, para representar (aproximar) f ′ (a). Nos exercı́cios seguintes, você será solicitado a calcular a derivada aproximada de funções cuja derivada você sabe calcular exatamente. Desta forma você poderá comprender melhor a derivada aproximada, comparando-a em casos em que temos a derivada exata disponı́vel. 9 CAPÍTULO 1. A DERIVADA APROXIMADA Exercı́cios 1 Derivada aproximada Notação ∆a (f ) = f (a+∆x)−f (a) ∆x 1. micro medições Considere a função f (x) = (x + 3) ∗ (x − 4) e no ponto x = 3 considere as “micro-medições” (3, f (3)), (3.01, f (3.01)), (3.02, f (3.02)). (3) (3.01) Calcule ∆3 (f ) = f (3.01)−f e ∆3.01 (f ) = f (3.02)−f e a média aritmética 0.01 0.01 ∆3 (f )+∆3.01 (f ) ′ . Compare o resultado com f (3) 2 2. micro medições Repita a questão anterior com o ponto x = 4 com ∆x = 0.001 3. Sabendo que f (−1) = 3, f ′ (−1) = −1 qual dos gráficos na figura (fig. 1.7) página 9, corresponde ao gráfico de f . Justifique sua resposta. f f −1 −1 Figura 1.7: Qual pode ser o gráfico de f ? 2 4. Calcule ∆a (f ) = ∆f ∆x com f (x) = x + 3x + 2 no ponto x = a e com os valores de ∆x indicados x=a 1 2 1.5 ∆x 0.1 0.1 0.1 ∆x 0.01 0.01 0.01 ∆x 0.001 0.001 0.001 5. Complete a tabela, calculando a diferença (o erro) D = |f ′ (a) − ∆a (f )| = 2 |f ′ (a) − ∆f ∆x |x=a | com f (x) = x + 3x + 2. 10 CAPÍTULO 1. A DERIVADA APROXIMADA x=a 1 2 1.5 ∆x 0.001 0.001 0.001 |f ′ (a) − ∆a (f )| 6. A seguinte listagem de valores foi obtido por um sensor para os valores de na vizinhança de um ponto. Calcule a derivada média. ∆a (f ) = ∆f ∆x 0.99884447020655558927 0.99945892356272536761 0.99976592143543602562 0.99991936316018971376 7. Um sensor apresenta a seguinte saı́da de dados em que o primeiro valor é f (a) e os quatro seguintes são ∆a (f ) = ∆f ∆x na proximidades do ponto x=a. (a) Construa, gráfica e algebricamente, a interpolação linear dos dados. (b) Construa, gráfica e algebricamente, uma interpolação não linear da amostragem com quatro dados obtidos pelo sensor em cada ponto. a −1 0 1 2 3 ∆a (f )(1) −0.667 −0.002 −0.812 −2.926 −5.895 ∆a (f )(2) −0.701 −0.001 −0.774 −2.861 −5.816 ∆a (f )(3) −0.719 −0.000 −0.755 −2.828 −5.776 ∆a (f )(4) −0.728 −0.000 −0.746 −2.812 −5.756 f(a) 3 -5 -7 -14 -20 8. Faça um programa que liste os valores de ∆a (f ) de de f ′ (a) para alguns valores de um um intervalo. Use um while() para controlar uma lista de valores. solução derivadas.c, [20]. 1.2 Quocientes de diferenças de ordem superior Se calcularmos a diferença entre dois quocientes de diferenças sucessivos ∆2a (f ) = ∆a+∆x (f ) − ∆a (f ) ∆x estaremos obtendo uma aproximação da segunda derivada. Este é um quociente de diferenças de segunda ordem. Como não podemos calcular a derivada formal, em nossos programas de cálculo numérico, resta-nos a tentativa com os quocientes de diferenças. Aqui 11 CAPÍTULO 1. A DERIVADA APROXIMADA vamos discutir os quocientes de diferença de segunda ordem ∆a+∆x (f )−∆a (f ) = ∆x (a) (a+∆x) − f (a+∆x)−f ( f (a+2∗∆x)−f ∆x ∆x (a+∆x)+f (a) = f (a+2∗∆x)−2∗f ∆x2 ∆2a (f ) = (1.17) =)/∆x (1.18) (1.19) Não havendo dúvida7 nós usaremos uma notação mais simples para os quocientes de diferença de segunda ordem: ∆2 (f ) = ∆2a (f ) (1.20) Enquanto que os quocientes de diferenças de primeira ordem são razoavelmente precisos, quando passamos aos de segunda ordem, é preciso ter muito cuidado com os resultados porque a precisão cai. Veja seguinte listagem obtida com a função: f (x) = (1 − x2 )sin(x/4) Usamos um programa feito em calc que tem uma sintaxe semelhante a da linguagem C, é o programa deriva02.calc que você pode encontrar em [20, programas.tgz]. A listagem foi editada e resumida, você pode rodar e alterar o programa para ganhar mais experiência. Não tema extragar os programas, eles estarão na página à sua diposição quando você cometer erros e não souber como corrigı́-los, aprenda, tranquilamente, a alterar os programas. O programa derivada02.calc produz uma saı́da de dados pronta para usar em um texto com LATEX. Experimente a versão derivada03.calc que produz o resultado no terminal. As funções d2f() e ddf() são idêndticas. ddf() calcula o quociente de primeira ordem da função df(), que calcula o quociente de primeira ordem de f(), corresponde a equação (17), d2f() calcula diretamente o quociente de segunda ordem usando f(), corresponde a equação (19). Intervalo [0, 10], passo 1, Delta = 0.000001 x 0 1 2 3 4 5 6 7 8 9 d2f -0.000001520000 -1.463721700812 -2.624124797793 -3.217524857357 -3.055271491335 -2.051102544324 -0.237390644956 2.231711106131 5.090941230838 7.987785378986 ddf -0.000001520000 -1.463721700812 -2.624124797793 -3.217524857357 -3.055271491335 -2.051102544324 -0.237390644956 2.231711106131 5.090941230838 7.987785378986 exata -0.5 -1.463720340220 -2.185332631556 -2.485835877783 -2.244818686029 -1.420459396864 -0.060549895849 1.696970169472 3.634424528937 5.475087704277 7 ∆(f ), um quociente de diferenças, e ∆f = f (x ) − f (x ), uma diferença, como ∆x = 2 1 x2 − x1 12 CAPÍTULO 1. A DERIVADA APROXIMADA Podemos ver nesta listagem erros da ordem de 300% no cálculo aproximado da derivada segunda, e o caso quando x = 6 ou de 3289% quando x = 0 o que mostra que não podemos confiar em cálculos aproximados da segunda derivada usando quocientes de diferença. Mas veremos no capı́tulo 0 que conseguimos modelar com boa precisão dados discretos (obtidos com sensores) usando apenas aproximações da primeira derivada, esta sim, calculada com quociente de diferenças. No capı́tulo 0 vamos usar do quociente de segunda ordem, apenas o numerador, quando estudarmos o problema, f (x) = 0 veremos que assim é possı́vel contornar o problema deste erro, ao evitar o quociente, No momento certo voltaremos a discutir esta questão. Exercı́cios 2 Revisão de Cálculo e computação objetivo adquirir familiaridade com questões de Cálculo e de computação, necessárias ao Cálculo Numérico Computacional. Conscientemente, ignore as questões que você domina, o objetivo não é perder tempo, mas ao mesmo tempo, aprofunde e procure outras questões parecidas com as que você não dominar para aumentar a sua prática. O programa gnuplot é um pacote computacional para fazer gráficos, tem também uma versão que roda em windows que pode ser encontrada aqui, [13]. Nas revisões de programação, você pode usar em programas em Pascal, [18], mas os programas que associados a este livro, que estão aqui, [20], foram escritos em C ou em calc. Você quiser rodar programas em Pascal existe um compilador, gpc, para Linux. 1. Equação da reta que passa num ponto (a) teórica Escreva a equação da reta que passa no (a, b) e tem coeficiente angular m. (b) aplicação Escreva as equações das retas que passam no (a, b) com o coeficiente angular indicado, em cada item abaixo. Faça gráficos procurando ser preciso. Você pode usar gnuplot ou xfig para fazer estes gráficos, mas deve indicar por escrito como fez. no ponto (a, b) (−1, 3) (−1, 3) coef. angular m −3 −1 no ponto (a, b) (−1, 3) (−1, 3) coef. angular m 1 2 (c) teórica Escreva a equação da reta que passa nos pontos (a1 , b1 ), (a2 , b2 ). (d) aplicação Escreva as equações das retas que passam nos pontos indicados em cada um dos itens abaixo. Para cada caso faça gráficos precisos. Você pode usar gnuplot ou xfig para fazer estes gráficos, mas deve indicar por escrito como fez. 13 CAPÍTULO 1. A DERIVADA APROXIMADA P1 (a1 , b1 ) (−1, 3) (−1, 3) P1 (a2 , b2 ) (1, −3) (3, 3) P1 (a1 , b1 ) (1, −3) (1, 3) P1 (a2 , b2 ) (−3, 1) (−2, 5) 2. teoria Reta tangente ao gráfico de uma função Fórmula de Taylor. A derivada de uma função nos fornece o coeficiente angular instantâneo da mesma no ponto: f ′ (a) é o coeficiente angular instantâneo de f em (a, f (a)) (a) teórica Fórmula de Taylor - equação da reta Escreva a equação da reta que passa no (a, f (a)) e é tangente ao gráfico da função neste ponto. Observe que você deseja a equação da reta que passa no ponto (a, f (a)), com coeficiente angular f ′ (a). Faça um gráfico genérico mostrando o que acontece. (b) Aplicação - derivada algorı́tmica Derivar algortmicamente significa, para este exercı́cio, evitar de fazer todas as contas, represente as contas, não as faça totalmente, deixe que a linguagem de programação calcule por você. Para cada item abaixo faça o gráfico da função e da reta tangente no ponto (a, f (a)) indicado. Você pode usar gnuplot ou xfig para fazer estes gráficos, mas deve indicar por escrito como fez. f (x) = (x + 3)(x − 4) f (x) = (x + 3)(x − 4) f (x) = (x + 3)(x − 4) f (x) = sin(x)(x + 1) f (x) = sin(x)(x − 1)(x − 5) f (x) = cos(x)(x + 3)(x − 4) a = −3 a=4 a = 0.5 a = −4 a = −2 a = 0.5 3. Altere o programa ex01.c para imprimir alguns números. Você encontra este programa aqui, [20, programas.tgz]. 4. Altere o programa ex01.c para que ele escreva quatro termos de uma progressão artimética cujo primeiro termo seja 3 a raão 4. solução: ex02.c 5. Faça um programa que escreva de 0 a 10, use um while(). solução: ex03.c 6. Altere ex03.c para escrever os 10 termos de uma progressão aritmética de razão 3. solução: ex04.c 7. Altere ex04.c para escrever os 10 termos de uma progressão geométrica de razão 2. solução: ex05.c CAPÍTULO 1. A DERIVADA APROXIMADA 14 8. Altere ex05.c para escrever os 100 termos de uma progressão geométrica de razão 1.0005, os “juros da simplória cadernete de poupança”. solução: ex06.c 9. Altere o programa ex06.c colocando um if() dentro do while() controlando um contador para permitir a visualização do sagrado capital sendo transformado na poupança. solução: ex07.c 10. Escreva um programa que (a) Produza uma progressão artimética de razão 0.5, primeiro termo 3 e o número de termos 10; solução: altere ex04.c (b) Produza uma progressão artimética de razão 5, primeiro termo -3 e o número de termos 10; solução: altere ex04.c (c) uma progressão geométrica de razão 7% com primeiro termo 1000 e com 12 termos. Obtenha outra cuja razão seja 0.5%. Uma delas (qual ?) mostra como cresce sua dı́vida se você usar cheque especial ou cartão de crédito. solução: altere ex07.c 11. Derivada aproximada O quociente f (a + ∆x) − f (a) ∆f = ≈ f ′ (a) ∆x ∆x (1.21) é uma aproximação do valor da derivada de f no ponto x = a quando ∆x for pequeno. Os próximos itens servem para que você desenvolva a sua intuição com respeito a esta aproximação, faça gráficos bem feitos que permitam você se convencer do seu significado, a precisão com que os gráficos serão feitos é parte essencial da questão, um gráfico mal feito não lhe indicará nada, use papel quadriculado (ou milimetrado). Se você usar gnuplot, ele lhe permite um zoom usando o botão direito do ratinho e você poderá ver assim o detalhe entre as duas retas. (a) Considere f (x) = x2 − 2x − 3 e encontre a reta tangente ao gráfico de f no ponto (−1, f (−1)). Faça o gráfico. solução: derivada02 01.gnuplot, [20]. (b) Use ∆x = 0.2, calcule o valor aproximado da derivada com este erro, e obtenha a equação da reta “tangente” no ponto (−1, f (−1)). Faça o gráfico. solução: derivada02 02.gnuplot CAPÍTULO 1. A DERIVADA APROXIMADA 15 (c) Use ∆x = 0.05, calcule o valor aproximado da derivada com este erro, e obtenha a equação da reta “tangente” no ponto (−1, f (−1)). Faça o gráfico. solução: altere derivada02 02.gnuplot (d) Com f (x) = x2 − 2x − 3 e encontre a reta tangente ao gráfico de f no ponto (−3, f (−3)). Complete o gráfico anterior. solução: altere derivada02 02.gnuplot (e) Use ∆x = 0.2, calcule o valor aproximado da derivada com este erro, e obtenha a equação da reta “tangente” no ponto (−3, f (−3)). Complete os gráficos anteriores. solução: altere derivada02 02.gnuplot (f ) Use ∆x = 0.05, calcule o valor aproximado da derivada com este erro, e obtenha a equação da reta “tangente” no ponto (−3, f (−3)). Complete os gráficos anteriores. solução: altere derivada02 02.gnuplot 12. Faça um programa que imprima a derivada aproximada, por quociente de diferenças, do item anterior. Aprenda a usar função, em C, solução: derivadas.c 13. Para f (x) = x2 − 9 (a) Encontre as retas tangentes ao gráfico de f nos pontos (−4, f (−4)), (−3, f (−3)), (0, f (0)) Faça os gráficos. solução: altere derivada02 02.gnuplot (b) Use ∆x = 0.05, calcule o valor aproximado da derivada com este erro, e obtenha a equação da reta “tangente” nos pontos (−4, f (−4)), (−3, f (−3)), (0, f (0)) Complete os gráficos anteriores. solução: altere derivada02 02.gnuplot 14. Significado da derivada Considere a função f (x) = x3 − 3x2 − 9x + 2 (a) Calcule a derivada f ′ . (b) Encontre as raı́zes de f ′ e deduza os pontos extremos relativos f (c) objetivo: Algumas vezes é mais fácil fazer o gráfico de f ′ que o gráfico de f . Deduza um esboço do gráfico de f do gráfico usando o gráfico da derivada. 16 CAPÍTULO 1. A DERIVADA APROXIMADA Solução 1 A derivada da função f (x) = x3 − 3x2 − 9x + 2 é uma função do segundo grau, cujos zeros sabemos calcular. f (x) = x3 − 3x2 − 9x + 2 f ′ (x) = 3x2 − 6x − 9 = 0 = x2 − 2x − 3 (1.22) (1.23) √ x = 2± 24+12 =3= x1 = 2+4 2 (1.24) (1.25) x2 = −1 = (1.26) As raı́zes, x1 , x2 da derivada são pontos de extremos de f , neste caso com certeza porque são zeros isolados de um polinômio. Temos duas maneiras de determinar se são máximo ou mı́nimos. Uma consiste em calcular a segunda derivada e verificar o sinal. Outra consiste em verificar a variação em volta do ponto. Vamos usar o teste da segunda derivada. Lembrando a fórmula de Taylor, a segunda derivada representa a concavidade da função e portanto mostra uma parábola que lhe é semelhante no ponto. Se f ′ (xi ) for positiva, então f neste ponto “lembra” uma parábola com com o vértice para baixo, passando por um mı́nimo. Se for negativa passará por um máximo. ponto f ′′ (x1 ) f ′′ (x2 ) 2a. derivada no ponto 12 -12 diagnóstico passa por um mı́nimo passa por um máximo valor no ponto f (x1 ) = −25 f (x2 ) = 7 O esboço gráfico de f pode ser visto na figura (1.8) página 17, Comandos do gnuplot usados na resolução desta questão f(x) = x**3 - 3*x**2 - 9*x + 2 df(x) = 3*x**2 - 6*x - 9 ## x**2 - 2*x - 3 = 0 a1 = (2 + sqrt(4+12))/2.0 a2 = (2 - sqrt(4+12))/2.0 print df(a1) print df(a2) plot df(x),0 ddf(x) = 6*x - 6 print ddf(a1) print ddf(a2) set xrange [a2-2:a1+2] plot f(x),df(x),0 plot f(x),df(x),0 set terminal post enhanced portrait set output ’derivada_funcao01.eps’ plot f(x),df(x),0 17 CAPÍTULO 1. A DERIVADA APROXIMADA 40 f(x) df(x) 0 30 20 10 0 -10 -20 -30 -3 -2 -1 0 Figura 1.8: 1 2 3 4 5 grafico de f analisando f ′ 15. Modelo Encontre a equação de uma reta (um tipo de modelo) que melhor represente os dados da tabela na figura (1.9) página 18. Justifique sua solução; Calcule o valor deste modelo no ponto x = 2. Calcule o valor médio que estes dados representam usando a reta como modelo, e admita que o intervalo de observações é [−10, 10]. solução: calcule o valor médio das taxas de variação e use este valor para a equação da reta. 16. Teste do modelo Faça o gráfico do conjunto de pontos da tabela (1.9) e da reta que você encontrou para modelar os dados com gnuplot e verifique assim se o modelo está adequado. Justifique a sua conclusão. 18 CAPÍTULO 1. A DERIVADA APROXIMADA −10 −6 −2 0 3 7 9 Figura 1.9: 1.3 −28.6 −15.4 −2.2 4.4 11.7 22.5 27.9 Dados amostrais Polinômios de Taylor Estudamos a equação da reta tangente ao gráfico de f no ponto (a, f (a)) e na verdade quando começamos a estudar esta questão o nosso exemplo, na figura (fig. 1.1), página 2, nos dizia que não era a “reta tangente” que nos deveria interessar e sim a parábola tangente. Vamos agora ver como podemos obter uma parábola tangente ao gráfico graf (f ) no ponto (a, f (a)). O método se parece com o que já usamos para a reta tangente, foi porisso mesmo que começamos com este caso mais simples. Revendo o caso da reta tangente, y − f (a) = f ′ (a)(x − a) y = f (a) + f ′ (a)(x − a) (1.27) (1.28) seriamos facilmente conduzidos ao erro de imaginar que a equação da parábola tangente seria (está errado)8 y − f (a) = f ′ (a)(x − a) + f ′′ (a)(x − a)2 y = f (a) + f ′ (a)(x − a) + f ′′ (a)(x − a)2 (1.29) (1.30) Para encontrar a fórmula correta, vamos inicialmente considerar um polinômio do segundo grau P (x) = a0 + a1 (x − a) + a2 (x − a)2 (1.31) desenvolvido no ponto x = a e vamos impor as condições que nos interessam, para encontrar9 os coeficientes a0 , a1 , a2 (1.32) P (a) = f (a) ⇒ a0 = f (a) P ′ (x) = a1 + 2a2 (x − a) P ′ (a) = f ′ (a) ⇒ a1 = f ′ (a) P ′′ (x) = 2a2 (1.35) (1.36) f ′′ (a) 2 (1.37) P ′′ (a) = f ′′ (a) ⇒ a2 = 8 esta 9 os (1.33) (1.34) fórmula está errada! coeficientes é que são as incógnitas deste problema.... CAPÍTULO 1. A DERIVADA APROXIMADA 19 Na equação (33) estamos impondo a condição de que o polinômio P passe no ponto (a, f (a)). Na equação (34) calculamos a derivada do polinômio P para impor a condição, na equação (35), que o polinômio P tivesse a mesma derivada que f no ponto (a, f (a)). Derivamos, na equação (36), o polinômio P para impor na equação (37) que o polinômio tivesse a mesma derivada segunda (curvatura) que a função f tem no ponto (a, f (a)). Vemos assim que a fórmula correta para a equação da parábola tangente ao gráfico graf (f ) no ponto (a, f (a)) é f ′′ (a) (x − a)2 (1.38) 2 Compare a equação errada 33 com a equação correta 38 e veja que a diferença se encontra no método do cálculo para o coeficiente do segundo grau: y = P (x) = f (a) + f ′ (a)(x − a) + a2 = f ′′ (a) 2 Este exemplo também lhe mostra a razão pela qual a equação do movimento acelerado (caso da gravidade) é g v = s0 + v0 (t − a) + (t − a)2 2 (1.39) em que t = a é o ponto considerado como inı́cio do movimento. Nos cursos de Cálculo este tópico aparece sob o nome de fórmula de Taylor e vai bem além na construção de um polinômio de grau n tangente ao gráfico de f no ponto (a, f (a)). A metodologia para obter esta fórmula é exatamente a mesma que apresentamos acima, entretanto partindo do polinômio P (x) = a0 + a1 (x − a) + . . . + an (x − a)n (1.40) ao qual se impõem, sucessivamente, as condições de tangência. A conclusão é que f (n) (a) (1.41) an = n! e aı́ você deve observar que 2 = 2!, 1 = 1!, 1 = 0! (1.42) são os denominadores dos termos em x2 , x, x0 . Fizemos menção ao erro existente entre a equação da reta tangente ao graf (f ) e os valores de f numa vizinhança do ponto de tangência, chamando-o de o(x − a). Aqui usaremos a mesma notação, porém o erro é, teoricamente, menor. Infelizmente, quando passarmos aos cálculos numéricos este erro tende a ser bem maior, desta maneira há que ser prudente com o uso da aproximação polinomial do grau elevado. O fato é que em geral nos damos muito bem com as aproximações do primeiro grau. No capı́tulo 0 vamos ver que o grau ideal para as aproximações polinômiais é o terceiro grau. 20 CAPÍTULO 1. A DERIVADA APROXIMADA Aqui você pode observar a crı́tica diferença entre o cálculo feito manualmente (e formalmente) e os cálculos automáticos. Podemos atingir precisões muito maiores com o cálculo manual, mas possivelmente com um grande lapso de tempo, não esquecendo que nele estamos sujeitos a erros diversos. No entanto, no cálculo automático os computadores incluem outros tipos de erros com a inevitável aproximação com que têm que trabalhar. A conclusão, nos a repetiremos com frequência, é temos que fazer os cálculos com programas de computador, mas temos que monitorar os resultados e saber analisá-los criticamente para tirar o bom proveito que eles nos podem trazer. No penúltimo capı́tulo 0 iremos estudar aproximação polinomial quando necessitaremos que você tenha uma boa prática com do uso do polinômio de Taylor e de programação, eis uma boa razão para lhe oferecermos logo uma lista de exercı́cios. Exercı́cios 3 Polinômios de Taylor 1. Reta tangente ao gráfico de uma função Fórmula de Taylor. A derivada de uma função nos fornece o coeficiente angular instantâneo da mesma no ponto: f ′ (a) é o coeficiente angular instantâneo de f em (a, f (a)) Veja na figura (fig. 1.10), 600 f(x) reta(x) 0 500 400 300 200 100 0 −100 −200 −300 −4 −2 Figura 1.10: 0 2 4 Reta tangente ao gráfico de f (a) Considere f (x) = x2 −2x−3 calcule f ′ (−2) e encontre a reta tangente ao gráfico de f no ponto (−2, f (−2)). solução: altere derivada02.02.gnuplot, você o encontra aqui, [?] (b) Considere f (x) = x2 − 9 calcule f ′ (−4) e encontre a reta tangente ao gráfico de f no ponto (−4, f (−4)). solução: altere derivada02.02.gnuplot CAPÍTULO 1. A DERIVADA APROXIMADA 21 (c) Escreva a expressão da reta tangente ao gráfico de uma função qualquer, f no ponto (a, f (a)). Observe que você deseja a equação da reta que passa no onto (a, f (a)), com coeficiente angular f ′ (a). solução: altere derivada02.02.gnuplot 2. Análise do gráfico de f (a) parábola tangente Encontre a parábola tangente ao gráfico de f (x) = (1 − x2 )sin(x/4) no ponto (−4, f (−4)) e deduza como é o gráfico de f nas vizinhanças deste ponto. solução: altere derivada02.03.gnuplot (b) parábola tangente Encontre a parábola tangente ao gráfico de f no ponto (−2, f (−2)) e deduza como é o gráfico de f nas vizinhanças deste ponto. solução: altere derivada02.03.gnuplot (c) Dedução do gráfico de f Com base nas duas informações10 obtidas anteriormente, simule o gráfico de f numa vizinhança do intervalo [−1, 1]. 3. Polinômio desenvolvido em um ponto A expressão usual dos polinômios é desenvolvida no ponto x = 0 P (x) = a0 + a1 x + a2 x2 + a0 x3 + · · · + an xn (1.43) Usando polinômio de Taylor podemos desenvolver um polinômio em qualquer outro ponto. Desenvolva o polinômio P (x) = 3 − x + 2x2 − 3x3 + 5x4 (1.44) no ponto x = −3 e faça os gráficos dos dois polinômios com gnuplot. Comente o resultado obtido. solução:11 num terminal, rode calc < poltay2.calc 1.4 Derivadas parciais Vamos generalizar a fórmula de Taylor para o caso multivariado. Aqui a restrição será mais forte, não passaremos do primeiro grau e a consideração feita anteriormente sobre erros nas aproximações de derivadas de ordem maior se 10 este exercı́cio tem o defeito de sugerir que podemos fazer uma simulação destas em qualquer intervalo sabendo o que acontece nos extremos. Isto é falso! 11 Todos os programas do livro se encontram aqui, [20] 22 CAPÍTULO 1. A DERIVADA APROXIMADA aplica, fora que a otenção de dados amostrais com taxas de variação parcial maior do que um é bem mais difı́cil de ser obtida. Se considerarmos uma expressão dependendo de várias variáveis F (x, y, x) = d (1.45) e lhe aplicarmos derivação implı́cita, vamos obter um modelo que nos permitirá chegar à equação de um objeto linear tangente: dw = dF (x, y, z) = ∂F ∂F ∂F dx + dy + dz = 0 ∂x ∂y ∂z (1.46) Vamos agora admitir a hipótese de que conhecemos um ponto P = (a, b, c) onde passa a variedade12 . F (x, y, z) = d Uma outra forma de dizermos a mesma coisa é P = (a, b, c) é uma solução da equação (45). Nesta forma de falar a hipótese é que existe uma solução para esta equação, que é P . Se substituirmos, neste modelo, dx := x − a ; dy := y − b ; dz := z − c (1.47) vem a equação da variedade13 linear tangente: ∂F ∂F ∂F (x − a) + (y − b) + (z − c) = 0 ∂x ∂y ∂z (1.48) Podemos explicitar z nesta expressão ∂F ∂x (x ∂F ∂z − a) + ∂F ∂y (y − b) + ∂F ∂z (z − c) = 0 ∂F ∂x |(a, b, c) 6= 0 ⇒ z − c = − ∂F (x − a) − ∂z ∂F ∂y ∂F ∂z (1.49) (y − b) (1.50) o que nos conduz, com auxı́lio do Teorema da Função Implı́cita14 a garantir que existe uma função ∂F ∂x z = f (x, y) ; ∂f ∂x = − ∂F ; ∂z 12 variedade ∂F ∂y = − ∂F ∂f (x − a) + ∂f (y − b) ; c = ∂x ∂y ∂f f (a, b) + ∂f ∂x (x − a) + ∂y (y − b) ; c z−c= z= ∂f ∂y (1.51) ∂z f (a, b) (1.52) = f (a, b) (1.53) é o conceito que nos livra da prisão tridimensional veja no ı́ndice remissivo mais informações a respeito neste caso esta é variedade de dimensão dois, uma superfı́cie 13 esta variedade tangente é um plano, planos são variedades lineares de dimensão dois 14 você encontra este teorema em qualquer bom livro de Cálculo. Estamos também admitindo a hipótese de a derivada parcial que aparece no denominador seja diferente de zero 23 CAPÍTULO 1. A DERIVADA APROXIMADA e assim temos duas fórmulas que podemos adaptar para fazer aproximações de funções com duas ou três variáveis sendo imediato (basta considerar mais derivadas parciais) estender estas fórmulas para um número qualquer que se precise de variáveis15 O sı́mbolo := que utilizamos, apareceu com a linguagem de programação Pascal para evitar a confusão com a igualdade matemática. Queremos dizer que os dois objetos que se encontram de cada lado do sı́mbolo “:=” têm natureza distinta, mas que é possı́vel fazer uma dedução de um, a partir do outro. Observe que a equação (53 ) é a fórmula de Taylor multivariada, de grau 1 para a função = f (x, y). Existe também uma fórmula de Taylor multivariada de grau 2, de grau 3, etc... mas em geral não passamos da fórmula do primeiro grau, devido as imprecisões que o cálculo numérico joga nas derivadas de ordem superior. Exercı́cios 4 Polinômio de Taylor Você deve usar gnuplot para obter todos os gráficos, mas deve apresentar toda a justificação das equações que usar. O comando do gnuplot para fazer gráficos de funções de duas variáveis é splot f(x,y) 1. Teórica - polinômio do segundo grau tangente Expanda as equações (53), (44) para encontrar aw equações de uma parábola (polinômio do segundo grau) tangente ao gráfico de f memorizando também a curvatura (segunda derivada) y = A + B(x − a) + C(x − a)2 (1.54) Um polinômio desenvolvido16 no ponto x = a. solução: polinômio de Taylor do segundo grau no ponto x = a 2. Teórica - polinômio do terceiro grau tangente Expanda as equações (53), (44) para obter as condições que façam de P (x) = A + B(x − a) + C(x − a)2 + D(x − a)3 (1.55) um polinômio do terceiro grau, tangente ao gráfico de f no ponto (a, f (a)). Descreva as equações para determinarmos os coeficientes A, B, C, D. solução: polinômio de Taylor do terceiro grau no ponto x = a 3. Fórmula de Taylor (a) Ache o desenvolvimento de Taylor para f (x) = sen(x) no ponto x = 0 de ordem 7 (grau 7) (um polinõmio de grau 7). 15 os problemas econômicos lidam com espaços de dimensão de alguns milhares, o que justifica a grande dificuldade no planejamento econômico, por outro lado justifica trabalharmos com dimensões altas. 16 novamente, um polinômio desenvolvidono ponto x = a 24 CAPÍTULO 1. A DERIVADA APROXIMADA (b) Ache o desenvolvimento de Taylor para g(x) = cos(x) no ponto x = 0 de ordem 8 (grau 8), (um polinõmio de grau 8). Analise porque a diferença de grau entre esta questão e anterior. solução: derivada02 ex02.calc (c) Calcule a derivada de g(x) + if (x), com os polinõmios encontrados no item anterior. Será que o resultado poderia ser interpretado como sendo (g(x) + if (x))′ = i(g(x) + if (x)) 4. Aplicações (a) Calcule o valor aproximado de sen(0.1) usando a fórmula de Taylor de ordem 7. Compare o resultado, indicando o erro ocorrido usando uma calculadora. solução: derivada02 ex02.calc (b) Calcule o valor aproximado de cos(0.1). Compare o resultado, indicando o erro ocorrido usando uma calculadora. solução: derivada02 ex02.calc 5. Derivadas parciais introdução teórica A equação de plano que passa no ponto (a, b, c) é por comparação com a equação da reta z − c + A(x − a) + B(y − b) = 0 z = c − A(x − a) − B(y − b) (1.56) (1.57) (a) Calcule as derivadas parciais de z = f (x, y) na equação (57). resposta: A, B (b) Justifique a afirmação seguinte usando os conceitos “tangente”, “coeficiente angular” dentro de uma pequena redação. Se o plano cuja equação está em (56), for tangente ao gráfico de uma função no ponto (a, b, f (a, b)) então a equação do plano seria, atualizando os valores de c, A, B na equações (56), (57): z − f (a, b) + A(x − a) + B(y − b) = 0 z = f (a, b) + ∂f ∂x (x − a) + ∂f ∂y (y − b) (1.58) (1.59) (c) Considere uma função z = f (x, y) (1.60) que seja derivável numa vizinhança do ponto (a, b, f (a, b)). Então ela tem um plano tangente no ponto (a, b, f (a, b)), semelhante ao caso da função univariada com a reta tangente. Identifique entre as equações abaixo a equação do plano tangente ao gráfico de f no ponto (a, b, f (a, b)) e justifique sua escolha. 25 CAPÍTULO 1. A DERIVADA APROXIMADA ∂f ∂y (y − b) ∂f z − a = f (a, b) ∗ (x − a) + ∂f (y − b) ∂z ∂y ∂f a = f (a, b) ∗ (x − a) + ∂f ∂x (x − a) + ∂y (y (1.61) z − a = f (a, b) ∗ (x − a) + z− (1.62) − b) (1.63) solução: z = −5 + 2(x − 1) + 3(y − 2); f (1.1, 2.1) − 4.5 (d) Sabendo que as taxas de variação parciais de z = f (x, y) no ponto (1, 2) são ∂f ∂f = 2; =3 ∂x ∂y e que f (1, 2) = −5 i. Escreva a equação do plano tangente ao gráfico de f no ponto (1, 2, f (1, 2)) ii. calcule aproximadamente f (1.1, 2.1) (e) Fórmula de Taylor multivariada de grau 1 Observe que a equação do plano tangente pode ser escrita de forma semelhante á equação da reta tangente. Encontre as semelhanças e escreva a fórmula de Taylor multivariada de grau 1. Você vai precisar de um produto de matrizes (estas matrizes se chamam de gradiente ou Jacobiana). 6. Polinômio Esta é uma variante do método polinômio de Taylor. Podemos encontrar um polinômio que memoriza as informações de uma função de forma parecida com o polinõmio de Taylor, mas usando informações em dois pontos. Encontre um polinômio P desenvolvido no ponto x = a tal que • P (a) = f (a); P ′(a) = f ′ (a) • P (b) = f (b); P ′ (b) = f ′ (b) em que [a, b] é um intervalo em que f está definida e é derivável. Sugestão: escreva a expressão de um polinômio desenvolvido no ponto x = a. 7. Aplicação Encontre um polinõmio tal que a) P (−3) = 3 P (3) = 1 P ′ (−3) = −1 P ′ (3) = 1 b) P (−3) = −3 P (3) = −3 Faça os gráficos destes polinômios usando gnuplot P ′ (−3) = 1 P ′ (3) = 1 CAPÍTULO 1. A DERIVADA APROXIMADA 1.5 Solução de alguns exercicios 1.6 Vocabulário 26 gnuplot, Landau, variedade Nesta seção vamos incluir alguns conceitos que é preciso discutir mas cujo desenvolvimento dentro do texto seria prejudicial. Mesmo assim será uma pequena amostra de cada assunto. • gnuplot é um programa para fazer gráficos, uma espécie de máquina de calcular eletrônica com capacidade para fazer gráficos, que roda num terminal do computador, com alguma habilidade sintática. Você pode escrever pequenos algoritmos no terminal do gnuplot ou com um editor de textos e chamar gnuplot para ler e executar o algoritmo. gnuplot pode ser chamado de dentro de um programa, logicamente falando é o mesmo que já dissemos acima a respeito de chamar gnuplot na linha de comandos passando-lhe um arquivo: isto pode ser feito de dentro de um programa e inclusive o programa pode construir o arquivo de comandos do gnuplot, veja, por exemplo raizq graf.c, rode apenas, este é um programa relativamente avançado que será discutido no capı́tulo 0. O próprio programa lhe dirá que construiu um arquivo de comandos do gnuplot que você poderá ler como um exemplo. • Landau Para representar que uma variável tem uma relação multiplicativa com outra, usamos uma das notações y = K 6= 0 x=0 x (1.64) y =0 x=0 x (1.65) x = O(y) ≡ lim x = o(y) ≡ lim No primeiro caso, equação (64), o significado é que para valores cada vez menores de x as variáveis x, y se encontram numa proporção e podemos dizer que são comparáveis. Este é o caso ∆f f (x) − f (a) = (1.66) ∆x x−a quando a função for diferenciável no ponto a com derivada diferente de zero. Neste ponto a função tem uma tangente paralela a reta x 7→ Kx (1.67) CAPÍTULO 1. A DERIVADA APROXIMADA 27 em que K é o que aparece na equação (64). No segundo caso, equação (65), a variável y é infinitamente menor do que a variável x, é o caso em que a função derivável f tangencia o eixo dos X, a derivada é nula, portanto ∆f é infinitamente pequeno relativamente a ∆x. Esta linguagem, infinitamente pequeno, traduzida com a palavra infinitésimo, gerou uma confusão e um mito grande durante toda a primeira metade do século 20 em que vários autores procuraram apresentar infinitésimos como um tipo de número. Observe o salto violento que existe entre as duas notações, não há nada entre elas. A melhor forma de entender a notação de Landau, que foi uma tentativa de evitar os infinitésimos, é usá-la para aos poucos compreender quando usar uma ou a outra, e talvez admitir o que Courant dizia, que o limite se encontra no limiar da Matemática superior. . . Se você quiser ver alguma coisa experimental nesta linha, considere y = f (x) e compare – x com f (x) quando x ∈ V(0), uma vizinhança de zero, é o caso do o pequeno de Landau, faça um programa que liste x, f (x) com x decrescendo para zero. – x −a com f (x) −f (a) quando x ∈ V(a), uma vizinhança de um ponto a 6= zero, é o caso do O grande de Landau, faça um programa que liste x − a, f (x) − f (a) com x − a decrescendo para zero, você vai ver que neste caso K = f ′ (a). • Variedade é uma palavra que nos livra da prisão tridimensional em que a geometria do mundo fı́sica em que vivemos nos confina. Diremos variedade de dimensão 1 para fazer referência as curvas, uma reta, um cı́rculo são variedades de dimensão 1. Diremos variedade de dimensão 0 para fazer referência aos pontos. As superfı́cies são as variedades de dimensão 2, como um plano que é uma variedade linear de dimensão 2. Depois da dimensão 2 a geométria não tem mais palavras e nós continuamos a denominar os objetos de variedades lineares ou não-lineares acrescentando a dimensão que eles tenham. Podemos então falar de uma variedade linear de dimensão 4 que seria uma generalização dos planos ou das retas. Enfim, agora não temos mais as limitações da geometria. Capı́tulo 2 Raı́zes aproximadas de funções contı́nuas Neste capı́tulo vou estudar o problema determinação das raı́zes de uma função: queremos descobrir quando f (x) = 0. Este é um velho problema e a justificação de sua inclusão no currı́culo se deve a que ele é ilustrativo de técnicas importantes que têm valor por sı́ próprias, como o método da tangente, a procura binária, e o método da secante e a recursividade. O problema é velho e atual, como veremos na discussão, é “atual” no sentido que nós não sabemos resolvê-lo. Resolver esta equação computacionalmente, é bastante difı́cil, e iremos, no momento apropriado, indicar quais os problemas envolvidos. A saı́da, computacional, é resolver a desigualdade |f (x)| < ǫ para um valor adequado para ǫ. Veremos que isto é insuficiente e irrealista, apesar de ser naturalmente a saı́da matemática. Iremos salientar como os métodos computacionais, associados a estas ántigas metodologias, as tornam mais ágeis. O plano do trabalho é: • mostrar e exemplificar o problema; • apresentar uma primeira solução computacional, simples, ingênua mesmo, usando varredura eliminando parte do problema; • mostrar uma solução mais efetiva; • apresentar os métodos, método da secante e o método da tangente e imergir estes métodos em metodos computacionais; • vamos estudar dois métodos matemáticos importantes, busca binária e sucessões recursivas; 28 29 CAPÍTULO 2. RAÍZES APROXIMADAS • apresentar ao final o problema completo, mas, obviamente, não, a solução. É interessante observar que a primeira parte, a solução ingênua e simples fará parte integrante da solução final. Também faremos uma afirmação: este problema, a determinação das raı́zes, nos ensina uma lição, que os humanos são companheiros dos computadores na busca de soluções. . . 2.1 Raı́zes de uma função por varredura Queremos determinar todos os pontos a tal que f (a) = 0 ; a ∈ [α, β] isto é, todas as raı́zes de f no intervalo [α, β]. Veja a figura (fig. 2.1) que mostra uma função que tem diversas raı́zes, mas apenas uma no intervalo que nos interessa. f Estamos interessados nesta raíz Figura 2.1: Raı́zes de f no intervalo [α, β] Claro, e você deveria começar se perguntando: e porque nos interessária um deteminado intervalo, e não o conjunto mais amplo em que uma função tivesse raı́zes ? A resposta para esta pergunta, absolutamente lógica, é que existem conjuntos que são os domı́nios naturais para uma função dentro de um problema em que ela aparece. Neste caso seria uma perda tempo procurarmos propriedades desta função num conjunto mais amplo. CAPÍTULO 2. RAÍZES APROXIMADAS 30 Uma outra forma de responder, seria, quando definimos uma função, necessáriamente estipulamos um domı́nio de validade para a mesma. Será neste domı́nio que iremos procurar as raı́zes da função. 2.1.1 Um método computacional: varredura Um método computacional básico, para resolver esta questão, e várias outras que você vai encontrar neste livro, é varredura. Existe um paradoxo muito conhecido, de Zenon, resolvido por Aristóteles, em que Aquiles persegue uma tartaruga. Aquiles corre a um metro por segundo enquanto que a tartaruga corre a 0.1 metro por segundo, mas a tartaruga parte de um ponto mais avançado, a 0.9 m mais a frente. O paradoxo estabelece que Aquiles somente pode atingir a tataruga depois de percorrer o espaço percorrido por esta (e aqui está o paradoxo): • Aquiles parte do ponto 0 e a tartaruga parte do ponto 0.9; • quando Achile atingir o ponto 0.9 a tartaruga já não está mais lá; • nova corrida começa, agora com Aquiles no ponto 0.9 e a tartaruga no ponto 0.91 e quando ele atingir o ponto 0.91 a tartaruga já não está mais lá . . . e assim nova corrida começa, [14, lógica, Stanford]. Podemos inventar outra forma equivalente deste paradoxo com uma tartaruga que aos poucos fosse ficando cansada com a corrida. A tartaruga começa uma corrida e no primeiro dia corre a metade do percurso oficial, no segundo dia corre a metade do que ficou faltando e assim, sucessivamente, segue correndo sempre a metade do que estiver faltando nos dias seguintes. Serve para ilustrar que nunca a tartaruga terminaria a corrida... Aqui vamos usar a idéia para convencê-lo de que por menor que for o passo, não será possı́vel percorrer todos os pontos de um intervalo. Em vez de falar em percorrer, coisa impossı́vel, vamos falar em varrer. Aquiles pode varrer o espaço a sua frente e passará pela tartaruga em algum ponto no caminho, mas pode sempre acontecer, dependo do passo escolhido, que nunca Aquiles encontre a tartaruga. E não há nenhum paradoxo nesta questão, assim como o paradoxo de Aquiles nada mais é do que uma forma enganosa de colocar a questão. Não existe nenhum paradoxo de Aquiles. Problema 1 Nunca encontrar o zero de f Este é o problema básico, sem nenhum paradoxo, é simplesmente pouco provável que encontremos x tal que f (x) = 0. Para fazer uma varredura de uma região vamos colocar uma malha de nós sobre esta região. Pense numa rede de pesca, mas nos interessam apenas os nós da rede . . . A região Ω (pode ser uma região da reta, do plano ou do espaço), e queremos escolher um conjunto de nós, definindo a malha, associada a esta região. Existe um conceito vizinho a este denominado de partição. 31 CAPÍTULO 2. RAÍZES APROXIMADAS Malha associada a um intervalo Vamos começar com o caso unidimensional. Acompanhe a descrição do método com a figura (fig. 2.2) página 32. 1. Malha uniforme associada a um intervalo I = [α, β] (a) A precisão da malha - a norma Considere um intervalo I = [α, β] A medida deste intervalo é m([α, β]) = β − α e a dividimos por um inteiro n que representa a precisão com que faremos os cálculos. A norma da malha1 é β−α . (2.1) ∆x = n Quando a malha for uniforme este conceito perde sentido, é a medida de qualquer sub-intervalo. Ele é importante quando as malhas não são uniformes porque serve para controlar a distribuição quaseuniforme dos nós, impedindo que uma grande de quantidade de nós se concentre em uma pequena sub-região. (b) nós da malha Podemos agora definir os nós como os elementos de uma progressão aritmética α = x0 , x1 , · · · , xn = β (2.2) x0 = α, x1 = α + ∆x, (2.3) (2.4) x2 = α + 2∆x, · · · , xk = α + k∆x, · · · , (2.5) (2.6) · · · , xn−1 = α + (n − 1)∆x, xn = α + n∆x = β (2.7) (2.8) Em geral desprezamos um dos extremos, deste conjunto de nós, • desprezamos o último nó (xk )n−1 k=0 = x0 , x1 , · · · , xn−1 = β − ∆x x0 = α, x1 = α + ∆x, x2 = α + 2∆x, · · · , xk = α + k∆x, · · · , xn−1 = α + (n − 1)∆x ou 1 ou norma da partição (2.9) (2.10) (2.11) (2.12) 32 CAPÍTULO 2. RAÍZES APROXIMADAS • desprezamos o primeiro nó (xk )nk=1 = x1 = α + ∆x, · · · , xn = β x1 = α + ∆x, x2 = α + 2∆x, · · · , xk = α + k∆x, · · · , xn−1 = α + (n − 1)∆x, xn = α + n∆x = β (2.13) (2.14) (2.15) (2.16) Veja na figura (fig. 2.2) página 32, I k xn x0 x1 Partição do intervalo I Figura 2.2: Partição do intervalo I Algumas vezes preferimos salientar que este processo criou uma coleção de sub-intervalos I0 = [x0 , x1 ), I1 = [x1 , x2 ), . . . , (2.17) (2.18) In−1 = [xn−1 , xn ] I0 ∪ I1 ∪ · · · ∪ In−1 = I (2.19) (2.20) cuja uni~ ao é o intervalo I sendo estes sub-intervalo disjuntos. Esta coleção de sub-intervalos é o que chamamos uma partiç~ ao de I Em Matemática gostamos de pensar que “escolhemos uma coleção arbitrária de pontos” x0 , x1 , x2 , . . . , xn−1 , xn ∈ I (2.21) CAPÍTULO 2. RAÍZES APROXIMADAS 33 mas, para tornar computacional uma partição é preciso estabelecer uma equação, para o elemento genérico coisa que os computadores entendem. Se a sucessão (xk )nk=1 formar uma progressão aritmética, dizemos que temos uma malha uniforme (ou uma partição uniforme). Esta será a nossa preferência neste livro: partições uniformes. Usamos, então, ∆x como a razão de uma progressão aritmética cujo primeiro termo é x0 = α xk = α + k∆x (2.22) como já descrevemos. Esta expressão aparecerá com frequência neste livro. Observação 2 Aprendendo a ler ou a programar O programa raizes01.c, [20, programas.tgz], é um implementação deste método, mas ele faz um pouco mais do que isto, procura algumas raı́zes. Leia o programa sem stress. É lendo programas que a gente aprende a programar, assim como é lendo os autores clássicos que a gente aprende a escrever. Mas nem aprendemos a escrever apenas lendo como não aprenderemos a programar apenas lendo programas. É preciso aprender a alterar os programas. Não tenha medo de fazê-lo. Não se preocupe com estragar o programa, o original se encontrará, sempre, à sua disposição na página ou no CD. 2. Malha não uniforme Vamos descrever o que seria construir uma malha não uniforme, mas não faremos nenhum uso para este tipo de malha neste livro, imediatamente. A construção de malhas uniformes conduz a seleção de uma razão como a que se encontra na equação (1), e de uma progressão aritmética que se encontra na sucessão de equações que iniciando em (2), ou do conjunto de intervalos, todos com mesma medida que apresentamos nas equações que começam com (17). No capı́tulo 0 e no capı́tulo 0 vamos usar malhas não uniformes, elas aparecerem naturalmente quando pensamos em aplicações do tipo coleta de dados feitas por sensores distribuidos ao longo do percurso de um fenômeno. Neste momento seria artificial dividir este percurso em partes iguais, estabelecendo um passo ∆x porque tais caminhos tem pontos crı́ticos que merecem atençao especial onde haverá uma concentração de sensores. Um exemplo tı́pico seria a análise do tráfego numa rodovia em que eventos como curvas, cidades ou vilarejos, acidentes geográficos exigiriam um levantamento especial de dados. CAPÍTULO 2. RAÍZES APROXIMADAS 34 A resposta para este tipo de necessidade vem com um arquivo de dados em que os nós estão definidos pela posição dos sensores. A esta altura do texto é também um pouco artificial esta discussão que preferimos relegar para o momento certo, apenas declarando aqui teremos necessidade de malhas não uniformes. Se o leitor precisar de imediatamente ver este ponto, recorra aos capı́tulos 0 ou 0 ou procure no ı́ndice remissivo ao final do livro. Descrevemos assim malhas unidimensionais. Vamos descrever, na próxima secção, como construir malhas bidimensionais. Malhas bidimensionais 1. Malha associada a uma região do plano Selecionar malhas para regiões de dimensão maior que 1 geralmente é mais trabalhoso. No caso unidimensional não há muitas escolhas mas nos casos pluridimensionais há vários problemas a serem considerados. Analise um caso simples, representado pela figura (fig. 2.3) página 35, e acompanhe com a figura, as definições que faremos. Começaremos supondo que se trata de uma região Ω limitada. Quer dizer que existem quatro números reais: α1 , α2 , β1 , β2 tal que Ω é um subconjunto do produto cartesiano de dois intervalos: Ω ⊂ [α1 , β1 ] x [α1 , β1 ] (2.23) e então criamos uma malha em cada um dos intervalos: ∆x = β1 − α1 β2 − α2 ; ∆y = n n (2.24) • Agora o produto cartesiano dos dois conjuntos de nós em cada intervalo, define um conjunto de nós no plano, uma malha no plano; • temos que selecionar um sub-conjunto desta malha que fique no interior de Ω, veja a figura (fig. 2.3). Se Ω for definido por uma expressão algébrica, pode ser simples a seleção automática dos nós que esteja no seu interior. Frequentemente este é um outro problema a ser resolvido, mas este livro vai lhe apresentar, no capı́tulo 0 uma técnica, aproximação polinomial, que pode fornecer a equação algébrica determinando o contorno de uma figura como (fig. 2.3) a partir de uma coleta de dados como uma fotografia aérea, por exemplo, ou um conjunto de medições tomadas no próprio local. Veja na figura (fig. 2.3), um domı́nio, Ω, do plano, em que colocamos uma malha e fizemos a seleção dos pontos da malha que se encontram dentro do domı́nio. 35 CAPÍTULO 2. RAÍZES APROXIMADAS β 2 α 2 α β 1 1 Malha sobre uma região do plano Figura 2.3: Malha sobre uma região do plano Um elemento genérico da malha tem por equação xi,j = (xi , yj ) ; i = 0, . . . , n − 1 ; j = 0, . . . , n − 1 em que estamos ignorando os pontos que se encontram na última linha da malha (tanto na horizontal como na vertical). Se usarmos o mesmo método da progressão aritmética, que já usamos com malhas sobre um intervalo, (eq.1) teremos xi,j = (α1 + i∆x1 , α2 + j∆x2 ); ∆x1 = ∆x2 = β1 −α1 ; n β2 −α1 ; n (2.25) (2.26) (2.27) Também podiamos considerar números de pontos diferentes na horizontal e na vertical, neste caso, usariamos as variáveis n, m para designar estas quantidade e nos denominadores, das frações nas equações (26), (27). Estamos usando a hipótese de que é possı́vel selecionar os pontos com uma decisão algébrica, realmente isto pode ser complicado de fazer e não conhecemos um algoritmo genérico para tratar deste caso, mas os métodos do capı́tulo 0 podem resolver esta questão. Neste livro usaremos malhas em dimensão maior do que um apenas no cálculo de integrais multivariadas no capı́tulo 0. É entretanto conveniente, pelo menos CAPÍTULO 2. RAÍZES APROXIMADAS 36 mostrar ao leitor, onde ele pode fazer uso de malhas multidimensionais e uma pista de como encontrar a solução para os problemas envolvidos. Tais situações podem ser facilmente encontradas como aplicações do cálculo aproximado de integrais. Exemplo 2 Uso de malhas multidimensionais 1. População de microrganismos numa lâmina. Sabendo que os microrganismos a serem estudados são capazes de um certo tipo de reação, é possı́vel pintá-los com uma solução quı́mica que fará com que eles respondam a reação quı́mica com um comprimento de onda, que habitualmente chamamos de cor. Cada um dos pontos da figura (2.3) pode ser descrito como aquele que o sensor captou como estando na faixa de comprimento de onda que identifique a presença dos microrganismos que interessa. Depois podemos contar a quantidade de microrganismos calculando a área da região que eles ocupam. O biólogo deve, experimentalmente, descobrir uma constante especı́fica que permita transformar esta área na quantidade microrganismos presentes na lâmina. 2. Fotografia de satélite de região urbana. A figura (2.3) pode representar uma região fotografada por um satélite e novamente, via comprimento de onda, se pode detectar intensidade construções urbanas, florestas etc... Neste caso a fotografia pode ser feita sob emissão de uma onda com uma comprimento particular, ver [14, onda], objetivando obter um determinado resultado: florestas, construções urbanas, determinados tipos de poluição. Novamente o cálculo da área da região determinada vai permitir uma avaliação da região urbana, da floresta, ou da quantidade de poluição que se estiver observando. Aqui também constantes especı́ficas permitem a transformação da área nas quantidades que seja deseja determinar. No capı́tulo 0 vamos estudar o cálculo aproximado das integrais. Estes exemplos são bastante genéricos e mostram a amplitude do uso de integrais multivariadas. Estas aplicações fogem ao planejamento deste livro mas se o leitor precisar, encontrará aqui meios para fazer estas aplicações, se puder contar com informações sobre as constantes mencionadas nos exemplos, na literatura especializada. Pelo menos um método para cálculo de integrais multivariadas será visto no capı́tulo 0. Malhas num programa de computador Dentro de um programa de computador, podemos implementar a progressão aritmética definida na (eq.1 ) 37 CAPÍTULO 2. RAÍZES APROXIMADAS x=α enquanto (x < β) // (1) // (2) { x = x + ∆x } // (3). 1. o ponto inicial 2. a lógica que controla o laço 3. a progressão aritmética que define os nós da malha Este pequeno programa não faz nada, visı́vel ! Seria preciso um “comando” para guardar, num arquivo, no disco, os elementos da progressão aritmética ou fazê-los aparecer na tela do computador: (1) ∆x = β−α n x=α enquanto (x < β) // (1) // (2) { x = x + ∆x imprima(x) } // (3). // (4) 1. dando valores iniciais as variáveis 2. a lógica que controla o laço 3. a progressão aritmética que define os nós da malha 4. o comando para imprimir na tela os elementos da progressão aritmética O caso de malhas multidimensionais, num programa, consiste em encadeiar laços semelhantes a estes que apresentamos acima para o caso unidimensional, não tem segredo, outro, que dominar a definição do domı́nio, e como já dissemos este pode ser um problema especial: considere um lado dentro de uma região, ele pode representar um buraco em que você não deseja ou não poderá obter informações. Mas o tal lago pode representar informações preciosas num estudo de reações climáticas da mesma região. . . 2.1.2 Procura de raı́zes por varredura Temos as ferramentas para fazer a nossa primeira pesquisa de raı́zes de uma função. Vamos discutir uma solução simples e intuitiva do problema. Vamos varrer um intervalo [α, β] procurando quando os valores de f sejam menores que um erro escolhido. Pela discussão feita acima sobre o chamado paradoxo de Aquiles, não vale a pena procurar quando f (x) = 0, porque a probabilidade de que Aquiles encontre a tartaruga, é a mesma de encontremos x tal que f (x) = 0, é muito pequena praticamente nula. 38 CAPÍTULO 2. RAÍZES APROXIMADAS Como no caso de Aquiles, é melhor procurar saber quando tivermos passado pela tartaruga: (2.28) |f (x)| > ǫ Um primeiro “programa” seria: ∆x = β−α [1] n x=α enquanto (x < β) [1] [2] { se (|f (x)| < ǫ) escreva x, f (x); x = x + ∆x } [3] [4] Este livro não pode oferecer-lhe técnicas de programação, sem fugir dos seus objetivos, mas algumas sugestões podem ser encontradas aqui. Uma delas é básica: construa programas que executem tarefas especı́ficas e bem restritas, depois cole os programas para produzir um algorimo mais complexo, quando tiver certeza de que todas as etapas anteriores foram bem testadas. Outra forma de fazer programas eficientes consiste em partir de um programa como este que está acima e ir acrescentando ao programas novas rotinas. Mesmo neste caso vale a observação anterior: teste as rotinas separadamente antes de incluı́-las no programa. Esta metodologia se presta para o trabalho em equipe. Descrição das etapas do programa 1. valores iniciais para as variáveis 2. a lógica que controla o laço 3. o teste para encontrar as raı́zes aproximadas 4. a progressão aritmética que define os nós da malha Exemplo 3 Procura de raı́zes Todos os exemplos apresentados aqui foram executados com programa raizes01.c que pode ser obtido aqui,[20, programas.tgz], ou no CD que acompanha este livro. Em seguida lhe apresentamos uma lista de exercı́cios em que você será convidado a usar o programa para repetir estes exemplos e construir outros para melhorar a sua compreensão do assunto. 1. Raiz de f (x) = x2 no intervalo [−1, 1] Rodamos um programa que implementa o algoritmo acima. O programa solicita os pontos inicial e final do intervalo de busca, e pede a norma da malha, depois o programa usa a própria norma da malha no teste |f (x)| < ǫ = ∆x CAPÍTULO 2. RAÍZES APROXIMADAS 39 > Forneca-me o intervalo [a,b] para busca de raizes: a = -1 b = 1 > Sua busca de raizes no intervalo [ -1.000000 , 1.000000 ] > Forneca-me o passo delta da malha para a busca: > Sugestao 0.01 < delta < 0.5 delta = 0.1 > Precisao da malha 0.100000 ================================================= > Aperte <enter> para continuar Raiz provavel da funcao no intervalo [-0.100000,0.000000] valor de f no ponto -0.100000 --> 0.010000 valor de f no ponto 0.000000 --> 0.000000 Raiz provavel da funcao no intervalo [0.000000,0.100000] valor de f no ponto 0.000000 --> 0.000000 valor de f no ponto 0.100000 --> 0.010000 O programa acha dois intervalos onde há valores aproximados para a raiz da função, e escreve o valor de f em cada extremo do intervalo: • [−0.1, 0] • [0, 0.1] Aqui você já pode ver uma dificuldade na determinação de raı́zes aproximadas, com programas de computador. O programa encontrou duas raizes, uma no intervalo [−0.1, 0] e outra no intervalo [0, 0.1] que representam, ambas, a mesma raı́z, x = 0. Este é o problema intitulado separação das raı́zes . O nome não é dos melhores porque, como você vê, acima, não há duas raı́zes e sim uma única que foi apresentada como aparecendo em dois intervalos consecutivos. A figura (fig. 2.4) página 40, pretende ilustrar o problema descrito no exemplo. Uma malha muito fina levará o programa a encontrar vários pontos que satisfazem a desigualdade. Este é um dos principais problemas em Cálculo Numérico: nós não sabemos fazer programas que possam funcionar sozinhos. Temos que monitorar o resultado dos programas e selecionar, dentre as possibilidades por eles encontradas, quais são interessantes. Este mesmo programa poderia não encontrar nenhuma raı́z no intervalao indicado, se usarmos um valor muito pequeno para ǫ. Veja o resultado se modificarmos o programa com ∆x 6= ǫ Forneca-me o intervalo [a,b] para busca de raizes: a = -1 b = 1 40 CAPÍTULO 2. RAÍZES APROXIMADAS f |y| < r Figura 2.4: Vários representantes da única raiz Sua busca de raizes no intervalo [ -1.000000 , 1.000000 ] Forneca-me o passo delta da malha para a busca: Sugestao 0.01 < delta < 0.5 delta = 0.3 Precisao da malha: 0.300000 Forneca-me o erro epsilon : Sugestao 0.01 < epsilon < 0.5 0.001 Erro : 0.001000 ================================================= Aperte <enter> para continuar Nenhuma raiz foi encontrada no intervalo dado ! Rode, novamente, o programa, com passo mais fino... Desta vez o programa não conseguiu encontrar nenhuma raiz, observe porque. • Como escolhemos ∆x = 0.3 ele analisou os intervalos [−1, −0, 7], [−0.7, −0.4], [−0.4, −0.1], [−0.1, 0.2], ... • e em cada um deles verificou se nos extremos |f (x)| < ǫ; • os testes falharam nos extremos em todos os casos porque somente no interior do intervalo [−0.1, 0.2] é que poderia ter dado certo. Veja o resultado se agora rodarmos o programa com ∆x = 0.1 Forneca-me o intervalo [a,b] para busca de raizes: CAPÍTULO 2. RAÍZES APROXIMADAS 41 a = -1 b = 1 Sua busca de raizes no intervalo [ -1.000000 , 1.000000 ] Forneca-me o passo delta da malha para a busca: Sugestao 0.01 < delta < 0.5 delta = 0.1 Precisao da malha: 0.100000 Forneca-me o erro epsilon : Sugestao 0.01 < epsilon < 0.5 0.001 Erro : 0.001000 ================================================= Aperte <enter> para continuar Raiz provavel da funcao no intervalo [0.000000,0.100000] valor de f no ponto 0.000000 --> 0.000000 valor de f no ponto 0.100000 --> 0.010000 O programa analisou os intervalos [−1, −0.9], [−0.9, −0.8], . . . , [−0.1, 0], [0, 0.1] e achou uma raiz no intervalo [0, 0.1]. Se o programa tivesse testado os dois extremos de cada intervalo, teria achado também uma raı́z no intervalo [−0.1, 0]. 2. raı́zes de f (x) = x5 + x4 + x3 + x2 + x + 1 em [−3, 3] Forneca-me o intervalo [a,b] para busca de raizes: a = -3 b = 3 Sua busca de raizes no intervalo [ -3.000000 , 3.000000 ] Forneca-me o passo delta da malha para a busca: Sugestao 0.01 < delta < 0.5 delta = 0.01 Precisao da malha: 0.010000 Forneca-me o erro epsilon : Sugestao 0.01 < epsilon < 0.5 0.1 Erro : 0.100000 ================================================= Aperte <enter> para continuar Raiz provavel da funcao no intervalo [-1.030002,-1.020002] valor de f no ponto -1.030002 --> -0.095599 valor de f no ponto -1.020002 --> -0.062463 Raiz provavel da funcao no intervalo [-1.020002,-1.010002] CAPÍTULO 2. RAÍZES APROXIMADAS 42 valor de f no ponto -1.020002 --> -0.062463 valor de f no ponto -1.010002 --> -0.030613 Raiz provavel da funcao no intervalo [-1.010002,-1.000002] valor de f no ponto -1.010002 --> -0.030613 valor de f no ponto -1.000002 --> -0.000006 Raiz provavel da funcao no intervalo [-1.000002,-0.990002] valor de f no ponto -1.000002 --> -0.000006 valor de f no ponto -0.990002 --> 0.029401 Raiz provavel da funcao no intervalo [-0.990002,-0.980002] valor de f no ponto -0.990002 --> 0.029401 valor de f no ponto -0.980002 --> 0.057650 Raiz provavel da funcao no intervalo [-0.980002,-0.970002] valor de f no ponto -0.980002 --> 0.057650 valor de f no ponto -0.970002 --> 0.084781 Raiz provavel da funcao no intervalo [-0.970002,-0.960002] valor de f no ponto -0.970002 --> 0.084781 valor de f no ponto -0.960002 --> 0.110833 Esta função tem uma única raı́z, no ponto x = −1 e o programa encontrou vários intervalos em que o valor de |f (x)| < ǫ. Rodando o programa novamente, com o valor menor para ǫ temos Forneca-me o intervalo [a,b] para busca de raizes: a = -3 b = 3 Sua busca de raizes no intervalo [ -3.000000 , 3.000000 ] Forneca-me o passo delta da malha para a busca: Sugestao 0.01 < delta < 0.5 delta = 0.01 Precisao da malha: 0.010000 Forneca-me o erro epsilon : Sugestao 0.01 < epsilon < 0.5 0.0001 Erro : 0.000100 ================================================= Aperte <enter> para continuar Raiz provavel da funcao no intervalo [-1.000002,-0.990002] valor de f no ponto -1.000002 --> -0.000006 CAPÍTULO 2. RAÍZES APROXIMADAS valor de f no ponto -0.990002 43 --> 0.029401 O programa conseguiu isolar um único intervalo com uma raı́z aproximada. Os exemplos acima mostram as dificuldades que temos para resolver o problema de encontrar as raı́zes de uma função usando varreduras. Depois veremos que, com técnicas mais refinadas, poderemos evitar estes erros. Porém os programas podem ainda, deixar de encontrar raı́zes, mesmo que elas existam o que nos obriga a monitorar o funcionamento dos programas para dirigir a busca a partir dos resultados indicados. Exercı́cios 5 Procurando raı́zes com varreduras 1. Leia o programa raizes01.c. Logo no inı́cio o programa traz instruções de como compilar e rodar um programa. 2. Você pode repetir as experiências registradas aqui rodando o programa raizes01.c. A função cujas raı́zes estão sendo procuradas, está definida dentro do programa, ao final. Troque a equação para executar os seus experimentos e depois compile e rode o programa. Dentro do programa, no inı́cio há instruções de como compilar e rodar o programa. 3. Rode raizes01.c com f (x) = x2 no intervalo [−3.2, 3] com passo 0.3 e erro máximo 0.001. O programa vai dizer-lhe que nenhuma raiz foi encontrada. Analise por que ? 4. Rode raizes01.c com f (x) = x2 no intervalo [−3, 3] com passo 0.3 e erro máximo 0.001. Agora o programa vai encontrar um intervalo onde há uma raiz. 5. Rode raizes01.c com f (x) = x no intervalo [−3.2, 3] com passo 0.3 e erro máximo 0.05. O programa vai dizer-lhe que nenhuma raiz foi encontrada. Analise por que ? 6. Rode raizes01.c com f (x) = x2 no intervalo [−3, 3] com passo 0.05 e erro máximo 0.01. O programa vai encontrar vários sub-intervalos onde há raı́zes. Nos exercı́cios, a busca de raı́zes, com uma mesma função um programa produz diversos resultados. A figura (2.4) oferece uma boa descrição geométrica para este problema: • uma malha com passo muito fino e com erro (módulo máximo) relativamente muito grande, apresenta vários nós em que a desigualdade é verificada; • se o erro, (módulo máximo) for relativamente muito pequeno nenhum dos nós da malha vai satisfazer a desigualdade. CAPÍTULO 2. RAÍZES APROXIMADAS 44 Observe que usei o advérbio “relativamente” para qualificar os adjetivos grande ou pequeno porque as grandezas são relativas a algum referencial. Você talvez precise de fazer algumas experiências com o programa raizes01.c para compreender o problema descrito nesta seção. Na próxima seção vamos encontrar uma saı́da para esta dificuldade. 2.2 Raı́zes analisando a troca de sinal Acima analisamos a busca de raı́zes apenas testando quando o valor de f (x) fosse pequeno: |f (x)| < ǫ (2.29) Vamos mostrar, como um exemplo, que isto pode ser insuficiente. 2.2.1 Análise do programa raizes01.c Analise o que acontece com a função f (x) = x ao rodarmos o programa raizes01.c. Forneca-me o intervalo [a,b] para busca de raizes: a = -3.2 b = 3 Sua busca de raizes no intervalo [ -3.2.000000 , 3.000000 ] Forneca-me o passo delta da malha para a busca: Sugestao 0.01 < delta < 0.5 delta = 0.3 Precisao da malha: 0.30000 Forneca-me o erro epsilon : Sugestao 0.01 < epsilon < 0.5 0.001 Erro : 0.001000 ================================================= Aperte <enter> para continuar Nenhuma raiz foi encontrada no intervalo dado ! Rode, novamente, o programa, com passo mais fino... O programa não encontrou |f (x)| < 0.001 no intervalo considerado. Em vez de procurar por um valor pequeno de |f (x)| e portanto depender da relatividade do tamanho que se vai procurar, vamos verificar quando a função troca de sinal. 45 CAPÍTULO 2. RAÍZES APROXIMADAS Este método nos livra do relativismo2 . Quando uma função contı́nua trocar de sinal em um intervalo, neste intervalo há um ponto (pelo menos) em que a função vai se anular. Se introduzirmos esta pequena melhora no programa ele irá encontrar uma raiz aproximada com os mesmo dados (∆x, ǫ). Vamos incluir o teste f (x) ∗ f (x + ∆x) ≤ 0 que descobre quando f troca de sinal dentro de um intervalo. O programa ∆x = β−α n x=α enquanto (x < β) [1] [1] [2] { se (|f (x)| < ǫ) ou (f (x)f (x + ∆x) ≤ 0 ) {escreva x, f (x)}; x = x + ∆x } [3] [4] Comentando as etapas do programa 1. valores iniciais para as variáveis 2. a lógica que controla o laço 3. o teste para encontrar as raı́zes aproximadas tanto a verifica se módulo de f é pequeno: |f (x)| < ǫ como também verifica se f troca de sinal no intervalo: f (x)f (x + ∆x) ≤ 0 O operador lógico ou “pesca” se uma destas condições for satisfeita. 4. a progressão aritmética que define os nós da malha Veja o resultado deste programa “mais especializado”: Forneca-me o intervalo [a,b] para busca de raizes: a = -3 b = 3 Sua busca de raizes no intervalo [ -3.000000 , 3.000000 ] Forneca-me o passo delta da malha para a busca: Sugestao 0.01 < delta < 0.5 delta = 0.15 Precisao da malha: 0.150000 2 tamanho é um conceito relativo, depende de um referencial... CAPÍTULO 2. RAÍZES APROXIMADAS 46 Forneca-me o erro epsilon : Sugestao 0.01 < epsilon < 0.5 0.001000 Erro : 0.001000 ================================================= Aperte <enter> para continuar Raiz provavel da funcao no intervalo [-0.150000,0.000000] valor de f no ponto -0.150000 --> -0.150000 valor de f no ponto 0.000000 --> 0.000000 Raiz provavel da funcao no intervalo [0.000000,0.150000] valor de f no ponto 0.000000 --> 0.000000 valor de f no ponto 0.150000 --> 0.150000 O programa achou dois intervalos, num deles a função troca de sinal, no outro a função é pequena. Veja outro exemplo: Forneca-me o intervalo [a,b] para busca de raizes: a = -2 b = 2 Sua busca de raizes no intervalo [ -2.000000 , 2.000000 ] Forneca-me o passo delta da malha para a busca: Sugestao 0.01 < delta < 0.5 delta = 0.15 Precisao da malha: 0.150000 Forneca-me o erro epsilon : Sugestao 0.01 < epsilon < 0.5 0.01 Erro : 0.010000 ================================================= Aperte <enter> para continuar Raiz provavel da funcao no intervalo [-0.050000,0.100000] valor de f no ponto -0.050000 --> -0.050000 valor de f no ponto 0.100000 --> 0.100000 Bastou que trocassemos os pontos inicial e final do intervalo de busca para que o programa identificasse um único intervalo onde há raı́z da função. Monitorando o programa conseguimos obter um resultado preciso. Se você não souber programar, ou não tiver acesso a um computador, se tudo que você tiver for uma máquina de calcular, o algoritmo analisando a troca de sinal é o ideal. Depois de verificar num intervalo “grande” que f troca CAPÍTULO 2. RAÍZES APROXIMADAS 47 de sinal, você pode refinar sua pesquisa em sub-intervalos deste até encontrar um pequeno intervalo onde se encontra a raı́z. Exercı́cios 6 Explorando raizes011.c 1. Leia o programa raizes011.c. Logo no inı́cio o programa traz instruções de como compilar e rodar um programa. 2. Leia o programa raizes011.c. Leia o comentário (10) que lhe explica que o problema tem dados pre-definidos que você pode aproveitar na primeira vez que rodar o programa. 3. Leia o comentário (30) e elimine o teste do módulo máximo. Verifique que alguma raiz pode ser perdida, dependendo da equação que você estiver usando. Experimente vários tipos de equações. Leia o comentário (50). 4. Altere o programa a vontade, deve haver uma cópia em disco para você retornar à versão original... faça suas experiências. 2.3 Raı́z do tipo secante Falamos na troca de sinal para encontrar raı́zes de funções. A forma clássica é o método das secantes que vamos estudar mais a frente. Como preparação para os métodos clássicos vou fazer uma análise dos tipos de raı́zes que irei classificar como do tipo secante e do tipo tangente. Primeiro vamos discutir as raı́zes do tipo secante. Vamos nos aprofundar na análise de quando uma função se anula. São desafios interessantes que temos pela frente. Os gráficos podem ter curvas e neste caso encontrar as raı́zes exige mais domı́nio do assunto. Observe o que nos diz a figura (fig. 2.5) página 48, O gráfico da função f “corta” o eixo OX em dois pontos. • Raı́z por tangência Uma desta raı́zes é do tipo “tangente”, veja o gráfico, (fig. 2.5). O gráfico de f tangencia o eixo OX, no ponto x1 e corta o eixo OX no ponto x2 . – x1 é um ponto de tangência, uma raiz em que f ′ (x1 ) = 0. (2.30) e não seria possı́vel obter esta raı́z pelo método das secantes neste ponto porque neste ponto (nesta raı́z) f não troca de sinal. Aparentemente a única forma de encontrar esta raı́z é usando o teste |f (x)| < ǫ (2.31) Num ponto de tangência, como x1 , o gráfico pode ser comparado com o gráfico de uma parábola em que ∆f << ∆x. O sı́mbolo << 48 CAPÍTULO 2. RAÍZES APROXIMADAS Esta raíz é possível de se determinar pelo método das secantes raíz aproximada obtida pelo método das secantes f x 1 x 2 raíz impossível de se obter pelo método das secantes Figura 2.5: O método das secantes se lê “muito menor do que. A tal ponto ∆f << ∆x que o quociente 3 ∆x1 (f ) = ∆f ∆x tem limite zero, quando ∆x representar o zero . A derivada é zero. Vou tratar deste caso na próxima seção. Vamos ver que existe outra maneira de encontrar esta raiz sem ser com a desigualdade (2.32) |f (x)| < ǫ que já sabemos que é problemática porque depende de valor “relativamente pequenos”, coisas com que programas não podem lidar de forma efetiva. – Raı́z por secância o ponto x2 é um ponto de secância do gráfico com o eixo OX e vou me especializar neste caso agora. A outra raı́z é do tipo “secante”, o gráfico graf (f ) corta o eixo OX de forma semelhante a uma reta, neste ponto (nesta raı́z) f troca de sinal. Aqui o teste |f (x)| < ǫ (2.33) funciona mal porque é difı́cil comparar o tamanho de |f (x)| com o tamanho de ∆x e desta forma fica difı́cil definir um erro ǫ adequado. 3 ou, como ainda se diz, “quando ∆x tender a zero” 49 CAPÍTULO 2. RAÍZES APROXIMADAS É hora de observar que igualdades e desigualdades são sempre difı́ceis de serem obtidas com programas, e a razão está descrita acima, a dificuldade de comparar tamanhos. É mais simples e prático usarmos o teste da troca de sinal f (x)f (x + ∆x) ≤ 0 (2.34) porque se o zero x2 ∈ [x, x+∆x] então f terá sinais diferentes nos extremos do intervalo. 2.3.1 Método da secante O chamado método da secante consiste em substituir o gráfico de f , num intervalo em que haja troca de sinal, pela reta secante obtida com os valores de f nos extremos do intervalo. Notação: Vamos designar por [a, a + ∆x] um intervalo que descobrimos4 em que f troca de sinal. Veja o gráfico (fig. 2.5), página 48, e observe o ponto x2 . Na figura estou salientando que a raiz da equação do primeiro grau que representa a reta secante, é uma aproximação da raiz de f . Queremos obter a raiz da função do primeiro grau cujo gráfico passa no pontos (2.35) (a, f (a)), (a + ∆x, f (a + ∆x)) então precisamos da equação da reta que passa por estes dois pontos. Relembrando a equação da reta que passa num ponto com coeficiente angular m dado chegamos à equação que nos interessa: m= f (a+∆x)−f (a) a+∆x−a = f (a+∆x)−f (a) ∆x = ∆a f ∆x y − f (a) = m(x − a) fazendo y = 0 em y − f (a) = m(x − a) (a) y = 0 ⇒ x − a = − fm s0 = a − f (a) m (2.36) (2.37) (2.38) (2.39) (2.40) a raı́z aproximada que estamos procurando é s0 = a − 4 Não f (a) m (2.41) se esqueça de que chegamos até aqui dentro de um programa que fez uma varredura apenas testando troca de sinal e agora vamos entrar numa sub-rotina chamada procura raiz secante() 50 CAPÍTULO 2. RAÍZES APROXIMADAS Não se perca com a mudança de notação. Chegamos aqui, olhe a figura (fig. 2.5), página 48, porque sabemos que existe um ponto designado por x2 que é a raiz exata que gostariamos de encontrar. Resolvemos uma equaçao do primeiro grau para encontrar a raı́z da reta secante e estamos chamando s0 ao primeiro ponto de uma sucessão de pontos que esperamos que convirjam para a raı́z s n → x2 (2.42) x2 é o limite da sucessão sn Ao iterarmos este processo vamos criar a sucessão (sn ) referida acima. Precisamos re-escrever as equações acima alterando a notação de forma a sermos conduzidos a uma expressão (matemática) adequada. Depois vou transformar as equações matemáticas no algoritmo computacional que é muito mais simples, e se você preferir (não deve) pode saltar direto para o algoritmo computacional. Repetindo (e alterando a notação) temos: a0 = a; b0 = a0 + ∆x; m0 = y − f (a0 ) = m0 (x − a0 ) y = f (a0 ) + m0 (x − a0 ) f (b0 ) − f (a0 ) b0 − a0 (a0 ) y = 0 ⇒ s0 − a0 = − f m 0 (2.43) (2.44) (2.45) (2.46) (2.47) uma raı́z aproximada inicial s0 = a0 − f (a0 ) m0 (2.48) a única modificação foi que designamos por m0 o coeficiente angular da reta secante no intervalo onde (o programa) detectou a troca de sinal, e usamos a0 , b0 para representar os extremos do intervalo inicial, porque isto vai uniformizar a notação. Leia com calma e verá que é verdade, não foi para complicar, foi para tornar mais claro (padronizar). Porque agora vamos considerar um segundo intervalo, um sub-intervalo deste primeiro. Veja a construção do algoritmo. • O ponto s0 associado ao coeficiente angular m0 , divide o intervalo [a0 , b0 ] em dois sub-intervalos [a0 , s0 ] , [s0 , b0 ] (2.49) 51 CAPÍTULO 2. RAÍZES APROXIMADAS • certamente há uma troca de sinal em um destes intervalos porque havia troca de sinal no intervalo primitivo (2.50) [a0 , b0 ]; Problema Pode haver mais de uma troca de sinal e isto pode representar um complicador para o algoritmo, o programa pode simplesmente se perder em buscas indefinidas... Logo diremos como podemos controlar este problema. Mas vamos supor a situação mais benignaa e para depois procurar melhores algoritmos. a é a técnica que estamos utilizando, montamos a teoria usando os casos simples, depois iremos testá-la e procurar algoritmos mais robustos • Testamos a troca de sinal e no intervalo onde ela se verificar, traçamos5 nova reta secante usando os extremos para determinar agora o ponto s2 da sucessão: a0 = a; b0 = b; (2.51) Se f (a0 )f (s0 ) ≤ 0 então b1 = s0 ; a1 = a0 ; (2.52) (2.53) senão b1 = b0 ; a1 = s0 ; (2.54) m1 = f (b1 )−f (a1 ) b1 −a1 (2.55) y=0 y = r1 (x) = f (a1 ) + m1 (x − a1 ) ⇒ ⇒ x = s1 = a1 − f (a1 ) m1 (2.56) (2.57) • iteramos este processo para encontrar an , bn , mn = f (bn )−f (an ) bn −an (2.58) y=0 y = rn (x) = f (an ) + mn (x − an ) ⇒ ⇒ x = sn = an − f (an ) mn até que o teste |f (sn)| < ǫ em que ǫ é a precisão com que desejamos calcular a raı́z. 5 não “traçamos” nada, apenas calculamos a raı́z da equação do primeiro grau (2.59) (2.60) CAPÍTULO 2. RAÍZES APROXIMADAS 52 Observação 3 Você pode fazer isto com calc A linguagem de programação calc é injustamente chamada de C interpretado, é uma outra linguagem de programação que tem uma precisão infinita, coisa que C não tem. Mas se parece com C e pode servir para fazer protótipos de programas em C. Veja uma sessão para obter a sucessão de raı́zes de uma função. Depois que você rodar o script do calc, volte e releia as contas matemáticas que vão da equação (51) até a equação (60) a respeito das quais você, provavelmente, pensou que o autor estava complicando, para ver que é, exatamente, o que a máquina precisa para “pensar” corretamente e lhe dar os resultados certos. define f(x) {return sin(1 +x/4)*(x+1)} x = -10 delta = 0.7 while (f(x)*f(x+delta) >= 0){ x = x + delta; print x,; } print x-delta, x ; ## o resultado é o intervalo [-5.1 ,-4.4] a0 = -5.1; b0 = -4.4; m0 = (f(b0)-f(a0))/(b0 - a0); s0 = a0 - f(a0)/m0; print s0; -4.09298252718108963004 if (f(a0)*f(s0) <= 0 ) { b1 = s0; a1 = a0;} else {a1 = s0; b1 = b0;}; m1 = (f(b1)-f(a1))/(b1 - a1); s1 = a1 - f(a1)/m1; print s1; -4.01048304495901701641 if (f(a1)*f(s1) <= 0 ) { b2 = s1; a2 = a1;} else {a2 = s1; b2 = b1;}; m2 = (f(b2)-f(a2))/(b2 - a2); s2 = a2 - f(a2)/m2; print s2; -4.00121371137763323854 if (f(a2)*f(s2) <= 0 ) { b3 = s2; a3 = a2;} else {a3 = s2; b3 = b2;}; m3 = (f(b3)-f(a3))/(b3 - a3); s3 = a3 - f(a3)/m3; print s3; -4.00014094678986900281 53 CAPÍTULO 2. RAÍZES APROXIMADAS if (f(a3)*f(s3) <= 0 ) { b4 = s3; a4 = a3;} else {a4 = s3; b4 = b3;}; m4 = (f(b4)-f(a4))/(b4 - a4); s4 = a4 - f(a4)/m4; print s4; -4.00001637370536391669 A notação matemática tem que passar por pelas quatro sucessões (an )n , (bn )n , (mn )n , (sn )n que irão definir os novos sub-intervalos que iremos encontrar. A notação computacional nos permite calcular as raı́zes, com um programa, e a notação matemática nos permite provar que ela existe. São duas coisas distintas e somente podemos rodar programas se pudermos provar que eles chegarão em algum resultado. O contrário é inócuo. No capı́tulo 0 vamos discutir melhor os métodos matemáticos que determinam as raı́zes dentro de um quadro mais geral. Todos os métodos que estamos usando aqui são recursivos e o o capı́tulo 0 vai discutir recursividade. Claro, você pode, e deve, chegar até o o capı́tulo 0 agora para entender melhor o que estamos fazendo e começar a ler sobre este outro assunto. O livro está departamentalizado por uma questão de organização, mas você não precisa ficar preso a estas paredes. Vou transformar o método matemático no algoritmo computacional, até mesmo porque você poderá rodar o algoritmo e isto lhe servirá de motivação para entender melhor o método matemático. O algoritmo do método da secante I Comece analisando a figura (2.6) página 54, que é um fluxograma, um planejamento visual que fazemos antes de escrever um programa. No centro da figura (2.6) você pode observar um caminho, indicado pelas seta que sai do “diamante” que representa o teste de parada do programa |f (a)| > epsilon (2.61) que é uma mistura de Matemática e computação. Numa linguagem de computação deveria6 estar (abs(f (a)) > epsilon) Também não aparecem sn porque numa linguagem de programação os valores se encontram em memórias cujos endereços estão associados a variáveis, e é isto que o programador deve ver os nomes das variáveis (e não o endereço onde os dados estão guardados). 6 em Pascal a função valor absoluto é abs(), em C é fabsf() 54 CAPÍTULO 2. RAÍZES APROXIMADAS f troca de sinal em [a,b] Método da secante V F | f(a) | > epsilon m = (f(b)−f(a))/(b−a) r(x) = f(a) + m(x − a) s é a raíz de r a é a raíz aproximada com erro epsilon V b=s f(s)f(a)<=0 F a=s Figura 2.6: Fluxograma - método da secante • Entramos no algoritmo quando descobrimos que há uma troca de sinal no intervalo [a, b] e calculamos, sucessivamente, m, r(x), s. • Somos levados agora ao teste que vai decidir em que intervalo há nova troca de sinal f (s)f (a) <= 0 (2.62) • Um novo intervalo, onde se verifica a troca de sinal, é calculado: – O teste resultando em verdadeiro o programa vai colocar o valor s na memória apontada pela variável b. – Se o teste resultar em falso o programa vai colocar o valor s na memória apontada pela variável a. Neste escolha a variável que não foi usada fica com o seu valor primitivo. • Este novo intervalo continua sendo designado por [a, b] e se o teste de parada do algoritmo, na equação (62), resultar em verdadeiro novo ciclo vai ser efetuado. Se for falso significa que a precisão esperada já foi atingida e portanto o algoritmo para. 55 CAPÍTULO 2. RAÍZES APROXIMADAS • O programa escolhe quem vai ser indicada como raı́z aproximada, se é a, ou s ou b, ou como em alguns dos nossos programas a+b 2 pura questão de gosto do programador. Se o programador for mais exigente aplicaria o teste da (62) a estes quatro candidatos para escolher aquele que ofereça uma precisão maior. Matemática do Método da secante Vamos repetir de forma suscinta, tanto os cálculos matemáticos como o algoritmo computacional nesta seção e na próxima. Para construir a formulação matemática do método, vou mais uma vez retomar a sequência de equações em que calculei a raiz, alterando novamente a notação. Repetindo (e alterando a notação) temos: [a, a + ∆x] = [a0 , b0 ] (2.63) ∆x0 = b0 − a0 (2.64) y − f (a0 ) = m0 (x − a0 ) y = f (a0 ) + m0 (x − a0 ) (2.66) (2.67) m0 = f (b0 )−f (a0 ) ∆x0 y = 0 ⇒ s0 = a0 − (2.65) f (a0 ) m0 (2.68) a primeira versão da raı́z aproximada que achamos foi s0 = a0 − f (a0 ) m0 (2.69) Agora determinamos em qual dos sub-intervalos há troca de sinal (se houver nos dois7 , o programa terá que se lembrar disto para fazer nova busca no outro interval): f (a0 )f (s0 ) ≤ 0 ; f (s0 )f (b0 ) ≤ 0 (2.70) Vou simplificar a redação sob a suposição de que apenas um destes produtos é negativo (mas fica claro que é uma simplificação e que o programa tem que ir em busca da outra possibilidade). se (f (a0 )f (s0 ) ≤ 0)[a1 , b1 ] = [a0 , s0 ] senão [a1 , b1 ] = [s0 , b0 ] 7 observe que isto significa que há mais de uma raiz no intervalo (2.71) (2.72) CAPÍTULO 2. RAÍZES APROXIMADAS 56 o que nos levará a definir m1 e s1 [a1 , b1 ] ∆x1 = b1 − a1 )−f (a1 ) m1 = f (b1∆x 1 y − f (a1 ) = m1 (x − a1 ) −f (a1 ) = m1 (x1 − a1 ) s1 = a1 − f (a1 ) m1 (2.73) (2.74) (2.75) (2.76) (2.77) (2.78) (2.79) achamos assim a segunda versão da raı́z aproximada s1 = a1 − f (a1 ) m1 (2.80) Podemos provar, usando indução finita, que sn = an − f (an ) mn (2.81) definindo as quatro sucessões, ak , bk , mk = f (bk ) − f (ak ) f (ak ) , sk = ak − bk − ak mk (2.82) Algoritmo do Método da secante II A notação computacional é mais simples. Vamos usar a mesma técnica, copiando a equação e alterando a notação. Repetindo (e alterando a notação) temos. Simplesmente chamamos de [a, b] o intervalo onde foi detectada a troca de sinal [a, b] é o intervalo onde há troca de sinal m= f (b)−f (a) b−a y − f (a) = m(x − a) (a) y = 0 ⇒ x − a = − fm x=a− f (a) m (2.83) (2.84) (2.85) (2.86) (2.87) a raı́z aproximada que estamos procurando, no primeiro passo é x=a− f (a) m e agora tomamos a decisão sobre a nova troca de sinal (2.88) CAPÍTULO 2. RAÍZES APROXIMADAS f (a)f (x) ≤ 0 ⇒ [a, b] = [a, x] f (x)f (b) ≤ 0 ⇒ [a, b] = [x, b] 57 (2.89) (2.90) e seguimos no laço com as variáveis tendo assumido os novos valores. Será preciso um condicional para que o processo pare. Isto pode ser feito de duas maneiras: • com um contador estipulando-se o número máximo de iterações; • testando em cada passo a precisão da raiz aproximada obtida. O programas raizes013.c faz isto, rode e leia o programa. 2.4 A raiz num ponto de tangência Vamos agora estudar como podemos descobrir a raiz quando ela for um ponto em que a função tangência o eixo OX. O método consiste em usar a troca de sinal da derivada. Vou começar mostrando alguns exemplos gráficos para ilustrar as dificuldades e como podemos sair delas. Para lhe dar uma visão da necessidade de um pouco mais de teoria, comece resolvendo os exercı́cios seguintes sobre os quais eu farei comentários em seguida. A figura (fig. 2.5) página 48 é a referência para as experiências que vamos começar fazendo, nela há uma raiz num ponto de tangência do gráfico com o eixo OX e o objetivo é produzir um programa que consiga descobrir esta raiz. Exercı́cios 7 Usando raizes011.c 1. Edite o programa raizes011.c e escolha a função f (x) = (x + 3)(x + 3)(x − 2) que pode estar desligada (com o sı́mbolo de comentário) na versão que você tiver do programa. Depois compile e rode o programa com os valores pre-definidos que ele tem (dê “enter” em todas as perguntas do programa). Analise o resultado. 2. Rode novamente o programa usando os valores pre-determinados, entretanto responda com o valor 0.1 para a precisão ǫ (quando o programa solicitar o valor da variável epsilon). Observe que o resultado ficou diferente. 3. Rode novamente o programa usando os valores pre-determinados, mas escolha um valor grande para a norma da partição. Sugestão ∆x = 1. Comentando os resultados do programa nas experiências que você fez usando os valores pre-deteminados no programa. CAPÍTULO 2. RAÍZES APROXIMADAS 58 • Quando ǫ = ∆x o programa encontrou diversas raı́zes que na verdade representam a mesma raiz exata x = −3. Veja uma réplica dos resultados do programa captados8 por um editor de textos: Forneça-me o intervalo [a,b] para busca de raizes: a = b = Forneça-me o passo delta da malha para a busca: Sugest~ ao 0.01 < delta < 0.5 delta = Forneça-me o erro epsilon (módulo máximo) : Sugest~ ao 0.01 < epsilon < 0.5 epsilon = Sua busca de raı́zes no intervalo [-5.000000 , 5.000000] Precis~ ao da malha: 0.100000 Erro (módulo máximo): 0.100000 ================================================= Aperte <enter> para continuar Raı́z provável da funç~ ao no intervalo [-3.100002,-3.000002] valor de f no ponto -3.100002 é 0.051002 valor de f no ponto -3.000002 é 0.000000 Raı́z provável da funç~ ao no intervalo [-3.000002,-2.900002] valor de f no ponto -3.000002 é 0.000000 valor de f no ponto -2.900002 é 0.048998 Raı́z provável da funç~ ao no intervalo [-2.900002,-2.800002] valor de f no ponto -2.900002 é 0.048998 valor de f no ponto -2.800002 é 0.191996 Estas raı́zes representam todas a raiz x = -3 - são valores próximos de −3 que o programa captou. Achou também a raiz x = 2 Raı́z provável da funç~ ao no intervalo [1.999998,2.099998] valor de f no ponto 1.999998 é 0.000057 valor de f no ponto 2.099998 é -2.600939 • Quando ǫ << ∆x lhe sugeri no exercı́cio que você usasse 0.1 o programa achou uma representação para cada uma das raı́zes existentes: 8 o editor de textos joe, permite que você rode programa dentro dele e consequentemente pode captar os resultados do programa CAPÍTULO 2. RAÍZES APROXIMADAS 59 Forneça-me o intervalo [a,b] para busca de raizes: a = b = Forneça-me o passo delta da malha para a busca: Sugest~ ao 0.01 < delta < 0.5 delta = 0.3 Forneça-me o erro epsilon (módulo máximo) : Sugest~ ao 0.01 < epsilon < 0.5 epsilon = 0.1 Sua busca de raı́zes no intervalo [-5.000000 , 5.000000] Precis~ ao da malha: 0.300000 Erro (módulo máximo): 0.100000 ================================================= Aperte <enter> para continuar Raı́z provável da funç~ ao no intervalo [-2.900000,-2.600000] valor de f no ponto -2.900000 é 0.049000 valor de f no ponto -2.600000 é 0.736001 Raı́z provável da funç~ ao no intervalo [1.900000,2.200000] valor de f no ponto 1.900000 é 2.400998 valor de f no ponto 2.200000 é -5.408001 Vamos agora continuar as experiências agora usando o programa raizes012.c Exercı́cios 8 Experiências com raizes012.c 1. Leia o programa raizes012.c e verifique se a função escolhida é f (x) = (x + 3)(x + 3)(x − 2). Se não for selecione9 esta função cujo gráfico é semelhante ao da figura (fig. 2.5). 2. Leia o programa raizes012.c. Ele é uma alteração de raizes011.c. Leia também os comentários dentro do programa. Compile e rode o programa usando os valores predefinidos no programa. O programa escolhe, ele mesmo, o valor da precisão ǫ, verifique isto. Veja o comentário (41) do programa, veja como foi calculado ǫ. 3. O programa, como os valores pre-definidos, encontrou as raı́zes −3, 2. Teste o programa com valores diferntes para a norma da malha. 4. Rode raizes012.c alterando a equação de f para f (x) = (x − 1)2 (1 + 7(x + 1)2 ). Observe que esta equação já se encontra no programa, mas desligada por um comentário. Basta ligá-la. 9 voce pode “ligar ou desligar” uma expressão colocando ou apagando o sı́mbolo de comentário // na frente, não precisa apagar 60 CAPÍTULO 2. RAÍZES APROXIMADAS 5. Teste o programa com outras equações e nestes casos altere o intervalo de busca. Isto pode ser feito dentro do programa ou respondendo às perguntas que o programa fizer. Vamos entender o método utilizado no programa raizes012.c. Num ponto de tangência com o eixo OX a derivada troca de sinal e podemos nos aproveitar disto para encontrar a raiz evitando a perigosa comparação |f (x)| < ǫ. (2.91) Analise a figura (fig. 2.7), página 60. Vamos tirar algumas informações desta figura. • No ponto a temos uma raı́z do tipo tangente, • e marcamos dois pontos, a−, a+, anterior e posterior10 , ao ponto a, • fizemos os gráficos das retas tangentes em (a−, f (a−)), e (a+, f (a+)). f a a− a+ O coeficiente angular da reta tangente é negativo Figura 2.7: O coeficiente angular da reta tangente é positivo Num ponto de tangência, tipo parabólico • Você pode ver que antes e depois do ponto de tangência, o coeficiente angular da reta tangente tem sinais diferentes: sinal(∆a− (f )) 6= sinal(∆a+ (f )) sinal( ∆f ∆x |a− ) 10 a−, 6= sinal( ∆f ∆x |a+ ) (2.92) (2.93) a+ são notações padrão em Matemática para representar pontos anterior e posterior ao ponto a CAPÍTULO 2. RAÍZES APROXIMADAS 61 • Como ∆x > 0 então11 podemos comparar apenas os numeradores12 . Analisaremos apenas os produtos dos númeradores, o produto de dois valores sucessivos de f ao longo da varredura. Estamos evitando os quocientes: f ′ (a) ∗ f ′ (a + ∆) < 0 (2.94) para verificar se é um ponto de tangência de tipo parabólico. Se for uma tangência do tipo “ponto de inflexão” o programa continuará fazendo o teste de troca de sinal de f . Caracterizamos estes dois tipos de raı́zes, veja a figura (fig. 2.5), como • raiz tangente, é o que acontece no ponto x1 em que o gráfico da função tangência o eixo OX; • raiz secante, é o que acontece no ponto x2 em que o gráfico da função corta o eixo OX. Fica incluı́da, aqui o caso de tangente com ponto de inflexão. • raiz tangente - num ponto de inflexão vamos tratá-lo como um ponto de secância porque nele a função troca de sinal. Vamos agora observar o que acontece no gráfico representado na figura (fig. 2.8) página 62, Neste gráfico a figura nos mostra dois pontos em que a derivada se anula, mas apenas o ponto x2 é o que nos interessa. Então foi preciso incluir no programa raizes012.c um teste complementar ao teste de troca de sinal da derivada. Tanto em x1 , como em x2 , na (fig. 2.8), a derivada troca de sinal. Mas apenas em x2 a função é pequena. Este é o resultado do exercı́cio em que lhe foi pedido que rodasse o programa com a função f (x) = (x − 1)2 (1 + 7(x + 1)2 ). O gráfico desta função se assemelha ao gráfico na figura (fig. 2.8). Voce pode obter este gráfico usando Gnuplot, não se esqueça de usar o comando set xrange [-4:3] para instruir Gnuplot a considerar o gráfico sobre o intervalo [−4, 3] afim de que você consiga ver alguma coisa interessante. Se você não fizer isto ele vai usar o intervalo padrão, [−10, 10]. Vimos assim o método para “separar” estas duas situações dentro de uma análise automática (dentro de um programa). O algoritmo irá fazer os dois testes em cada ponto da varredura, irá aceitar o ponto x2 como uma raiz aproximada e descartar o ponto x1 . Estamos nos referindo ainda à figura (fig. 2.8). Observe que terminamos por voltar a usar a desigualdade, agora apenas em uma forma complementar. Assim ela funciona. 11 ∆x não precisa ser positivo, mas tradicionalmente consideramos assim para que o seu valor coı̈ncida com o comprimento do intervalo considerado 12 aqui você tem a técnica prometida no capı́tulo das derivadas, em vez de usarmos derivada, estamos usando derivada aproximada 62 CAPÍTULO 2. RAÍZES APROXIMADAS x2 x1 A derivada se anula no ponto x1 mas ele não é uma raiz Figura 2.8: Aqui a derivada se anula e é também uma raiz Quando a derivada é zero Exercı́cios 9 1. Leia o programa raizes013.c e identifique onde o programa verifica a troca de sinal de f e da derivada. 2. Rode o programa com cada uma das três funções definidas no programa. Com os dados pre definidos os resultados não são muito bons, aumente a precisão da malha em experiências sucessivas. 3. Defina novas funções para testar o programa. 2.5 O método da tangente Vamos estudar o método da tangente para determinação aproximada da raı́z de uma função. Evite confundir-se, nas seções anteriores falamos de “raiz (do tipo) tangente”, são as raı́zes múltiplas, em que o graf (f ) é tangente ao eixo OX. Agora vamos discutir o método da tangente para determinar raı́zes. É natural observar, pese o trocadilho, que o método da tangente serve para encontrar raı́zes (do tipo) tangente. . . São duas coisas diferentes os tipos como classificamos as raizes, tangente, secantes e os métodos clássicos, com estes nomes, para determinar raı́zes, metodo da tangente, que vamos estudar agora e método da secante que usamos rapidamente na seção anterior. Começaremos por mostrar as limitações do método. A crı́tica se encontra no contexto, ao iniciarmos o capı́tulo chamamos sua atenção para a dificuldade de resolver o problema que nos ocupa aqui, estamos apenas ressaltando, em cada momento as dificuldades que aparecem. O plano do trabalho: 63 CAPÍTULO 2. RAÍZES APROXIMADAS • Começaremos mostrando um exemplo em que o método funciona, • depois um exemplo em que ele não pode funcionar. • Vamos transformar o método em um programa de computador e encontrar algumas raı́zes. Você poderá rodar o programa e experimentar o resultado. • Finalmente vamos discutir em que condições (hipóteses) o método da tangente pode ser aplicado e um programa de computador em que ele é usado intensivamente junto com o método da secante. 2.5.1 Como funciona o método da tangente Veja as figuras (fig. 2.9) página 63 que nos mostram como funciona o método. raíz exata f raíz aproximada obtida por uma tangente f A raíz exata é esta Raízes aproximadas por retas tangentes Figura 2.9: Uma sequência de retas tangentes... CAPÍTULO 2. RAÍZES APROXIMADAS 64 Com uma sequência de retas tangentes vamos encontrar uma sequência de pontos x0 , x1 , . . . que se aproximam de uma raı́z, a sequência converge para a raı́z da função f . Descrição do método: • Ponto inicial Escolhemos um ponto inicial x0 e nele traçamos uma reta tangente ao gráfico de f ; • Ponto inicial o método somente se aplica em raı́zes do tipo secante ou do tipo tangente portanto temos que encontrar um intervalo em que haja troca de sinal de f ou de f ′ . O ponto inicial a0 é um dos extremos deste intervalo de troca de sinal; • Segundo ponto Escrevemos a equação da reta tangente em (a0 , f (a0 )) e cuja raiz encontramos, este é o ponto s0 da sucessão; • Iteramos o processo, traçando a reta tangente ao gráfico de f no ponto (s0 , f (s0 )), resolvendo a nova equação do primeiro grau correspondente a esta nova reta tangente encontrando assim s2 , s3 , . . . , sn • A sucessão (sn )n>0 converge para uma raiz de f sn → s a raı́z exata f (sn ) → f (s) = 0 f (sn ) ≈ 0 (2.95) (2.96) (2.97) e sn é uma raiz aproximada de f . No “algoritmo”, que acabamos de descrever, usamos a expressão “escolhemos um ponto inicial”. Estamos fazendo uso de uns do métodos mais “controversiais” da Matemática, a “escolha”. Controversial porque funciona e também porque envolve uma dos problemas abertos da Matemática, o axioma da escolha. Como escolher um elemento próximo de um ponto desconhecido ? Em algumas circunstâncias podemos provar que o método funciona. 2.5.2 E quando o método não funciona ? Mas vamos logo ver quando deixa de funcionar. Na figura (fig. 2.10) página 65, • Consideramos a reta tangente no (A, f (A)); A raiz da reta tangente em A é B; • Esta reta tangente tem como raiz o ponto x = B • Consideramos então a reta tangente no ponto (B, f (B)) corta o eixo OX no ponto x = A e a raiz da reta tangente em B é A ... 65 CAPÍTULO 2. RAÍZES APROXIMADAS A raiz da reta tangente em A é B a raiz da reta tangente em B é A ... f A Figura 2.10: B Duas tangentes se reproduzindo indefinidamente Vemos que caimos num circulo vicioso. O programa que fizermos cairá em loop infinito. Obviamente este é um exemplo raro de acontecer, ele apenas mostra que o risco existe e uma intervenção do usuário do programa pode prevenir contra este acontecimento com uma troca do ponto inicial. No intervalo que a figura (2.10) exibe o problema, podemos escolher um ponto inicial diferente de A ou B para evitar o ciclo vicioso. É preciso incluir no programa um teto de operações que ao ser atingido sem sucesso o programa sugira ao usuário alterar um pouco um dos extremos do intervalo inicial. Você pode ver na figura (fig. 2.10) página 65 que uma alterção no valor de A faz com que a sucessão dos zeros das retas tangentes convirja para uma das raı́zes. 2.5.3 Funciona com precisão, se funcionar • Considere o ponto a escolhido para traçarmos a reta tangente por (a, f (a)) • A equação da reta tangente sendo (2.9 (2.9 a0 = a = s0 y − f (a0 ) = f ′ (a0 )(x − a0 ) y = 0 ⇒ s0 = a0 − s1 = s0 − f (a0 ) f ′ (a0 ) f (s0 ) f ′ (s0 ) = T (a0 ) = T (s0 ) = T (s0 ) (2.10 s2 = s1 − f (s1 ) (2.10 = T (s1 ) = T (T (s f ′ (s1 ) (2.10 66 CAPÍTULO 2. RAÍZES APROXIMADAS • podemos ver que a lei de formação dos elementos da sucessão é sn = sn−1 − f (sn−1 ) = T n (s0 ) f ′ (sn−1 ) (2.103) em que na equação (103) a “potência” aplicada no operador T representa repetição do operador aplicado no ponto inicial. Seria interessante fazer uma primeira leitura do capı́tulo 0, se você ainda não tiver feito isto, para reconhecer que estamos lidando com expressões recursivas. Assim, – cada nova raı́z da função do primeiro grau tangente, se expressa sempre da mesma maneira usando a anterior, – a “potência” da “transformação” T , indica o número de vezes que ela foi aplicada ao ponto inicial a, função de função. – É o que chamamos de iterações de T . Na equação (eq. 103) se está indicando que calculamos a terceira iterada de T . • Falta-nos provar que a sucessão assim obtida se aproxima da raı́z exata, ou tem algum limite. Este é um exemplo de recursividade, semelhante ao que vamos usar no cálculo de raı́zes, na busca binária. . Vamos discutir recursividade no capı́tulo 0. O método Matemático para obter demonstrações passa pela abstração das expressões. Suponhamos que a sucessão produzida pelas iteradas de T seja convergente (tenha limite) e chamemos este limite de b. Como T é uma função contı́nua em qualquer intervalo em que a derivada de f não se anule, (vamos admitir esta hipótese) temos xn+1 = T (xn ) −→ b (2.104) como T é contı́nua T (b) = b = b − b=b− f (b) f ′ (b) ⇒ f (b) f ′ (b) f (b) f ′ (b) =0 como por hipótese f ′ (b) 6= 0 então f (b) = 0 (2.105) (2.106) (2.107) ou seja, a hipótese de que a sucessão seja convergente nos conduz a que o limite seja uma raı́z de f . Uma consequência dos cálculos acima é que T (b) = b. (2.108) Quando isto acontece dizemos que o ponto b é um ponto fixo da função T Vamos obter uma condição suficiente para que T tenha um ponto fixo. Começando por relembrar a aproximação linear dada pela derivada, da qual extrairemos a condição que desejamos. 67 CAPÍTULO 2. RAÍZES APROXIMADAS T (b) − T (a) = T ′ (a)(b − a) + o(b − a) (2.109) |x2 − x1 | = |T (x1 ) − T (x0 )| = |T ′ (x0 )||x1 − x0 | + o(|x1 − x0 |) (2.110) |x3 − x2 | = |T (x2 ) − T (x1 )| = |T ′ (x1 )||x2 − x1 | + o(|x2 − x1 |) (2.111) ··· (2.112) |xn − xn−1 | = |T (xn−1 ) − T (xn−2 )| = (2.113) = |T ′ (xn−2 )||xn−1 − xn−2 | + o(|xn−1 − xn−2 |) (2.114) Na (eq. 109) aplicamos a fórmula de aproximação linear pela derivada. Na (eq. 110) voltamos a usar a mesma aproximação, mas agora, e sucessivamente, nas seguintes, estamos aplicando aos elementos que foram sendo obtidos pela iteração do método das tangentes. Como queremos que a sucessão seja convergente, e portanto que a distância entre dois novos pontos seja cada vez menor, vamos impor uma semelhança com as séries geométricas. Vemos que a cada dois novos pares de pontos da sucessão surge como multiplicador T ′ (a) em que a é um dos pontos anteriores. Basta-nos que a derivada de T seja menor do que 1 para a comparação com as séries geométricas tenha sucesso. Esta é a hipótese que precisamos. Derivando T quando f for um polinômio de grau maior do que 2, temos T (x) = x − f (x) f ′ (x) ′′ (x) |T ′ (x)| = | f (x)f f ′ (x)2 | (2.115) (2.116) (2.117) A fração racional que aparece como derivada de T tem polinômios de mesmo grau no denominador e no denominador: 2n − 2 em que n é o grau de f com termos lider igual n(n − 1)a2n x2n−2 ; n2 a2n x2n−2 (2.118) respectivamente, no numerador e no denominador. Portanto, exceto no pontos em que o denominador se anule e numa vizinhança destes pontos, a derivada é menor do que 1 em módulo o que fará que com que o método da tangente produza iteradas que convirjam para uma raı́z, se alguma houver. Demonstramos assim Teorema 1 Método da tangente Se f for uma função polinomial de grau maior do que 2, as iteradas de T (x) = x − ff′(x) (x) convergem para uma raı́z de f Infelizmente não podemos aplicar o método arbitrariamente. Ele tem que ser monitorado, já vimos um exemplo gráfico mostrando que nem sempre o método funciona. CAPÍTULO 2. RAÍZES APROXIMADAS 68 Exemplo 4 Iteradas do método da tangente Dentro do Gnuplot você pode executar a sequência de comandos abaixo. O resultado será o gráfico das sucessivas retas tangentes cujas raı́zes se aproximam da raı́z x = −1 de f (x) = x3 + x2 + x + 1 set xrange [-3:3] f(x) = x**3 + x**2 + x + 1 df(x) = 3*x**2 + 2*x + 1 a = -2.0 reta(x) = f(a) + df(a)*(x-a) plot reta(x),f(x),0 pause -2 a = a - f(a)/df(a) // calculo de novo valor para a plot reta(x),f(x),0 pause -2 a = a - f(a)/df(a) // calculo de novo valor para a plot reta(x),f(x),0 pause -2 a = a - f(a)/df(a) plot reta(x),f(x),0 pause -2 // calculo de novo valor para a a = a - f(a)/df(a) plot reta(x),f(x),0 pause -2 // calculo de novo valor para a a = a - f(a)/df(a) // calculo de novo valor para a plot reta(x),f(x),0 pause -2 Os valores de a para seis iterações, são: -2 -1.44444444444444444444 -1.13057124921531701193 -1.01497995228090965490 -1.00022106301976068486 -1.00000004885805680258 onde vemos o valor −1.00000004885805680258 para raı́z aproximada de f (x) = x3 + x2 + x + 1; f (−1) = 0 Veja outra iteração, em que usamos como ponto inicial x = −20 (2.119) CAPÍTULO 2. RAÍZES APROXIMADAS 69 -20 -13.43755383290267011197 -9.05962558919570544190 -6.13716679398553077204 -4.18447916859825334681 -2.87926553135386543847 -2.01119102134060700997 -1.45135929223981982374 -1.13389377376757093773 -1.01570113608729869728 -1.00024268578025712329 -1.00000005888209635796 e vemos que novamente o algoritmo produz uma sucessão convergindo para a raiz x = −1. Estas duas sequências foram obtidas com calc e o programa é o seguinte em que uma função recursiva, principal() está se chamando a si própria enquanto o parâmetro p for estritamente positivo. Quando p = 0 o processo para. Copie esta sequência em um arquivo, por exemplo, raizes.calc e depois chame calc < raizes.calc e você poderá repetir a experiência feita acima. Troque a equação da função para calcular raı́zes de outras funções. define principal(a,p) { if (p) {printf("%f \n",a);principal(T(a),p-1);} } define f(x){return x**3 +x**2 +x +1;} define df(x){return 3*x**2 + 2*x + 1;} define T(x) {return x - f(x)/df(x);} principal(-2,10); quit; Na penúltima linha se encontra o comando que bota o programa para rodar: principal(-2,10). O primeiro parâmetro, “a = −2” é o ponto inicial, e o segundo parâmetro, “p = 10” é o número de iterações que desejarmos. Troque a equação de f e de sua derivada df e repita a experiência com outra função. Logo no primeiro passo você verá se o processo conduz, ou não a alguma raı́z. Experimente f (x) = x2 + 1 70 CAPÍTULO 2. RAÍZES APROXIMADAS que não tem raı́zes reais. Use um número de pequeno de iterações, 10 no máximo. 2.6 Busca binária Vamos estudar aqui o método busca binária para determinação de raı́zes. A busca binária é um método matemático antigo, o matemático Dedekind o utilizou para definir números reais, os chamados cortes de Dedekind, que consistem em dividir a reta racional em duas semi-retas, numa “se encontra o ponto”13 (número real desejado) e assim sucessivamente vai sendo dividido o conjunto Q dos número racionais até se obter uma aproximação desejada de um número real (ou uma sucessão convergente). Vamos usar esta idéia para produzir uma sucessão de raı́zes aproximadas convergindo para uma raiz de f . Precisamos encontrar um intervalo em que f troque sinal e o processo é muito semelhante ao do método da reta secante. Descrição matemática do método: • Suponha que que no intervalo [a, b] = [a0 , b0 ] Hipótese 1 Existência de raı́z em um subintervalo – f troque de sinal, – ou f ′ troque de sinal, e f seja pequena. Este intervalo pode ser obtido com uma varredura que pare quando uma destas duas condições for satisfeita. • Selecione o ponto médio do intervalo s0 = b0 − a0 2 (2.120) e repita o teste 1 para descobrir em qual das duas metades está a raı́z procurada e defina [a0 , s0 ] = [a1 , b1 ] [s0 , b0 ] = [a1 , b1 ] se hipótese for verdadeira se hipótese for verdadeira s1 = 13 eta b1 −a1 2 erro lógico... se o ponto estivesse aı́ não seria uma reta racional... (2.121) (2.122) 71 CAPÍTULO 2. RAÍZES APROXIMADAS • Itere o processo para obter o próximo intervalo; O resultado deste processo é uma sucessão de intervalos cuja médida será sempre a metade do anterior, tendo partido de um intervalo de medida r = b − a = b0 − a0 b − a = b0 − a0 = r m([a0 , b0 ]) = r m([a1 , b1 ]) = 2r .. . m([an , bn ]) = r 2n →0 (2.123) (2.124) (2.125) (2.126) (2.127) sendo esta uma convergência muito rápida porque é dominada por progressão geométrica de razão 12 . Veja abaixo o poder decrescente de uma progressão geométrica num cálculo executado por calc C-style arbitrary precision calculator (version 2.11.10.1) Calc is open software. For license details type: help copyright [Type "exit" to exit, or "help" for help.] ; define f(n,r) {return r*power(1/2, n);} f(n,r) defined ; r = 3 ; k = 10 ; for(n=0; n<= k; n++) {printf("%d --> %f \n", n, f(n,r));} 0 --> 3 1 --> 1.5 2 --> 0.75 3 --> 0.375 4 --> 0.1875 5 --> 0.09375 6 --> 0.046875 7 --> 0.0234375 8 --> 0.01171875 9 --> 0.005859375 10 --> 0.0029296875 ; na décima iterada, partindo de um intervalo de medida três já estamos com um intervalo de medida 0.0029296875 e portanto já teriamos uma aproximação da raiz com esta precisão. Como em geral vamos procurar mudanças de sinal usando intervalos de medida 0.1 na décima iterada já teriamos um intervalo medindo 0.00009765625 consequentemente nos oferecendo a raiz com esta precisão. 72 CAPÍTULO 2. RAÍZES APROXIMADAS Exemplo 5 Cálculo de uma raiz Considere a função f (x) = x3 + x2 + x + 1 (2.128) que tem uma única raiz no ponto x = 1, veja isto fazendo o gráfico desta função com Gnuplot. Coloque set xrange [-2:2] para obter um gráfico mais nı́tido. Vou chamar Calc C-style arbitrary precision calculator (version 2.11.10.1) Calc is open software. For license details type: help copyright [Type "exit" to exit, or "help" for help.] define f(x) {return power(x,3) + power(x,2) + x + 1} f(x) defined define busca_binaria(a,b,n){ local x = (a+b)/2; if (n==0) {printf("%f \n",x); return x;} else if (f(a)*f(x) ==0) return x; else if (f(a)*f(x) < 0) busca_binaria(a,(a+b)/2,n-1); else busca_binaria((a+b)/2,b,n-1);} busca_binaria(a,b,n) defined ; busca_binaria(-3,3,10); -0.9990234375 ; busca_binaria(-3,3,20); -0.99999904632568359375 busca_binaria(-1.1,-0.9,3) -1 quit; observe que no último cálculo usamos um intervalo de medida 0.2 e a busca binária encontrou a raiz com 3 iterações. Não acredite que buscas binárias encontrem raı́zes exatas... este é um resultado muito bom. Use as definições expostas acima, em Calc para construir outros exemplos. Exemplo 6 As raı́zes de (x − 3)2 (x + 3)sin( x2x+1 ) O programa raizes014.c procura raı́zes usando busca binária nos pontos de secância e analisa a troca de sinal da derivada nos pontos de tangência. Veja o resultado do programa procurando as raı́zes de f (x) = (x − 3)2 (x + 3)sin( x2 x ) +1 no intervalo [−10, 10] em que há tres raı́zes: Raizes aproximadas - metodos da secante e tangente (2.129) CAPÍTULO 2. RAÍZES APROXIMADAS 73 Forneca-me o intervalo [a,b] para busca de raizes: a = -10.000000 b = 10.000000 Forneca-me o passo da malha para a busca: Sugestao 0.01 < delta < 0.5 delta = 0.050000 busca de raizes no intervalo [-10.000000, 10.000000] Precisao da malha 0.050000 ================================================= Aperte <enter> para continuar Raiz, por busca binária, provável, da funç~ ao no intervalo [-3.049978, -2.999978] valor de f no ponto -10.728836 --> 134.416962 Raiz, por busca binária, provável, da funç~ ao no intervalo [-0.049980, 0.000020] valor de f no ponto 27.644634 --> 672.242493 Raiz, por tang^ encia, provável, da funç~ ao no intervalo [2.950018, 3.000018] valor de f no ponto 2.975019 --> 0.001109 Encontrei 3 intervalos onde h’a raizes este resultados foram captados pelo editor Joe dentro do qual eu rodei uma versão compilada do programa raizes014.c. Observação 4 Ponto fixo e busca binária Neste capı́tulo estudamos o problema f (x) = 0 (2.130) “resolver uma equações”. Fomos omissos em não dizer que tudo que fizemos vale para funções polinomiais. Na verdade sabemos que vale para funções não polinomiais também, mas com algumas restrições. Por exemplo, a demonstração que fizemos do método das tangentes usou que a função, cujas raı́zes procuravamos, era polinomial. Sem dúvida sabemos um pouco mais sobre o assunto do que antes de iniciar o capı́tulo, sobre tudo sabemos que não é fácil resolver-se uma equação. Algebricamente, as equações polinomiais somente podem ser resolvidas com radicais até o grau quatro. Mesmo as equações do grau três e quatro oferecem razoáveis dificuldade para que as resolvamos usando as fórmulas algébricas. Com um programa de computador, e com um monitoramento adequado do mesmo podemos ir bem mais longe. Como dissemos no inı́cio do capı́tulo, o nosso objetivo era tomar o problema de resolução de equações como motivação para o estudo de algumas técnicas matemáticas e seus correspondentes algoritmos computacionais. Estudamos assim os métodos clássicos para determinação de raı́zes, CAPÍTULO 2. RAÍZES APROXIMADAS 74 1. o método da secante; 2. o método da tangente; aos quais associamos a técnica computacional varredura. Também estudamos dois métodos matemáticos (e a correspondente implementação computacional) 1. busca binária; 2. sucessões recursivas; 3. ponto fixo. O método do ponto fixo é muito mais profundo do que nos foi possı́vel discutir aqui. Tudo que fizemos foi partir da hipótese de convergência e usando a continuuidade de uma função fomos conduzidos a que o limite satisfaz à equação T (b) = b (2.131) Um ponto de T satisfazendo esta equação, se chama ponto fixo . Os pontos fixos sempre aparecem nas iteradas de uma função e sempre usamos esta propriedade para resolver equações. Relembre aqui o que já dissemos no inı́cio do capı́tulo, estamos usando o problema para estudarmos técnicas que tem valor por si própria. Esta é uma delas, construir iteradas para encontrar pontos fixos que são soluções de equações. Esta técnica é usada largamente na construção de soluções aproximadas de equações diferenciais. Nós dedicaremos, ao final do livro, um capı́tulo à introdução deste assunto, onde voltaremos a usar o método do ponto fixo para resolver estas equações. 2.7 O problema completo O tı́tulo é audacioso, problemas completos dificilmente existem. O que vou fazer é juntar os pedaços, as discussões feitas nas seções anteriores, numa discussão final e apresentar-lhe um programa que faz todas estas análises conjuntamente. O problema de busca de raı́zes, na forma como o estudamos aqui, separa as raı́zes em dois tipos, • raı́zes do tipo tangente, que na verdade se classificam algebricamente como raı́zes múltiplas porque, numa vizinhança da raiz a função pode ser fatorada como (2.132) f (x) = (x − a)n g(x) ; g(a) 6= 0 75 CAPÍTULO 2. RAÍZES APROXIMADAS em que n é o ı́ndice de multiplicidade da raiz é um número par. Se n for par serão estas raı́zes que estou classificando aqui como do tipo tangente, não há troca de sinal em alguma vizinhança da raiz; • raı́zes do tipo secante podemos usar a notação do item anterior e dizer que f (x) = (x − a)n g(x) ; g(a) 6= 0 (2.133) com n impar. Neste caso há troca de sinal da função em alguma vizinhança da raiz e podemos usar os métodos clássicos: – busca de raı́zes pelo método da secante; – busca de raı́zes pelo método da tangente; – busca binária. Este método, a busca binária, pode ser usado quando a multiplicadade da raiz for par, mas eu não usei este método no programa. O programa raizes015.c faz isto salientando qual foi o método que ele escolheu em cada raiz. Testamos o programa com diversas funções com bons resultados, mas lhe entregamos também o código fonte no modo habitual de programação aberta. Se você melhorar o programa, distribua a melhor versão não se esquecendo de nos enviar uma cópia, poruqe o conhecimento é universal, é de todos. Veja o resultado do programa captado pelo editor Joe com pequenas alterações feitas por mim. Leia e rode o programa para fazer suas experiências. A função selecionada dentro do programa é f (x) = (x + 3.4)4 (x + 3)2 (x + 2)3 (x − 1)2 (x − 3)sen( x x2 + 1 (2.134) que não chega a ser uma função realmente maldosa. Bastaria acrescentar um termo como sen(3x) para deixar o programa instável. Esta instabilidade pode ser resolvida com uma mudança de variáveis, entretanto, como eu já disse diversas vezes, não há programa que possa funcionar sozinho, eles tem que ser monitorados. O programa conseguiu encontrar todas as raı́zes quando usei o passo 0.0001 com passo maior ele perde alguma das raı́zes. Raizes aproximadas - metodos da secante e tangente Forneca-me o intervalo [a,b] para busca de raizes: a = -10.000000 b = 10.000000 Forneca-me o passo da malha para a busca: Sugestao 0.01 < delta < 0.5 delta = 0.050000 0.0001 busca de raizes no intervalo [-10.000000, 10.000000] CAPÍTULO 2. RAÍZES APROXIMADAS Precisao da malha 0.000100 ================================================= ==== Quando a derivada troca de sinal - tang^ encia ===== Raiz, por tang^ encia, provável, da funç~ ao no intervalo [-3.400079, -3.399979] valor de f no ponto -3.400029 --> -0.000000 ==== fim do caso troca de sinal da derivada ===== ==== Quando a derivada troca de sinal - tang^ encia ===== Raiz, por tang^ encia, provável, da funç~ ao no intervalo [-3.000090, -2.999990] valor de f no ponto -3.000040 --> -0.000000 ==== fim do caso troca de sinal da derivada ===== ============= Tr^ es métodos =========== Raiz provável da funç~ ao no intervalo [-2.000017, -1.999917] ========1o método: por busca binária ======= valor de f no ponto -2.000000 --> 0.000000 ========2o método: pelo método da secante ========= valor de f no ponto -2.000012 --> -0.000000 ========3o método: pelo método da tangente ======== valor de f no ponto -1.999998 --> 0.000000 ======== fim do caso troca de sinal ======== ============= Tr^ es métodos =========== Raiz provável da funç~ ao no intervalo [-0.000097, 0.000003] ========1o método: por busca binária ======= valor de f no ponto -0.000000 --> 0.000984 ========2o método: pelo método da secante ========= valor de f no ponto -0.000000 --> 0.000000 ========3o método: pelo método da tangente ======== valor de f no ponto 0.000000 --> -0.000250 ======== fim do caso troca de sinal ======== ==== Quando a derivada troca de sinal - tang^ encia ===== Raiz, por tang^ encia, provável, da funç~ ao no intervalo [0.999956, 1.000056] valor de f no ponto 1.000006 --> -0.000006 ==== fim do caso troca de sinal da derivada ===== 76 77 CAPÍTULO 2. RAÍZES APROXIMADAS ============= Tr^ es métodos =========== Raiz provável da funç~ ao no intervalo [2.999995, 3.000095] ========1o método: por busca binária ======= valor de f no ponto 3.000000 --> 0.000000 ========2o método: pelo método da secante ========= valor de f no ponto 3.000000 --> 0.000000 ========3o método: pelo método da tangente ======== valor de f no ponto 3.000000 --> 0.000000 ======== fim do caso troca de sinal ======== Encontrei 6 intervalos onde h’a raizes 2.8 Interseção de gráficos Discutimos até agora a solução do problema f (x) = 0 mas é muito mais frequente precisarmos de resolver o problema f (x) = g(x) em que f, g são duas funções dadas. Evidentemente que este problema se reduz ao anterior, entretanto há técnicas especı́ficas para resolver o segundo problema que vamos discutir nesta seção. Uma expressão da forma f (x) = g(x) pode ser escrita como h(x) = f (x) − g(x) = 0 ≡ h(x) = 0 e portanto podemos dizer que este não é um novo problema que estamos estudando. Mas as peculiaridades em que o problema f (x) = g(x) se encontra, ou as aplicações que podem ser modeladas por este problema justificam que nos lhe demos uma atenção diferenciada como logo você irá ver. Vamos começar lendo o gráfico na figura (fig. 2.11) página 78. Este é um caso interessante que descreve uma gama de problemas do tipo f (x) = g(x) ou f (x) ≥ g(x) Analisando o gráfico vemos: • Temos um intervalo [a, b] • f (a) = g(a) e f (b) = g(b) • f ′ (a) > g ′ (a) e f ′ (b) < g ′ (b) • ∃ c ; c ∈ (a, b) ; f ′ (c) = g ′ (c) (2.135) 78 CAPÍTULO 2. RAÍZES APROXIMADAS g f´(a) < g´(a) f f´(a) > g´(a) c f´(c) < g´(c) b a Figura 2.11: Interseção de curvas ou seja, temos duas funções e algum ponto do domı́nio as derivadas delas se alternam em tamanho. Se por um momento aceitarmos a linguagem mecânica14 diremos que pode haver um momento em que o gráfico de g passe o gráfico de f porque a derivada representa a taxa de crescimento. Pelo teorema do valor médio tem que haver um ponto no interior do intervalo, c ∈ (a, b), tal que neste ponto as derivadas se igualem. Vejamos uma classe de problemas que podemos resolver com estes dados. Exemplo 7 Conhecemos tudo sobre um dos pontos Sabemos que • f (a) = g(a) • f ′ (a) > g ′ (a) e podemos provar que a partir de um certo valor x = b f ′ (x) < g ′ (x) (2.136) então é possı́vel encontrar outra solução b > a para o problema f (x) = g(x) Cosidere g(x) = x f (x) = 2(1 − e−x ) ; f ′ (x) = 2e−x −→ 0 quando x cresce f (0) = g(0) = 0 ; f ′ (0) = 2 > g ′ (0) = 1 (2.137) (2.138) (2.139) Como f ′ decresce muito rapidamente, é possı́vel que haja outra solução para o problema f (x) = g(x) quando x > 0. 14 que usualmente rejeitamos, tal como “tende” para limite 79 CAPÍTULO 2. RAÍZES APROXIMADAS Vamos analisar o que nos diz o Teorema do Valor médio para derivadas, se em algum ponto f ′ (x) = 1 f ′ (x) = 2e−x = 1 ⇒ e−x = 12 ⇒ ⇒ ex = 2 ⇒ x = ln(2) (2.140) (2.141) (2.142) Temos que procurar uma raı́z a a partir de x = ln(2) ≈ 0.69314718 o que faremos usando um dos nossos programas: a = 0.69314718 b = 10 Sua busca de raizes no intervalo [ 0.693147 , 10.000000 ] Forneca-me o passo delta da malha para a busca: Sugestao 0.01 < delta < 0.5 delta = 0.001 Precisao da malha 0.001000 ================================================= Aperte <enter> para continuar Procurando raizes do tipo secante Raiz, por secancia, provavel, da funcao no intervalo [1.593147,1.594147] valor de f no ponto 1.593647 com 13 iteracoes --> 0.000014 Observe somente o detalhe que ponto médio do Teorema do Valor médio não é a média aritmética entre os pontos a, b que resolvem o problema, mas se encontra razoavelmente próximo do ponto médio. Em outras palavras, 2ln(2) é uma aproximação da raı́z. Uma aplicação desta questão á determinação da área entre duas curvas. Neste caso não queremos encontrar todas as soluções do problema f (x) = g(x). Desejamos encontrar aquelas que ficam nos extremos de um intervalo que é a projeção, no eixo OX da região cuja área desejamos calcular. Um caso comum é que você pode ver no gráfico (fig. 2.12) graf (f ) ∩ graf (g) = {(a, f (a)), (b, f (b))} as duas curvas se cortam em exatamente dois pontos. O valor da área da região limitada por elas é Zb | (f (x) − g(x))dx| a e temos que encontrar as duas raı́zes do problema f (x) = g(x). O cálculo, com grande acuracidade de raı́zes somente pode ser feito com auxı́lio de programas de computador, entretanto, a determinação “grosseira” 80 CAPÍTULO 2. RAÍZES APROXIMADAS g f b a Figura 2.12: Região cuja área queremos calcular de um intervalo onde haja raı́z15 pode ser feito com auxı́lio de uma máquina de calcular eletrônica e isto é o que se espera na lista de exercı́cios a seguir proposta. Exercı́cios 10 Raizes de funções 1. Considere f (x) = x5 + x2 − 4 (a) (b) (c) (d) Mostre que f ′ tem apenas duas raı́zes, x0 < x1 . Prove, sem fazer cálculos numŕicos que f (x0 ) > f (x1 ) Prove fazendo algum cálculo numŕico que 0 > f (x0 ) > f (x1 ) Prove que f tem uma única raı́z real e determine um intervalo onde esta raı́z se encontra Resposta f (0) < 0, f (2) > 0 2. Encontre um intervalo contendo exatamente uma raı́z de f (x) = x − 10000sen(x) 3. Calcule a área da região limitada pelos gráficos das parábolas, figura y = x2 − x − 12 ; y = −x2 − x + 12 (fig. 2.13) página 81, 4. As curvas g(x) = (x2 + x − 12)cos( x x ) ; f (x) = (x2 − x − 12) ∗ sin( ) 2π 2π se cortam segundo tres pontos no intervalo [−7, 7], veja a figura y = x2 − x − 12 ; y = −x2 − x + 12 (fig. 2.14) página 81, Encontre os dois pontos mais distantes (ignore o ponto médio) e calcule a área indicada na figura. 15 ou no plural, a determinação dos intervalos onde haja raı́zes 81 CAPÍTULO 2. RAÍZES APROXIMADAS 15 f(x) g(x) 0 10 5 0 −5 −10 −15 −4 −3 −2 Figura 2.13: −1 0 1 2 3 4 área limitada por duas parábolas 100 f(x) g(x) 0 80 60 40 20 0 −20 −40 −60 −80 −100 −10 −5 Figura 2.14: 0 5 área limitada por duas curvas 10 Capı́tulo 3 Sucessões recursivas Os babilônios conheciam um método prático, ver [?], para cálcular raı́zes quadradadas, que vamos usar como introdução para o assunto deste capı́tulo porque é um algoritmo recursivo. Recursividade é um método em que uma função f “chama” a si própria. A recursividade é conhecida e usada em Matemática há milênios, como o algoritmo do cálculo de raźes quadradas, mas recentemente (desde 1970), com LISP, vem sendo usada em programas de computador produzindo algoritmos bastante otimizados. 3.1 Babilônios e raı́z quadrada Vamos usar o álgoritmo dos babilônios para calcular raı́zes quadradas como motivação para o assunto deste capı́tulo. Uma sequência é recursiva se for definida em função dos seus próprios termos: xn = f (xn−1 , . . . , x1 ) em que f é uma expressão legal (computacional ou matemática). Escolhemos o algoritmo dos babilônios para servir de introdução (e motivação) para o assunto deste capı́tulo por duas razões: • pela sua antiguidade provável de mais de 4.000 anos e assim nos educamos no respeito dos antigos e do antigo contra o mito de que o moderno é que bom; • pela sua alta precisão, com auxı́lio de uma máquina de calcular com memória, com algumas iteradas, quatro ou cinco, você obtém uma raiz quadrado com boa precisão. √ Uma primeira aproximação para a vem da desigualdade entre a média aritmética e a média geométrica: 82 83 CAPÍTULO 3. RECURSIVIDADE Teorema 2 Desigualdade aritmético-geométrica Se a, b > 0 temos √ ab ≤ a+b 2 (3.1) Dem : √ a+b 2 ab ≤ a +2ab+b 4 2ab + b2 ab ≤ ( a+b )2 = 2 4ab ≤ a2 + (3.2) 2 2 0 ≤ a2 − 2ab + b2 = (a − b)2 (3.3) (3.4) (3.5) e como a última equação é verdadeira e as anteriores são equivalentes algébricas dela, então a primeira é verdadeira. q.e.d . Este teorema vale para um número qualquer de termos, ver [26], mas aqui é suficiente o caso da média entre dois número positivos, mais exatamente 1, a em que a é o número positivo cuja raı́z quadrada desejamos. √ • Se a > 1 então 1 < a < a e 1 < a+1 < a; 2 √ • Se 0 < a < 1 então 1 > a > a e 1 > a+1 2 > a; portanto os números 1+a √ , a 2 se encontram ambos entre 1 e a até porque ambos são a média entre 1, a, um a média aritmética, o outro a média geomética, pelo teorema (2). √ Assim temos uma estimativa inicial, e de muito baixa precisão, para a como consequência da desigualdade aritmético-geométrica √ assim √ a≈ a= √ 1·a≤ a+1 2 (3.6) a+1 2 Exemplo 8 Raiz quadrada de 10 √ 10 + 1 = 5.5 2 Podemos ver neste exemplo como a estimativa fornecida pela desigualdade aritmético-geométrica é de baixa classe. Mas os babilônios há mais de 4.000 anos souberam iterar esta estimativa obtendo um algoritmo que fornece a raı́z quadrada com grande precisão depois de alguns passos. Uma observação simples conduz ao algoritmo dos babilônios. √ Se tivermos1 uma estimativa inicial, digamos, x, para a raı́z quadrada a então, xa é outra aproximação: 10 ≤ √ a a ≈√ = a x a 1e temos, que é a média com a unidade (3.7) 84 CAPÍTULO 3. RECURSIVIDADE √ a então xa será menor do a. √ √ • Se x for menor do que a então xa será maior do a. • Se x for maior do que √ • Quer dizer que temos duas aproximações, (no segundo caso) √ a a x, ; x < a < x x √ uma menor e outra maior do que a logo à média das duas que vai ser, melhor do que uma delas. Definimos (definiram os babilônios) g(x) = x+ 2 a x = a + x2 2x (3.8) cuja derivada é √ ; g ′ ( a) = 0 √ g ′ (x) > 0 ⇐ x > a √ g é crescente x > a √ √ x>√a √ g( a) = a ⇒ g(x) > a √ <x x > a ⇒ g(x) = x+a/x 2 √ x > a ⇒ g(g(x)) < g(x) g ′ (x) = x2 −a 2x2 (3.9) (3.10) (3.11) (3.12) (3.13) (3.14) Com estas propriedades podemos deduzir (possivelmente não foi assim que os babilônios provaram) √ uma primeira aproximação s0 = x > x √ a < s1 = g(s0 ) < s0 √ √ g( a) = a < g(s1 ) = s2 < s1 √ a < g(s1 ) = s2 < s1 < s0 .. . √ hipótese: a < sn = g(sn−1 ) < sn−1 √ √ g( a) = a < g(sn ) = sn+1 < sn e assim provamos por indução parte do Teorema Teorema 3 algoritmo dos babilônios (3.15) (3.16) (3.17) (3.18) (3.19) (3.20) (3.21) (3.22) 85 CAPÍTULO 3. RECURSIVIDADE A sucessão (sn )n definida recursivamente por √ a x é uma aproximação de √ x> a s0 = g(x) sn = g(sn−1 ) √ é decrescente e limitada por a logo converge para um limite √ sn → l = a (3.23) (3.24) Dem : √ Falta prova apenas a última afirmação do teorema, que o limite é exatamente a. Para isto observemos que g é contı́nua, portanto preserva limite o que significa que lim g(sn ) = g(lim sn ) n (3.25) n A direita na equação (25) temos lim sn+1 = l (3.26) g(lim sn ) = g(l) (3.27) g(l) = l (3.28) n e a esquerda na equação (25) temos n o que nos leva Substituindo na equação de g, (8), temos g(l) = l2 + a =l 2l ⇒ l2 + a = 2l2 ⇒ l= √ a (3.29) q.e.d . Definição 1 Ponto fixo Quando uma funçao g satisfizer a equação (28), dizemos que o valor l é um ponto fixo de g. A sucessão seguinte de equações mostra como eles faziam: 0 = x0 +10/x 2 1 = x1 +10/x 2 2 = x2 +10/x 2 3 = x3 +10/x 2 4 = x4 +10/x 2 √ e usando x5 como aproximação de 10 temos x0 x1 x2 x3 x4 =1 = 5.5 = 3.6590909 = 3.196005 = 3.162455 x1 x2 x3 x4 x5 x1 x2 x3 x4 x5 = 5.5 = 3.6590909 = 3.196005 = 3.162455 = 3.1622776 x25 = (3.1622776)2 = |9.999999 {z } 61946176 que nós dá 10 − x25 < 0.0000004 = 4 107 (3.30) 86 CAPÍTULO 3. RECURSIVIDADE Vejamos mais um exemplo, calculando a raı́z √ 1000. Exemplo 9 A raı́z de 1000 x0 x1 x2 x3 x4 x5 x6 x7 =1 = 500.5 = 251.249 = 127.6145 = 67.7253273 = 41.2454260 = 41.2454260 = 32.74526 x1 x2 x3 x4 x5 x6 x7 x8 = = = = = = = = x0 +1000/x0 2 x1 +1000/x1 2 x2 +1000/x2 2 x3 +1000/x3 2 x4 +1000/x4 2 x5 +1000/x5 2 x6 +1000/x6 2 x7 +1000/x7 2 x1 x2 x3 x4 x5 x6 x7 x8 = 500.5 = 251.249 = 127.6145 = 67.7253273 = 41.2454260 = 32.74526 = 32.74526 = 31.62278 x28 = (31.62278)2 = |1000.000 {z } 2149284 (3.31) Os exemplos são eloquentes, mostram que um “povo primitivo”, como os babilônios, usavam um método há mais de 4.000 anos que continua hoje imbatı́vel... Nós não temos nada melhor, para calcular raı́zes quadradas, a não ser máquinas com recursos formais. Por exemplo, o cálculo acima, feito em Calc tem o seguinte aspecto: ; ; ; ; ; ; ; ; ; ; ; y=1 y=(y+1000/y)/2 y=(y+1000/y)/2 y=(y+1000/y)/2 y=(y+1000/y)/2 y=(y+1000/y)/2 y=(y+1000/y)/2 y=(y+1000/y)/2 y=(y+1000/y)/2 y=(y+1000/y)/2 y ~31.62277660168433424334 ; y**2 ~1000.00000000003421099649 em que, tudo que precisamos, fazer foi apertar a “seta para cima” no teclado do micro, oito vezes. É tudo que podemos fazer para melhorar o algoritmo dos babilônios. Resta-nos agora entender o que se encontra por trás do método, é o que passaremos a fazer. Exercı́cios 11 Médias e raı́zes 1. Calcule as médias aritméticas e geométricas dos pares de números 87 CAPÍTULO 3. RECURSIVIDADE 12 f(x) x 0 "data" 10 8 6 4 2 0 1 2 3 Raíz 4 6 7 8 aproximada de 10 Figura 3.1: a 1 2 0.2 0.2 5 Determinação de b 2 4 0.4 1 √ a+b 2 10 √ ab 2. Calcule a média aritmética ponderada dos objetos dados considerando os pesos indicados a1 , a2 , a3 p1 , p2 , p3 3 P pi ai i=1 1, 2, 3 1, 2, 3 1, 2, 3 1, 2, 3 (1, 2), (2, 1), (1, 1) 0.1, 0.2, 0.7 0.4, 0.3, 0.3 1 1 1 3, 3, 3 1 1 1 6, 3, 2 1 1 1 6, 3, 2 3. Calcule, aproximadamente, as raı́zes quadradas dos números indicados, usando o método dos babilônios, até a quarta iterada, e indique o erro cometido: √ a x4 a 1 2 20 200 O gráfico (fig. 3.1), mostra a realização do algoritmo dos babilônios (para raı́z quadrada de 10). Nele podemos ver a função identidade e gráfico de g(x) = x + 10/x 2 88 CAPÍTULO 3. RECURSIVIDADE com a sucessão de pontos que vai sendo obtida com a iteradas de g para obter a sucessão recursiva (xn )n cujo limite é o ponto fixo √ √ ( 10, g( 10)). Você pode repetir este processo inclusive com outras raı́zes quadradas usando o programa em C que apresentamos logo a seguir. Exercı́cios 12 Sequências recursivas 1. Matemática Social Escolha uma função f (sem combinar com seus colegas de trabalho) tal que graf (f ) e o o gráfico da primeira bissetriz y = x se cortem no primeiro quadrante e que2 hipergraf (f ) seja convexo. Considere x0 > 0 escolhido arbitrariamente (sem combinar com seus colegas de trabalho) e construa graficamente a sucessão de pontos no plano (n não menor do que 4) (x0 , x0 ) (x0 , f (x0 )) ; x1 = f (x0 ) (x1 , x1 ) (x1 , f (x1 )) ; x2 = f (x1 ) (3.32) ··· ··· (xn , xn ) (xn , f (xn )) ; xn+1 = f (xn ) e agora compare o seu resultado com o dos seus colegas de trabalho para tirar uma conclusão. 2. Verifique (geometricamente) que a função f (x) = ln(x) não pode definir uma sucessão recursiva xn+1 = f (xn ) convergente. Justifique. 3. Verifique quais das funções seguintes produz uma sucessão recursiva convergente, e em que região isto se dá (se der). Sugestão faça um gráfico contendo graf (f ), graf (y = x). f a)f (x) = x + 3 c)f (x) = x2 e)f (x) = x2 − 9 [a, b] . Os exercı́os acima estão longe de esclarecer a importância ou os métodos como tratar sucessões recursivas que é um vasto tópico dentro do qual se encontra o algoritmo dos babilônios. 3.1.1 Um programa em C O programa se chama raizq graf.c e você pode encontrá-lo em [20]. 2o hipergráfico de f é o conjunto dos pontos (x, y) tal que y ≥ f (x) - é o conjunto limitado inferiormente pelo graf (f ) 89 CAPÍTULO 3. RECURSIVIDADE Os módulos do programa são, a função g(x, a) = x + a/x 2 em que deixamos a como parâmetro de formas que uma pequena alteração no programa permite que ele rode na linha de comandos. A função principal, main(), que é obrigatória em todo programa em C ou C + + e que puxa o script do teatro. Alguns comandos colocados na função principal para criar o arquivo “data” onde se encontram as linhas que Gnuplot irá traçar. Um arquivo que chamamos “transfere” e que contém os comando de Gnuplot e que serão chamados internamente pelo programa uma vez que quem vai fazer tudo é o programa em C. O programa contém comentários para ajudá-lo a compreender o que ele, faz, mas você deve ler os arquivos “data” e “transfere” que o programa cria, para compreendê-lo melhor. E, finalmente, escreva um e-mail ao autor, com suas dúvidas, ou consulte um hacker em computação a sua volta, eles são, em geral, benignos. O comando para compilar o programa é gcc -Wall -oprog -lm programa.c em que programa.c é o nome do arquivo onde você guardou o texto acima, e gcc é o nome do compilador C que acompanha qualquer distribuição Linux. Compilado o programa você o pode rodar (executar) o executável, prog, digitando numa shell do Linux ./prog no diretório onde se encontra o programa gravado. O programa descrito acima constroi qualquer exemplo de raı́z quadrada que você desejar, implementando o método dos babilonios. Ele cria dois arquivos: data e transfere. Se você apenas quiser rever3 o gráfico, digite numa shell (Linux) gnuplot transfere e você voltará a ver o gráfico recém feito com o programa. Ou, simplesmente, rode novamente4 o √ programa com os mesmos dados. O programa fará, automaticamente, o caso 2 se você apenas der, “enter”, como resposta a todas as perguntas. Movendo o cursor, sobre a tela gráfica do Gnuplot, você pode ver o valor aproximado da raı́z escolhida. Não espere conseguir grande precisão, nesta visualização. 3.2 Fundamentos da convergência de iteradas Exemplificamos, com o algoritmo dos babilônios da raı́z quadrada, que um tipo de sucessão, que designamos por recursivas eram convergentes. Também já vimos que o método das tangentes é gerado por uma função recursiva: 3 enquanto você não der “enter”, o gráfico ficará presente na tela você tiver problemas com o programa, ou não rodar Linux em seu computador, solicite uma versão do programa, ao autor, indicando qual o sistema que roda em seu computador 4 se 90 CAPÍTULO 3. RECURSIVIDADE g(x) = x − f (x) ; xn+1 = g(xn ) f ′ (x) (3.33) Desejamos agora demonstrar os fatos, descobrir em que condições podemos garantir que uma sucessão xn+1 = g(xn ) (3.34) seja convergente. Vamos usar a aproximação linear g(b) − g(a) = g ′ (a)(x − a) + o(|x − a|) x2 − x1 = g(x1 ) − g(x0 ) = g ′ (x0 )(x1 − x0 ) + o(|x1 − x0 |) |x2 − x1 | = |g(x1 ) − g(x0 )| ≤ |g ′ (x0 )| · |x1 − x0 | ··· |xn+1 − xn | = |g(xn ) − g(xn−1 )| ≤ |g (xn−1 )| · |xn − xn−1 | ′ (3.35) (3.36) (3.37) (3.38) (3.39) Estes cálculos nos mostram que precisamos da hipótese de que g seja diferenciável e que em uma vizinhança do ponto inicial x0 o módulo da derivada seja menor do que 1. Se isto acontecer podemos deduzir das equações acima: |x2 − x1 | = |g(x1 ) − g(x0 )| ≤ |g ′ (x0 )| · |x1 − x0 | |x3 − x2 | =≤ |g ′ (x1 )| · |x2 − x1 | ≤ |g ′ (x1 )||g ′ (x0 )| · |x1 − x0 | |xn+1 − xn | ≤ n−1 Y k=0 (3.40) (3.41) ··· (3.42) |g ′ (xk )||x1 − x0 | (3.43) Considerando os fatores na equação (eq. 43) seja r = max(|g ′ (x0 )|, . . . , |g ′ (xk )|, . . . , |g ′ (xn−1 )|) < 1 (3.44) podemos deduzir da (eq. 43) |xn+1 − xn | ≤ r n |x1 − x0 | (3.45) e assim comparar a sucessão (xn ) com uma sucessão geométrica convergente. Demonstramos assim o Teorema Teorema 4 Teorema do ponto fixo Se uma sucessão recursiva xn+1 = g(xn ) em que g é uma função diferenciável e tal que exista um domı́nio [a, b] a cujo interior pertença o ponto x0 e que |g ′ | < r < 1 em [a, b] então a sucessão recursiva xn+1 = g(xn ) converge para um ponto a de forma mais rápida que uma sucessão geométrica de razão r e o ponto a = lim xn é um ponto fixo de g n A última parte da tese do Teorema é o resultado das contas que fizemos na seção anterior, com o algoritmo dos babilônios para a raı́z quadrada. Embora 91 CAPÍTULO 3. RECURSIVIDADE o ponto fixo no caso daquele algoritmo tenha sido obtido num caso especial de função contı́nua, o arqumento aqui seria o mesmo. Há vários teoremas do ponto fixo, nós demonstramos acima um caso particular e bem simples que atende às nossas necessidades aqui. Mas o estudioso de análise irá encontrar mais a frente outras formulações deste teorema quando verá, entretanto, que a questão gira em torno das mesma idéias, poder garantir que a função g que define uma certa sucessão recursiva funcione como um freio interno da sucessão. Tais função satisfazem à desigualdade |g(a) − g(b)| < |a − b| portanto elas contraem a imagem e poristo se chamam de contrações. Quando a derivada for menor do que 1 em módulo temos uma contração, e foi isto que usamos na demonstração do teorema-4. 3.3 O algoritmo babibilônio é convergente Para terminar o projeto, queremos mostrar que o algoritmo babibilônio para raı́zes quadradas satisfaz às hipótses do teorema do ponto fixo, e portanto converge. Vimos que o algoritmo depende da função x+ a g(x) = (x + )/2 = x 2 cuja derivada é g ′ (x) = 1 2 − a x (3.46) a 2x2 . g ′ (x) = 0 =⇒ 1 − √ a = 0 =⇒ x = ± a 2 x (3.47) quer dizer que, para x > 0 o gráfico conjunto de g e da primeira bissetriz é da forma (fig. 3.2) ou da forma (fig. 3.3) g x 0 a Figura 3.2: Ponto inicial menor do que √ a 92 CAPÍTULO 3. RECURSIVIDADE g xo a Figura 3.3: Ponto inicial maior do que √ a Nos dois tipos de gráficos, (fig. 3.2) ou (fig. 3.3), vemos que o gráfico de g √ √ corta a primeira bissetriz na imagem do ponto fixo sobre o graf (g), ( a, a). Como g é assı́ntota à função x y= 2 √ √ e no ponto ( a,√ a) a derivada de g é zero, então se x0 for “grande”, quer dizer “maior do que a”, então |g ′ (x0 )| < 1. √ Consideremos então o intervalo I = [ a, ∞). Sobre I a hipótese do (Teorema 4) é atendida porque como g(x) < x então g(g(x))√< g(x) e portanto xn ∈ I, o que termina a demonstração se escolhermos x0 > a. Mas √ podemos considerar um ponto inicial x0 “pequeno”, isto é, menor do que a. Mas neste caso x1 = g(x0 ) = x0 + √ x0 + xa0 > a a x0 a 2 ) >a x0 x20 + 2a + ( xa0 )2 > a x20 + a + ( xa0 )2 > 0 (x0 + (3.48) (3.49) (3.50) (3.51) (3.52) provando que x1 ∈ I portanto, se escolhermos um ponto inicial “pequeno” o segundo ponto da sucessão obtida pelas iterações de g será “grande”, pertentecerá ao intervalo I e portanto a sucessão (xn )n≥1 ⊂ I (3.53) satisfaz ao (Teorema 4). Provamos assim que o algoritmo dos babilônios para razı́z quadrada converge e muito rápido. Teorema 5 Algoritmo babilônio para raı́z quadrada A função g(x) = x+a/x define uma sucessão recursiva a partir de um ponto 2 pa √ qualquer x0 > 3 sendo o seu ponto fixo a. 93 CAPÍTULO 3. RECURSIVIDADE 3.4 Exercı́cios 1. Escreva os 5 primeiros termos das seguintes sucessões definidas recursivamente a)sn = sn−1 + sn−2 c)sn = 1 + sn−1 e)sn = nsn−1 b)sn = sn−1 + sn−2 d)sn = 1 + sn−1 f)sn = nsn−1 s0 = 0; s1 = 1 s0 = 1 s0 = 2; s1 = 1 s0 = 1; s1 = 1 s0 = −1 s0 = 3; s1 = 1 2. Escreva o loop em pseudo linguagem de programação5 que calcula cada uma das sucessões a)sn+1 = sn + sn−1 c)sn+1 = sn sn−1 e)sn+1 = sn sn−1 b)sn+1 = sn /sn−1 d)sn+1 = (n + 1)sn f)sn+1 = nsn s0 = 1; s1 = 1 s0 = 1; s1 = 2 s0 = 2; s0 = 1; s1 = 1 s0 = 1; s1 = 1 s0 = 3; 3. série, termos geral Escreva a equação de Sn sabendo que Sn+1 − Sn = an ; S0 = 0 (3.54) em que a sucessão a = (an )n∈N é dada. 4. Escreva a equação de Sn sabendo que Sn+1 − Sn = an ; S0 = 0 (3.55) em que a sucessão a = (an )n∈N é dada Sn+1 a)Sn+1 c)Sn+1 e)Sn+1 an 1 n n2 Sn+1 b) Sn+1 d) Sn+1 f) Sn+1 an 1 n 1 n2 3 n 5. Seqüência de Fibonacci6 A seqüência de Fibonacci é definida, recursivamente, como s0 = 1 (3.56) s1 = 1 n > 1sn = sn−1 + sn−2 (3.57) (3.58) Calcule alguns termos de s e escreva o loop que calcule s Resposta é exatamente um dos exercı́cios anteriores. 5 chamamos de pseudo linguagem de programação uma sequência de “comandos” que poderiam pertencer a uma determinada linguagem de programação, aquilo que é habitual fazer em cursos introdutórios de programação com o nome de “algoritmo” 94 CAPÍTULO 3. RECURSIVIDADE 3.5 Solução de alguns exercicios 1. (ex. 1) página 93 (a) sn = sn−1 + sn−2 ; s0 = 0; s1 = 1 s2 = 1; s3 = 2; s4 = 3; s5 = 5; (3.59) (3.60) sn = sn−1 + sn−2 ; s0 = 1; s1 = 1 s2 = 2; s3 = 3; s4 = 5; s5 = 8 (3.61) (3.62) (b) (c) sn = 1 + sn−1 ; s0 = 1 (3.63) s1 = 2; s2 = 3; s3 = 4; s4 = 5; s5 = 6 (3.64) sn = 1 + sn−1 ; s0 = −1 s1 = 0; s2 = 1; s3 = 2; s4 = 3; s5 = 4 (3.65) (3.66) (d) (e) sn = nsn−1 ; s0 = 2; s1 = 1 (3.67) s2 = 2; s3 = 6; s4 = 24; s5 = 120 (3.68) sn = nsn−1 ; s0 = 3; s1 = 1 s2 = 2; s3 = 6; s4 = 24; s5 = 120; (3.69) (3.70) (f) 2. (ex. 2) página 93 (a) entrada de dados: n; int S=0, a0=1, a1=1,contador=2; if (n ==0 ) return(a0); if (n == 1) return(a1); while(contador <=n) { S = a0 + a1; a0 = a1; a1 = S; contador++; // contador = contador + 1 } CAPÍTULO 3. RECURSIVIDADE 0 1 2 3 4 5 6 7 8 9 10 (b) (c) return(S); // saida de dados do programa 1 1 2 3 5 8 13 21 34 55 89 float S=1; // produto e divisoes, inicio 1 float a0=2.0, a1=1.0; int contador=2; printf("%d %f \n %d %f \n",0,a0,1, a1); if (n == 0 ) return(a0); if (n == 1 ) return(a1); while(contador <=n) { S = a1/a0; // s(n+1) printf("%d %f \n",contador, S); a0 = a1; // s(n-1) a1 = S; // s(n) contador++; } 0 2.000000 1 1.000000 2 0.500000 3 0.500000 4 1.000000 5 2.000000 6 2.000000 7 1.000000 8 0.500000 9 0.500000 10 1.000000 float S=1; // produto e divisoes, inicio 1 float a0=1.0, a1=2.0; int contador=2; printf("%d %f \n %d %f ",0,a0,1,a1); if (n == 0 ){printf("%d %f \n ",0,a0); return(a0);} if (n == 1 ){printf("%d %f \n ",1,a1); return(a1);} while(contador <=n) { 95 CAPÍTULO 3. RECURSIVIDADE S = a1*a0; // s(n+1) printf("%d %f \n",contador, S); a0 = a1; // s(n-1) a1 = S; // s(n) contador++; } 0 1.000000 1 2.000000 2 2.000000 3 4.000000 4 8.000000 5 32.000000 6 256.000000 7 8192.000000 8 2097152.000000 9 17179869184.000000 10 36028797018963968.000000 (d) float S=1; // produto e divisoes, inicio 1 float a0=1.0, a1=1.0; int contador=2; printf("%d %f \n %d %f \n ",0,a0,1,a1); if (n == 0 ){printf("%d %f \n ",0,a0); return(a0);} if (n == 1 ){printf("%d %f \n ",1,a1); return(a1);} while(contador <=n) { S = contador*a1; // s(n+1) printf("%d %f \n",contador, S); a1 = S; // s(n) contador++; } 0 1.000000 1 1.000000 2 2.000000 3 6.000000 4 24.000000 5 120.000000 6 720.000000 7 5040.000000 8 40320.000000 9 362880.000000 10 3628800.000000 (e) float S=1; // produto e divisoes, inicio 1 float a0=2.0; int contador=1; 96 97 CAPÍTULO 3. RECURSIVIDADE printf("%d %f \n ",0,a0); if (n == 0 ){printf("%d %f \n ",0,a0); while(contador <=n) { S = contador*a0; // s(n+1) printf("%d %f \n",contador, S); a0 = S; // s(n) contador++; } return(a0);} 0 2.000000 1 2.000000 2 4.000000 3 12.000000 4 48.000000 5 240.000000 6 1440.000000 7 10080.000000 8 80640.000000 9 725760.000000 10 7257600.000000 (f) float S=1; // produto e divisoes, inicio 1 float a0=3.0; int contador=1; printf("%d %f \n ",0,a0); if (n == 0 ){printf("%d %f \n ",0,a0); return(a0);} while(contador <=n) { S = (contador-1)*a0; // s(n+1) printf("%d %f \n",contador, S); a0 = S; // s(n) contador++; } 0 3.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 0.000000 9 0.000000 10 0.000000 98 CAPÍTULO 3. RECURSIVIDADE 3. (ex. 3) página 93 S0 = 0 =⇒ S1 = S0 + a0 = a0 S2 = S1 + a1 = S0 + a0 + a1 S2 = a0 + a1 (3.71) (3.72) (3.73) S3 = S2 + a2 = a0 + a1 + a2 ··· (3.74) (3.75) Sn+1 = Sn + an = a0 + a1 + a2 + · · · + an n P ak Sn+1 = (3.76) (3.77) k=0 4. (ex. 4) página 93 (a) Sn+1 = (b) Sn+1 = n P k=0 n P k=1 1=n+1 1 k 1 1.000000 2 1.500000 3 1.833333 4 2.083333 5 2.283334 6 2.450000 7 2.592857 8 2.717857 9 2.828969 10 2.928968 Sn+1 ≈ ln(n) para grandes valores de n. 100000 P 1 ln(100000) ≈ 11.51292546497022842009; k ≈ 12.090851 k=1 (c) n P k=1 k= (1+n)n 2 1 1.0000000000000 2 1.2500000000000 3 1.3611111111111 4 1.4236111111111 5 1.4636111111111 6 1.4913888888889 7 1.5117970521542 8 1.5274220521542 9 1.5397677311665 CAPÍTULO 3. RECURSIVIDADE 99 10 1.5497677311665 double S=0; // inicilizando soma double a0=1.0; int contador=1; printf("%d %lf \n ",0,a0); if (n == 0 ){printf("%d %lf \n ",0,a0); return(a0);} while(contador <=n) { S = S + a0; // s(n+1) printf("%d %2.13lf \n",contador, S); contador++; // contador = contador + 1 a0 = (double) 1/(contador*contador); // s(n-1) } n X π2 1 ≈ k2 6 1 para grandes valores de n. Com n = 35000S35000 = 1.6449054958278 2 e π6 ≈ 1.64493406684822643649 (d) 1 1.000000 2 5.000000 3 14.000000 4 30.000000 5 55.000000 6 91.000000 7 140.000000 8 204.000000 9 285.000000 10 385.000000 float S=0; // inicializa uma soma float a1=1.0; int contador=1; printf("%d %f \n",1, a1); if (n == 1 ) return(a1); while(contador <=n) { S = S + a1; // s(n+1) printf("%d %f \n",contador, S); contador++; // contador = contador + 1 a1 = contador*contador; } n P P (k) em que P é um polinômio a coeficientes As somas do tipo k=0 inteiros, podem ser calculadas exatamente usando-se um polinômio Q de grau uma unidade superior ao de P porque estas somas se reduzem 100 CAPÍTULO 3. RECURSIVIDADE a uma expressão da forma Q(n + 1) − Q(0), ver [27, indução finita]. n P = Q(n); Q(10) = k 2 = n(n+1)(2n+1) neste caso a fórmula exata é 6 385 k=1 5. 1 1.000000 2 9.000000 3 36.000000 4 100.000000 5 225.000000 6 441.000000 7 784.000000 8 1296.000000 9 2025.000000 10 3025.000000 float S=0; // inicializa uma soma float a1=1.0; int contador=1; printf("%d %f \n",1, a1); if (n == 1 ) return(a1); while(contador <=n) { S = S + a1; // s(n+1) printf("%d %f \n",contador, S); contador++; // contador = contador + 1 a1 = contador*contador*contador; } Como foi dito no item anterior, esta soma pode ser calculada exatamente, n P )2 k 2 = (1 + 2 · · · n)2 = ( n(n+1) 2 k=1 Capı́tulo 4 Aproximação polinomial de funções Este capı́tulo vai lhe apresentar o objetivo deste livro: a modelagem matemática usando aproximação polinomial. Primeiro consideraremos o método intuitivo, um polinõmio de grau n interpolando n pontos do plano, depois vamos otimizar este método o que nos vai conduzir ao chamado método de Lagrange. É o que chamamos de método clássico e que foi utilizado até 1950. Com o método clássico, que consiste em fazer passar um polinômio pelos pontos conhecidos de uma função, para obter-se uma boa aproximação é preciso que a densidade da malha seja muito grande e consequentemente o grau do polinômio muito alto. As consequências computacionais são graves com esta metologia, mas o método é excelente para época em que foi construidoa ,como o programa que acompanha o livro bem o mostra. Aos poucos, a partir dos anos 50, no século passado, foi surgindo um método sugerido por autores da década de 40 que se constitue em considerar vários polinômios, um para cada intervalo da malha. É o que chamamos polinômios por pedaços, ou uma polinomial e finalmente vieram os splines, e os métodos finitos que muito se parecem: ambos são polinômiais. A parte final deste capı́tulo faz a construção dos splines por convolução. a Lagrange, (1736-1813) 101 102 CAPÍTULO 4. SPLINES 4.1 Aproximação polinomial clássica Começaremos pela aproximação polinomial clássica, na verdade com um único objetivo em mente, mostrar que ela exige uma amostragem muito grande do fenômeno para que se possa obter uma boa aproximação e, consequentemente, não é prática (computacional). Ela servirá como motivação para o assunto das últimas seções, aproximação polinomial por pedaços e finalmente para os splines. Nesta primeira seção vamos apresentar o problema um pouco de forma histórica mas com o objetivo de encaminhá-lo para um uso intenso de dois programas, gnuplot e scilab. O gnuplot já vem sendo usado no livro desde o primeiro capı́tulo, aqui você vai ter a possibilidade de usá-lo como uma máquina de calcular. scilab, [23], é um pacote computacional distribuido gratuitamente pelo instituto francês INRIA que se dedica aos experimentos numéricos computacionais em vários campos da ciência sendo scilab um dos projetos deste instituto. scilab, entre outras coisas, resolve sistemas de equações lineares de grande porte. Neste sentido vou usar, inicialmente, a aproximação polinomial como uma motivação para aumentar a sua experiência com estes dois programas. A idéia intuitiva, e ingênua1 , para aproximação polinomial ou interpolação polinomial de n pontos (x0 , y0 ) · · · (xn−1 , yn−1 ) (4.1) consiste em encontrar-se um polinômio P (x) = a0 + a1 x + · · · + am xm tal que P (xk ) = yk ; k ∈ {0, · · · n − 1} (4.2) Como as incógnitas do problema são os coeficientes de P e como temos n condições, vemos que P deve ter no mı́nimo2 n coeficientes: um polinômio de grau n − 1. Vamos começar do começo, com o caso mais simples, um polinômio do primeiro grau. A figura (4.1) página 103, mostra a solução deste problema quando tivermos dois pontos, P = (a, b) ; Q = (c, d) 1 Veremos, mais adiante, que existe uma solução, a chamada de Lagrange, que não é nem ingênua e nem intuitiva. 2 Com grau maior, há mais coeficientes aumentando o grau de liberdade da solução e permitindo uma maior seleção entre as soluções. 103 CAPÍTULO 4. SPLINES Q (c,d) f(p) f(x) = m (x−a) + b f(a) = b P f(c) = d (a,b) p a c [a,c] Figura 4.1: Uma reta interpola dois pontos precisamos de um polinômio a ser determinado por dois coeficientes: f (x) = m(x − a) + b ; f (a) = b ; m = d−b ; c 6= a c−a (4.3) Como já vimos em várias ocasiões neste livro, é interessante escrever o polinômio desenvolvido em dos pontos porque teremos de graça um dos coeficientes quando impusermos a condição f (a) = b na equação (3) temos o valor de b a ordenada de um dos pontos que determina a reta. Claro, é preciso vermos claro quais são as condições do problema, mesmo que isto tenha sido dito acima, uma pequena repetição torna-se didática: “são dados dois pontos e queremos saber qual é o polinômio que interpola estes dois pontos”. Encontrar um polinômio significa encontrar os seus coeficientes. O nosso objetivo aqui não é geométrico e sim funcional, desejamos funções. No caso da reta, figura (4.1) estamos entendendo que foram feitas duas medidas, uma no ponto x = a com intensidade y = b e outra no ponto x = c com intensidade y = d resultando nos dois pontos P = (a, b), Q = (c, d) e a reta que aparece na figura é a uma aproximação do que acontece no intervalo [a, c]. Se todas as informações que tivermos forem estas (muito pobre o conjunto de informações) a única modelagem do fenômeno é o segmento de reta que passa nos dois pontos, na figura (4.1). Se considerarmos um ponto p ∈ [a, c] o valor do fenômeno neste ponto, obtido como interpolação (linear) é o valor da função do primeiro grau, equação (3), calculada no ponto p. Pontos calculados em cima de retas são médias aritmética 104 CAPÍTULO 4. SPLINES ponderadas dos valores que determinam esta reta, isto é a melhor que coisa que podemos obter com esta quantidae (pobre) de informações. Em geral se quer obter mais informações, mas obviamente existe um custo associado a quantidade de informações: mais pessoas levantando dados, mais tempo de busca, mais tempo de processamento. Então precisamos de métodos mais eficientes para conseguir o melhor resultado com uma quantidade menor de informações, este é o objetivo deste capı́tulo, desenvolver um método nos permita interpolar as informações conhecidas para calcular mais informações a partir das (poucas) informações obtidas. Nesta primeira seção estamos apresentando a solução clássica, que se originou no século 18, uma antiguidade digna de museu, mas que vale a pena pelo menos conhecer porque é magnifica considerando os parcos meios que Euler e Lagrange e outros tinham para chegar nesta solução, e não somente nisto, ela é bastante exata, porém depende de uma grande quantidade de informações. Veja mais uma comparação gráfica para ilustrar a imprecisão com que uma pequena quantidade de informações nos deixa. Na figura (4.2) página 104, estamos apresentando uma formulação gráfica de um pretenso fenômeno real o valor obtido por interpolação linear para x=p Q o fenômeno "real" (c,d) f(x) = m (x−a) + b f(a) = b P f(c) = d (a,b) O erro no ponto x=p p a c [a,c] Figura 4.2: A reta e o fenômeno real associado à reta que que interpola o fenômeno a partir, apenas, das informações coletadas nos extremos do intervalo. Você pode ver neste gráfico que a reta nada tem a ver com o fenômeno modelado, porque a quantidade de informações coletadas é muito pequena. Observe que se, tudo que soubermos for os valores nos pontos x = a e x = c, não teremos nenhuma condição de avaliar o erro ocorrido ao considerar a média CAPÍTULO 4. SPLINES 105 aritmética f (p) como um valor aproximado do fenômeno no ponto x = p. O gráfico na figura (4.2) é apenas uma ilustração, é um gráfico feito à mão. Certamente não lhe estamos dizendo nada de extraordinário, o que desejamos é conscientizá-lo para a necessidade de um trabalho maior em que pretendemos metê-lo agora: resolver um grande sistema de equações lineares. Felizmente temos bons programas para resolver sistemas de equações lineares e a prática com usá-los lhe será útil em muitas situações. Uma solução para este problema, quando tivermos um levantamento de dados com n informações, pode ser obtida com um sistema de n equações nas n incóognitas representadas pelos coeficientes de P P (x) = a0 + a1 x + · · · + an−1 xn−1 (4.4) um polinômio de grau n − 1, como no caso da reta, duas informações, são interpoladas com um polinômio de grau 1, n informações serão interpoladas com um polinômio de grau n − 1. Vamos começar brincando um pouco com várias interpolações polinômiais tendo como objetivo mostrar-lhe que gnuplot é um excelente instrumento para testes porque lhe permite somar polinômios ou multiplicá-los por constantes e portanto pesquisar saı́das para um problema para o qual você ainda não tenha um modelo adequado. gnuplot é uma máquina de calcular com potencialidades bem elevadas e é isto que lhe queremos mostrar, inicialmente. 4.1.1 Análise de dois casos particulares Interpolando pontos sobre o eixo OX No primeiro caso considerarmos o caso em que yk = 0 para todo k, podemos facilmente ver que há muitas soluções para este problema e assim discutir a existência de uma solução ótima. Veja na figura (fig. 4.3) página 106, as múltiplas soluções, para o problema particular, construidas com gnuplot Esta modelagem com gnuplot foi produzida com o seguinte script que pode ser encontrado aqui, [20, programas.tgz]. ## splines01.01.gnuplot é o nome do arquivo a0=5;a1=2;a2=-2;a3=-4 p(x) = (x - a0)*(x-a1)*(x-a2)*(x-a3) dp(x) = (x-a0)*(x-a1)*(x-a2) + (x-a0)*(x-a1)*(x-a3) +\ (x -a0)*(x-a2)*(x-a3) + (x-a1)*(x-a2)*(x-a3) set xrange [a3-1:a0+1] plot p(x),dp(x),0 pause -2 M = 470.0 ## módulo máximo da derivada (visualmente) P(x) = (1/M)*p(x) dP(x)=(1/M)*dp(x) plot P(x), dP(x),0 106 CAPÍTULO 4. SPLINES 3.5 P(x) g(x) 0 3 2.5 2 1.5 1 0.5 0 −0.5 −1 −1.5 −4 Figura 4.3: −2 0 2 4 6 Duas soluções do problema homogêneo pause -2 plot P(x),dP(x),0,p(x),dp(x) pause -2 g1(x) = 2*P(x) g2(x) = 3*P(x) plot P(x), g1(x), g2(x),0 pause -2 #set terminal fig color big portrait #set output "splines01_03.fig Neste caso particular, quando estivermos interpolando pontos de um intervalo contido em R, qualquer múltiplo de uma solução é também uma solução, e a soma de duas soluções é também uma solução produzindo um espaço vetorial de soluções e você pode se divertir procurando a dimensão deste espaço vetorial. . . Ao construir a solução do problema: • fizemos o gráfico de p, p′ = dp • módulo máximo calculamos, visualmente, o módulo máximo de p′ . Existe um teorema que garante que o módulo máximo de um polinômio ocorre na fronteira de um disco que contém este intervalo considerado. É o teorema do módulo máximo e a figura (fig. 5) página 120, é uma ilustração do teorema do módulo máximo estudado em variáveis complexas. A figura justifica porque preferimos calcular visualmente o máximo da derivada; • usamos como coeficiente 1 ; M = 470.0 ; M = max(|p′ (x)|) M 107 CAPÍTULO 4. SPLINES que é o valor do módulo máximo da derivada de p no intervalo I = [a3 − 1, a0 + 1] • redefinimos o polinômio, P (x) = do polinômio P no intervalo I. 1 M p(x), portanto reduzimos a oscilação3 • O módulo máximo vem do plano complexo que o melhor lugar para estudarmos polinômios (mas também um pouco mais complicado), a figura (5) mostra o que significa o módulo máximo quando estudamos polinômios com variáveis complexas. Esta é a última menção às variáveis complexas neste livro para o caso de você querer saber onde é que se pode obter informações mais completas sobre o uso do módulo máximo. Módulo máximo pré imagem do ponto de módulo máximo O módulo máximo no plano complexo Figura 4.4: O teorema do módulo máximo Esta análise sugere a existência de uma solução ótima. Vamos ver que existe uma solução única para o problema que é também, em um certo sentido, ótima. Os exercı́cios seguintes devem conduzı́-lo a uma compreensão da oscilação dos polinômios interpolantes associada a densidade da malha representada pelos pontos a serem interpolados. O objetivo dos exercı́cios é o de lhe oferecer uma oportunidade de fazer cálculos, portanto faça experiências com gnuplot e scilab mas não despreze as expressões formais sem as quais não é possı́vel escreverem-se os programas. Quanto mais densa a malha, menor a oscilação no interior do intervalo em que se encontram os pontos (nós) da malha. Os exercı́cios vai convidá-lo a usar scilab, um pacote para fazer Álgebra Linear, [23]. Quando os valores dados estão fora de OX No segundo caso consideramos yk = r uma constante r ∈ R,. Aqui nos ajuda a solução dos sistemas lineares dos quais sabemos que a solução geral de um sistema (é o caso agora) é a solução geral do caso homogêneo (o primeiro caso que estudamos) mais uma solução particular do caso geral. 3 Observe que para reduzir a oscilação do polinômio fomos buscar o módulo máximo da derivada 108 CAPÍTULO 4. SPLINES Qualquer solução P do problema homogêneo, somada de uma solução particular, um polinômio, portanto um conjunto de coeficientes, é a solução geral deste problema não homogêneo. Vem da Álgebra Linear, porque o problema se reduz à procura dos coeficientes sendo portanto um equação matricial. Um exemplo particular está no exercı́cio (3) na página 109. Não é possı́vel obter todas as soluções do problema não homogêneo sem considerar o caso homogêneo foi poristo que dividimos a questão em dois casos. Esta formulação é importante se estivermos trabalhando com sistemas superdeterminados onde existe uma infinidade de soluções (uma infinidade de polinômios). Se quisermos encontrar o (único) polinômio de grau n − 1 que interpola n pontos dados, a solução é única, e se trata simplesmente de resolver um sistema de equações determinado como mostra o exercı́cio (3) na página 109. Não vamos voltar mais a esta questão neste livro, isto é uma decisão de otimizar esforços, o nosso objetivo são os splines, quer dizer polinômios por pedaços. Se o leitor precisar de modelar com polinômios, o que foi dito acima é suficiente para guiá-lo na complementação do que ainda precisar. Exercı́cios 13 Interpolação e oscilação de um polinômio 1. O gráfico na figura (fig. 4.1) foi produzido com o script splines01.01.gnuplot que se encontra aqui [20, programas.tgz]. Edite este script e faça alguns experimentos com polinômios. Eis algumas sugestões: • encontre uma famı́lia de polinômios que que interpolem os pontos {(a0 , r), (a1, r), (a2, r), (a3, r), (a4, r)} (4.5) escolha os valores de ai diretamente dentro do script do gnuplot; • Construa um polinômio que passa em dois pontos escolhidos com uma oscilação especificada. solução: splines01.02.gnuplot, [20, programas.tgz]. • Mais difı́cil: construa um polinômio com oscilação especificada que passe em alguns pontos escolhidos. Você vai precisar de resolver um sistema de equações. . . 2. interpolação linear Tudo que sabemos sobre um fenômeno f medido sobre o intervalo [a, b] são os valores do fenômeno nos pontos a, b, c: [a, b] = [−3, 5] ; f (−3) = 7; c = 0f (c) = −2; f (5) = 1 (4.6) Interpole,linearmente, estas informações estimando qual poderia ser o valor de f nos pontos {−2, 0, 2} (4.7) Faça um gráfico ilustrativo. 109 CAPÍTULO 4. SPLINES 7 f(x) 0 6 5 4 3 2 1 0 -1 -2 -3 -2 -1 Figura 4.5: 0 1 2 3 4 5 Aproximação linear por pedaços - 1-spline Solução 2 Veja o gráfico na figura (fig. 4.5) página 109, Esta função está definida por dois sementos de reta, um quando x < 0 e outro quando x ≥ 0. x = −2 ⇒ (x < 0)f (x) = 7 − (9/3)(x + 3); f (−2) = 4 x = 0 ⇒ (x ≥ 0)f (x) = −2 + (3/5) ∗ x; f (0) = −2 x = 2 ⇒ (x ≥ 0)f (x) = −2 + (3/5) ∗ x; f (2) = −0.8 (4.8) (4.9) (4.10) ———————————————— 3. interpolação n~ ao linear Temos as informações f (xk ) sobre f definida no intervalo [a, b]: [a, b] = [−3, 5]; x0 = −3; x1 = −2; x2 = 0; x3 = 2; x4 = 5 f (−3) = 7; f (−2) = 3; f (0) = −3; f (2) = 0; f (5) = 1 (4.11) (4.12) Encontre um polinômio do quarto grau P (x) = a0 + a1 x + a2 x2 + a3 x3 + a4 x4 (4.13) P (xk ) = f (xk ) (4.14) tal que interpolando não linearmente as informações contidas na (eq. 12). Use esta interpolação para obter uma estimativa dos valores de f nos pontos {−1, 1, 3} Faça um gráfico ilustrativo. (4.15) 110 CAPÍTULO 4. SPLINES Solução 3 As informações que temos nos permitem montar a tabela xk yk -3 7 -2 3 0 -3 2 0 5 1 P (−3) = a0 − 3a1 + 9a2 − 27a3 + 81a4 = 7 (4.16) P (−2) = a0 − 2a1 + 4a2 − 8a3 + 16a4 = 3 P (−2) = a0 = −3 (4.17) (4.18) P (2) = a0 + 2a1 + 4a2 + 8a3 + 16a4 = 0 P (5) = a0 + 5a1 + 25a2 + 125a3 + 625a4 = 1 (4.19) (4.20) −3a1 + 9a2 − 27a3 + 81a4 = 11 −2a1 + 4a2 − 8a3 + 16a4 = 6 2a1 + 4a2 + 8a3 + 16a4 = 3 (4.21) (4.22) (4.23) −3 −2 2 5 5a1 + 25a2 + 125a3 + 625a4 = 4 a1 9 −27 81 4 −8 16 a2 = 4 8 16 a3 a4 25 125 625 (4.24) 11 6 3 4 (4.25) Vamos primeiro usar scilab para resolver o sistema de equações depois vamos mostrar uma outra forma de resolver o problema associado com o que fizemos no capı́tulo 1, usando a idéia (não o conceito) de polinômio de Taylor. Com scilab resolvemos qualquer sistema de equações portanto não precisamos de técnicas mais avançadas de cálculos manuais (que mostraremos depois). a = [-3 , 9 , -27 , 81 ; -2 , 4 , -8, 16 ; 2 , 4 , 8 , 16 ; 5 , 25 , 125 , 625] a = ! - 3. ! - 2. ! 2. ! 5. 9. 4. 4. 25. - 27. - 8. 8. 125. -->b=[11 ; 6 ;3 b = ! ! 11. ! 6. ! ;4] 81. 16. 16. 625. ! ! ! ! CAPÍTULO 4. SPLINES ! ! 3. 4. 111 ! ! -->a\b ans = ! - 0.6880952 ! ! 1.2678571 ! ! - 0.0154762 ! ! - 0.0357143 ! -->function y = f(x) -->y =-3 -0.6880952*x + 1.2678571*x*x - 0.0154762*x*x*x - 0.0357143*x* -->endfunction -->f(0) = - 3. -->f(-3) = -->f(-2) = 7.9999986 2.9999996 -->f(2) = - 0.0000004 -->f(5) = 0.999989 a0 = −3; a1 = −0.6880952; a2 = 1.2678571; a3 = −0.0154762; a4 = −0.0357143 (4.26) (4.27) Observe o erro apreciável no cálculo de f (−3) = 7.9999986 cometido usando scilab. O erro não é do scilab mas do método, uma interpolação polinomial de grau 4 das quatro informações obtidas de uma tabela. Devemos ainda calcular, usando a interpolação polinomial, os valores de f (−1), f (1), f (3), com scilab -->f(-1) = - 1.0642858 -->f(1) = - 2.4714286 -->f(3) = 3.0357126 Veja o gráfico deste polinômio, feito com scilab na figura (fig. 4.6) página 112, 112 CAPÍTULO 4. SPLINES 8 f(x) 0 6 4 2 0 −2 −4 −3 −2 −1 Figura 4.6: 0 1 2 3 4 5 interpolação polinomial dos pontos ———————————————— Outra solução, de acordo com o que desenvolvemos no capı́tulo 1, vamos desenvolver o polinômio no ponto x = −3 f (x) = a0 + a1 (x + 3) + a2 (x + 3)2 + a3 (x + 3)3 a0 = −7 f (−2) = −7 + a1 + a2 + a3 =3 f (0) = −7 + 3a1 + 9a2 + 27a3 = −3 f (2) = −7 + 5a1 + 25a2 + 125a3 = 0 f (5) = −7 + 8a1 + 64a2 + 512a3 = 1 (4.28) (4.29) (4.30) 113 CAPÍTULO 4. SPLINES a1 + a2 + a3 3a1 + 9a2 + 27a3 5a1 + 25a2 + 125a3 8a1 + 64a2 + 512a3 = 10 =4 =7 =8 (4.31) Resolvendo este sistema de equações com scilab temos a = [1 , 1 , 1 ; 3, 9, 27; 5, 25, 125; 8, 64, 512] b = [10; 4; 7; 8] c = a\b function y = f(x) y = -7 + c(1)*(x+3) + c(2)*(x+3)**2 + c(3)*(x+3)**3; return y; endfunction -->f(-3) ans = - 7. -->f(-2) ans = - 1.2993631 -->f(0) ans = 1.0127389 -->f(2) ans = - 2.0063694 -->f(5) ans = 1.2866242 em que obtivemos precisão apenas para f (−3). Este dois exemplos nos mostram as dificuldades de obter uma interpolação confiável com polinômios de grau alto determinado pelo número de informações. Aqui foram polinômios de grau pequeno porque também temos poucas informações. 4. Faça uma pequena dissertação descrevendo quem é f e P na questão (ex.3). Use em sua redação algumas das palavras: interpolação, linear, estimativa, aproximação, modelo. 114 CAPÍTULO 4. SPLINES 5. interpolação não linear Calcule o polinomio mónico4 p que interpola os pontos (−7.5, 0), (−2.5, 0), (2.5, 0), (7.5, 0) 6. Cálcule o módulo máximo M de p no intervalo [−3, 4] e defina P (x) = p(x) . Calcule M axx∈[−3,4] P (x) resposta oscilação = 0.6 M 7. interpolação não linear Refaça a questão considerando os pontos (−7.5, 0), (−1, 0), (1, 0), (7.5, 0) . x0 = -7.5; x1=-2.5; x2=2.5; x3=7.5; p(x)=(x-x0)*(x-x1)*(x-x2)*(x-x3) dp(x)=(x-x0)*(x-x1)*(x-x2)+(x-x0)*(x-x1)*(x-x3)+(x-x0)*(x-x2)*(x-x3)+\ (x-x1)*(x-x2)*(x-x3) set xrange [x0:x3] ## quando a particao nao for uniforme altere a etiqueta set title "uniforme" ## altere esta etiqueta para "nao uniforme" plot p(x),dp(x),0 pause -2 M=1/1470.0 ## calcule este valor e substitua aqui P(x) = M*(x-x0)*(x-x1)*(x-x2)*(x-x3) dP(x) = M*((x-x0)*(x-x1)*(x-x2)+(x-x0)*(x-x1)*(x-x3)+(x-x0)*(x-x2)*(x(x-x1)*(x-x2)*(x-x3)) plot P(x),dP(x),0 pause -2 8. Comparando as questões (ex. 5) e (ex. 7), verifique que, se os nós formarem uma partição uniforme, a oscilação de P e da derivada P ′ do polinômio que interpola os pontos é diferente. Identifique em que caso a oscilação é menor, sobre o intervalo determinado pelos pontos a serem interpolados. resposta oscilações 0.6 e 1 Interpolando pontos do plano Nos exemplos desenvolvidos, mostramos como interpolar n pontos selecionados num intervalo [a, b] contido em R. Também mostramos a baixa precisão que existe neste método ingênuo de interpolar justificando assim que devemos procurar métodos mais eficientes. O nosso objetivo entretanto é, considerada uma coleção de nós sobre um intervalo [a, b] a = x0 < x1 < · · · < xn−1 < xn−1 = b (4.32) 4 se chama polinômio mônico aquele cujo coeficiente do termos de maior grau é 1 115 CAPÍTULO 4. SPLINES e um correspondente conjunto de valores {y0 , y1 , . . . , yn−1 } (4.33) como poderiamos interpolar, polinomialmente, os pontos {(x0 , y0 ), (x1 , y1 ), . . . , (xn−1 , yn−1 )} (4.34) ou ainda, encontrar um polinômio P cujo gráfico passe por estes pontos. No exemplo anterior fizemos isto quando yk = 0 para todo k. Da mesma forma como • dois pontos determinam uma reta, um polinômio de grau 1, porque os dois pontos determinam os dois coeficientes da reta que passa por estes pontos, • também n pontos determinam um polinômio de grau n−1, os n coeficientes do polinômio, que os interpola. Um segmento de reta, um polinômio de grau 1, é a forma de interpolar dois pontos. A forma eficiente de interpolar n pontos deve ser um polinômio de grau n − 1. 4.1.2 A solução geral do problema Resolver o problema geral de interpolação polinomial clássica (x0 , y0 ) · · · (xn−1 , yn−1 ) (4.35) consiste em encontrar um polinomio P de grau n tal que P (xk ) = yk ; k ∈ {0, · · · n − 1}. (4.36) seremos conduzidos a resolver um sistema de n equações cujas incógnitas são os coeficientes de um polinômio do grau n − 1 a0 , a1 , · · · , an−1 P (x) = a0 + a1 x + · · · + an−1 xn−1 P (x0 ) = P (x1 ) = .. . P (xn ) = P (x0 ) .. = . P (xn−1 ) P (x0 ) .. . P (xn−1 ) (4.37) (4.38) = y0 .. . yn−1 = (4.39) a0 + a0 x0 + · · · + an−1 xn−1 = y0 y0 0 y1 a0 + a0 x1 + · · · + an−1 xn−1 = y1 1 = (4.40) .. .. .. . . . yn a0 + a0 xn−1 + · · · + an−1 xn−1 n−1 = yn−1 n−1 x0 1 x0 x20 · · · a0 y0 a 1 y1 1 x1 x21 · · · xn−1 1 .. .. .. .. .. = .. (4.41) . . . . . . n−1 an−1 yn−1 1 xn−1 x2n−1 · · · xn−1 116 CAPÍTULO 4. SPLINES A a0 a1 .. . an−1 = y0 y1 .. . yn−1 (4.42) Este é um sistema muito especial cuja matriz A é uma matriz de Vandermonde5 e sabemos, da Álgebra Linear que o valor do seu determinante é obtido pelo produto das diferenças entre os seus elementos caracterı́sticos x0 , x1 , x2 , · · · , xn−1 (4.43) (x0 − x1 ) · · · (x0 − xn−1 )(x1 − x2 ) · · · (x1 − xn−1 ) · · · · · · (xk − xk+1 ) · · · (xk − xn−1 ) · · · (xn−2 − xn−1 ) = (4.44) (4.45) = Πi>j (xi − xj ) = V an((xi )n−1 i=0 ) = D (4.46) em que V an((xi )n−1 i=0 ) representa o determinante da matriz de Vandermonde, de ordem n, ver [12, página 301] ou [29, Vandermonde], cujos elementos caracterı́sticos estão listados entre parênteses como parâmetros. Este produto é diferente de zero, porque os nós 6 são todos diferentes (não teria sentido haver nós repetidos). Consequentemente a solução do sistema existe é única. Isto demonstra o teorema Teorema 6 da interpolação polinomial de Lagrange Dada uma partição de um intervalo [a, b] com n nós, {a = x0 , . . . , xn−1 = b} (4.47) existe um único polinômio de grau menor ou igual a n passando pelos pontos (x0 , y0 ) · · · (xn−1 , yn−1 ) (4.48) O único polinômio identificado no (teorema 6) pode ser calculado a partir do sistema de equações descrito acima, mas este método conduz à fórmulas muito difı́ceis de expressar. Em vez disto vamos usar um método algorı́tmico que vai conduzir a uma fórmula mais simples para encontrar este polinômio. Os exercı́cios seguintes são um tutorial para conduzı́-l@ a 7 entender o chamado método de Lagrange para determinação deste único polinômio de grau n que interpola os pontos {(x0 , y0 ), (x1 , y1 ), . . . , (xn−1 , yn−1 )} (4.49) a = x0 < x1 < · · · < xn−1 = b (4.50) associados à malha sobre o intervalo [a, b]. 5 Alexandre Vandermonde, matemático francês (1735-1796). da malha de precisão 7 mas descoberto por Edward Waring (1736-1798) e por Leonard Euler (1707-1783) 6 pontos 117 CAPÍTULO 4. SPLINES Exercı́cios 14 Tutorial sobre polinômio de Lagrange Estes exercı́cios vão conduzı́-lo a entender o que é um polinômio de interpolação de Lagrange. Os exercı́cios marcados com asterisco podem ser ignorados, porque não serão usados em nenhum local do livro. 1. derivada algoritmica Considere P (x) = (x − x1 )(x − x2 )(x − x3 ) (4.51) Verifique que P ′ (x) = (x − x1 )(x − x2 ) + (x − x1 )(x − x3 ) + (x − x2 )(x − x3 ) (=4.52) P ′ (x) = P1 (x) + P2 (x) + P3 (x) (4.53) em que (notação) P1 (x) = P (x) P (x) P (x) ; P2 (x) = ; P3 (x) = x − x1 x − x2 x − x3 (4.54) Solução 4 Usando a derivada do produto: (uv)′ = u′ v + uv ′ que pode ser usada com um produto de qualquer quantidade termos, e observando que a derivada de que cada fator é 1, temos P ′ (x) = (x − x2 )(x − x3 ) + (x − x1 )(x − x3 ) + (x − x1 )(x − x2 ) uma soma de produtos em que, sucessivamente, cada um dos fatores originais foi eliminado (trocado por 1). É razoável designarmos P (x) x−x1 ; P (x) P2 (x) = (x − x1 )(x − x3 ) = x−x ; 2 P (x) P3 (x) = (x − x1 )(x − x2 ) = x−x 3 P1 (x) = (x − x2 )(x − x3 ) = (4.55) (4.56) (4.57) e desta forma P ′ (x) = P1 (x) + P2 (x) + P3 (x) (4.58) em que Pk é o polinômio sem o fator (x − xk ) ou ainda é o quociente P (x) x−xk . Vamos usar esta notação no próximo exercı́cio. ———————————————— 2. Verifique que se P (x) = (x − x1 )(x − x2 )(x − x3 ) então (a) Pj (xk ) = 0 se j 6= k (4.59) 118 CAPÍTULO 4. SPLINES (b) Pk (xk ) 6= 0 (c) Para todo k P ′ (xk ) 6= 0 Esboce o gráfico de P e tente uma justificativa geométrica para o fato de que a derivada de P é diferente de zero se as raı́zes forem distintas. Solução 5 (a) Pj tem todos os fatores (x − xk ) exceto (x − xj ) logo Pj (xk ) = 0 se j 6= k. Como (x − xj ) não é fator de Pj então Pj (xj ) 6= 0. Vemos assim que o valor de Pj (xk ) é Pj (xk ) = 0 ⇐ j 6= k (4.60) Pj (xk ) 6= 0 ⇐ j = k (b) O cálculo da derivada P ′ (xk ): P ′ (x) = 3 P Pk (x) (4.61) 3 P (4.62) k=1 dado k P ′ (xk ) Pj (xk ) j=1 P ′ (xk ) = Pk (xk ) 6= 0 (4.63) porque todos os termos em que j 6= k se tem Pk (xj ) = 0. Portanto P ′ é diferente de zero em todos os nós e o seu valor é Pk (xk ) em xk . Veja o esboço gráfico de P na figura (fig. 4.7) página 118, As retas P x1 x2 x3 Figura 4.7: Polinômio de Lagrange tangentes tem por coeficiente angular o valor da derivada de P no 119 CAPÍTULO 4. SPLINES ponto m1 = P ′ (x1 ) é coeficiente angular em x1 m2 = P ′ (x2 ) é coeficiente angular em x2 (4.64) (4.65) m3 = P ′ (x3 ) é coeficiente angular em x3 (4.66) (4.67) ———————————————— 3. Verifique que se P (x) = (x − x1 )2 (x − x2 )(x − x3 ) (4.68) então P ′ (x1 ) = 0. Verifique que definindo P1 (x) = então P ′ = 3 P P (x) P (x) 2P (x) ; P2 (x) = ; P3 (x) = x − x1 x − x2 x − x3 Pk . k=1 Esboce o gráfico de P e tente uma justificativa geométrica do valor zero ou diferente de zero das derivadas. Tente elaborar uma uma teoria geral sobre o assunto, comparando este caso com o anterior. 4. derivada algoritmica Considere o polinômio de grau n P (x) = Πnk=1 (x − xk ) (a) Verifique que P ′ (x) = n X Pk (x) (4.69) (4.70) k=1 em que, para cada k, Pk (x) = P (x) . x−xk (b) Encontre uma lei que descreva os valores Pk (xj ) (c) Prove que se P for um polinômio definido pela equação (eq. 69) e as raizes xk todas distintas, então P ′ (xk ) 6= 0 para todo k = 1 . . . n, o valor da derivada, em todos os nós, é diferente de zero. (d) Faça um esboço gráfico de P e escreva uma pequena redação justificando, com uma argumentação geométrica, porque P ′ (xk ) 6= 0. Solução 6 (a) É uma generalização dos exercı́cios anteriores, agora temos um produto de n monômios, todos tendo por derivada 1. Quando aplicarmos a derivada do produto teremos uma soma de n novos produtos, cada com n − 1 termos em cada um dos quais aparentemente dividimos P por cada um dos fatores, sucessivamente: 120 CAPÍTULO 4. SPLINES P1 = P2 = P (x) x−x1 P (x) x−x2 .. . Pn = (4.71) (4.72) (4.73) P (x) x−xn ′ P (x) = P1 (x) + P2 (x) + · · · + Pn (x) n P P ′ (x) = Pk (x) (4.74) (4.75) (4.76) k=1 (b) Valor de Pk (xj ). Para cada k, o polinômio Pk (x) é um produto de n − 1 termos em que o fator (x − xk ) não está presente, logo Pk (xk ) 6= 0. Por outro lado todos os fatores (x − xj ) com j 6= k estão presentes em Pk (x) e assim Pk (xj ) = 0 ⇐ j 6= k. (c) Cálculo de P ′ (xj ) P ′ (xj ) = n X k=1 Pk (xj ) = Pj (xj ) 6= 0 (4.77) O gráfico de P corta o eixo OX em todos os nós se alternando com máximo ou mı́nimos locais entre as raı́zes. É um gráfico semelhante ao que você pode ver na figura (fig. 4.7) página 118. ———————————————— 5. * Verifique (tente uma demonstração) se P for dado pela equação (eq. 69) com todos os xk distintos, então as raizes de P e P ′ “se entrelaçam” (tem uma) raı́z de P ′ entre duas raizes de P . Escreva um teorema descrevendo inteiramente esta situação. Solução 7 Como as raı́zes são todas distintas, (não há raı́zes múltiplas) então as raı́zes de P ′ são todas distintas das raı́zes de P . Como entre duas raı́zes de P este polinômio terá um máximo ou um mı́nimo8 local, então P ′ tem uma raı́z entre duas raı́zes de P . ———————————————— 8 quem garante isto é a continuidade 121 CAPÍTULO 4. SPLINES 6. * Por que a teoria do item anterior falha se houver raizes múltiplas em (eq. 69) ? Solução 8 Porque quando houver uma raı́z múltipla, ela também será raiz da derivada. Suponhamos que x = a seja uma raı́z com multiplicidade n > 1 então ′ f (x) = (x − a)n g(x) n−1 (4.78) n ′ f (x) = n(x − a) g(x) + (x − a) g (x) = f (x) = (x − a)[n(x − a)n−2 g(x) + (x − a)n−1 g ′ (x)] ′ f ′ (a) = 0 (4.79) (4.80) (4.81) então x = a também é raı́z de f ′ . ———————————————— 7. * A hipótese essencial na teoria do exercı́cio (exer. 5) é que P é uma função contı́nua e P ′ também é contı́nua. Generalize o (exer. 5 ) com estas duas hipóteses, para uma função f que é contı́nua e continuamente diferenciável. 8. *oscilação da derivada(1) Considere P (x) = x2 −a2 . Encontre uma condição para que o máximo da derivada P ′ seja maior do que o máximo de P no intervalo que contém as raı́zes9 [−a, a]; a > 0 Prove que se |b−a| ≤ 4 então |(x − a)(x − b)| ≤ |2x − a − b| =⇒ x ∈ [a, b] Sugestão: nada muda no tamanho (desigualdades) quando os gráficos forem transladados... 9. *oscilação da derivada(2) Verifique que para P (x) = x(x2 − 1) o máximo da derivada P ′ é maior do que o máximo de P no intervalo que contém as raı́zes [−1, 1] 10. Polinômio interpolando pontos no plano (a) Considere a sequência de nós {−2.5, −1.5, 0.5, 2, 3} ⊂ [−3, 3] e encontre P com estas raı́zes e calculo o módulo máximo, M , de P ′ . (b) Solução ótima Calcule os coeficientes de Q = P/M (c) Considere os pontos do plano {(−2.5, 0), (−1.5, 2), (−0.5, 3), (0.5, 3), (1.5, 1), (2.5, −2)} e calcule um polinômio que interpole este pontos usando o polinômio Q. Faça os gráficos. 9a condição a > 0 não é essencial, apenas facilita a apresentação do problema. 122 CAPÍTULO 4. SPLINES 11. polinômio de Lagrange Considere a seqüência de nós xk ∈ {−2.5, −1.5, 0.5, 2, 3} ⊂ [−3, 3] do intervalo [−3, 3]. Seja P o polinômio mônico10 que tem estes nós como P (x) . raı́zes. E defina Pk (x) = x−x k (a) Calcule P ′ . (b) Mostre que ′ P = 5 X Pk . k=1 (c) Mostre que Pj (xk ) = 0 =⇒ j 6= k (d) Mostre que P ′ (xj ) = Pj (xj ) (e) Defina 5 X Pk (x) f (x) = P ′ (xk ) k=1 Verifique que f é um polinômio de grau no máximo 5. Calculando seus valores sobre os nós, verifique sua equação. (f ) Considere a seguinte sucessão de dados yk ∈ {4, 1, −2, −5, 7} e re5 P yk Pk (x) defina f (x) = P ′ (xk ) . Mostre que f (yk ) = yk e que, portanto, o k=1 polinômio f interpola os pontos (−2.5, 4), (−1.5, 1), (0.5, −2)(2, −5), (3, 7) do plano. (g) polinômio de Lagrange Considere uma seqüência de nós (xk )nk=0 ⊂ [α, β] Seja P o polinômio mônico11 que tem estes nós como raı́zes. E defina P (x) . Pk (x) = x−x k 10 aquele cujo coeficiente do termo de maior grau é 1, obtido com os produtos (x − x1 ) · · · (x − x5 ). 11 aquele cujo coeficiente do termo de maior grau é 1, obtido com os produtos (x − x1 ) · · · (x − x8 ). 123 CAPÍTULO 4. SPLINES i. Calcule P ′ . ii. Mostre que ′ P = n X Pk . k=0 iii. Mostre que Pj (xk ) = 0 =⇒ j 6= k iv. Mostre que P ′ (xj ) = Pj (xj ) v. Defina n X Pk (x) f (x) = P ′ (xk ) k=0 Verifique que f é um polinômio de grau no máximo n. Calculando seus valores sobre os nós, verifique sua equação. vi. Considere uma sucessão de dados (yk )nk=0 e redefina f (x) = n P yk Pk (x) . Mostre que f (yk ) = yk e que, portanto, o polinômio P ′ (xk ) k=0 f interpola os pontos ((xk , yk )nk=0 ) do plano. (h) Considere uma sucessão (crescente) de nós (xk )nk=0 de um intervalo [a, b]. Seja P o polinômio mônico12 que tem estes nós como raı́zes. E P (x) . Verifique que defina Pk (x) = x−x k i. ′ P = n X Pk k=0 ii. Pj (xk ) = 0 =⇒ j 6= k iii. Pj (xj ) = P ′ (xj ) iv. f (x) = n P k=0 Pk (x) P ′ (xk ) é um polinômio de grau no máximo n. Calcu- lando seus valores sobre os nós, verifique sua equação. v. Polinômio de Lagrange Considere uma sucessão de dados (yk )nk=0 n P yk Pk (x) . Mostre que f (yk ) = yk e redefina f (x) = P ′ (xk ) k=0 12 aquele cujo coeficiente do termo de maior grau é 1, obtido com os produtos (x − x0 ) · · · (x − xn ). 124 CAPÍTULO 4. SPLINES 4.1.3 Interpolação polinomial de Lagrange Se você tiver feito o tutorial sobre polinômio de Lagrange esta seção representa apenas um resumo do que foi feito no tutorial e possivelmente pode ser pulada. Considere dois pontos no plano, eles determinam uma reta que é o gráfico de um polinômio de grau menor13 ou igual a 1. Isto é dois pontos são interpolados por um polinômio de grau menor que dois. Tres pontos são interpolados por uma parábola ou uma reta, novamente o grau é menor do que a quantidade de pontos. Assim, se quisermos interpolar n + 1 pontos, deveremos obter um polinômio de grau no máximo n cujos n + 1 coeficientes ficam unicamente determinados pelos n + 1 pontos dados. Aliás, o fato de havermos encontrado uma multitude de soluções é um indicativo da fraqueza do método. Por outro lado, observe que o adjetivo “fraqueza” é enganoso uma vez que na verdade a nossa conclusão deveria ser a de que existe excesso de informações e este excesso de informações pode ser algumas vezes usado para obter melhor solução em outro contexto. Guarde este comentário para uso posterior. Vamos fazer um resumo do método, devido a Lagrange14 para construir um polinômio de grau menor ou igual a n − 1 interpolando n pontos (x0 , y0 ), · · · (xn−1 , yn−1 ) ; x0 < x1 < · · · < xn−1 dados. O método de Lagrange representa uma alternativa, usando a derivada, para limitar a oscilação do polinômio de interpolação. Como habitual, chamamos os pontos x0 , . . . , xn−1 ∈ I = [a, b] de nós de uma malha que consideramos no intervalo I. Como sempre, a = x0 , b = xn−1 são os extremos do intervalo considerado. Estes nós que definem uma partição do intervalo I são chamados de pontos de precisão porque neles conhecemos exatamente a função que está sendo estudada, por exemplo, eles são os pontos em que estão colocados os sensores que mediram algum fenômeno. Se estivermos aproximando alguma função g, a função aproximante f que será construida por algum dos métodos que estudaremos neste capı́tulo, conı̈ncidirá com g nestes pontos: f (xk ) = g(xk ). A partição não precisa ser uniforme, embora seja prático, nas implementações computacionais, considerar partições uniformes porque simplifica a construção do algoritmo. Você irá encontrar, entre os nossos programas, um meio para trabalhar com partições não uniformes, que podem ser úteis em alguns contextos, como na análise de de fenômenos com alta oscilação, ou piques. Portanto a medida dos intervalos Ik = [xk , xk+1 ] não precisa ser a mesma. Começamos considerando o polinômio Q(x) = (x − x0 ) · · · (x − xn−1 ) 13 salvo 14 mas no caso em que os pontos estejam sobre uma paralela ao eixo OY ... descoberto por Edward Waring (1736-1798) e por Leonard Euler (1707-1783) (4.82) 125 CAPÍTULO 4. SPLINES de grau n + 1 cuja derivada é obtida pela regra do produto, acompanhe a sequência de operações que lhe devem ser familiares, como consequência de exercı́cios anteriores: Pk (x) = P (x) x−xk um polinômio de grau n P ′ (x) = n−1 P Pk (x) (4.83) (4.84) k=0 Pk (xk ) = P ′ (xk ) Pk (xj ) = 0 ⇐==⇒ j 6= k n−1 P Pk (x) f (x) = P ′ (xk ) (4.85) (4.86) (4.87) k=0 f (xk ) = n−1 P k=0 Pk (xk ) P ′ (xk ) = Pk (xk ) P ′ (xk ) = P ′ (xk ) P ′ (xk ) =1 (4.88) como f é uma combinação de polinômios de grau n então é um polinômio cujo grau é no máximo n. Como os valores deste polinômio nos n + 1 nós são a unidade, podemos concluir que f é constante igual a 1. As experiências feitas com gnuplot na lista de exercı́cios acima já evidenciou estes fatos. n−1 P Pk (xk ) Quer dizer que a expressão P ′ (xk ) é uma combinação linear convexa k=0 (uma soma de pesos), para todos os valores de x no intervalo [a, b]. Se portanto escolhermos uma coleção de n + 1 valores, cada um deles associados a um dos nós podemos definir: n−1 X yk Pk (x) (4.89) g(x) = P ′ (xk ) k=0 e como o valor da soma, em cada nó era 1, agora g(xk ) = yk o que nos dá um polinômio de grau n passando por n + 1 pontos escolhidos no intervalo [a, b]. O polinômio de grau n, equação (89), é o polinômio de interpolação de Lagrange. 126 CAPÍTULO 4. SPLINES 4.2 Funções polinomiais por pedaços A forma mais simples de interpolar uma coleção de pontos do plano consiste em ligá-los por segmentos de reta: a poligonal cujos vértices são os pontos dados. Aqui vamos considerar um caso particular em que os pontos dados representam valores de uma função hipotética defina em um intervalo [α, β], os valores obtidos pelas medições de um sensor ao longo de um intervalo do tempo. Nestas condições as abcissas destes pontos são uma sequência crescente de pontos do intervalo [α, β], {α = a0 < a1 < · · · < an = β} e a poligonal mencionada acima é uma função linear por pedaços, caso particular do nosso objetivo. Vamos generalizar o caso das poligonais nesta seção construindo os quase-splines, que são funções polinômiais por pedaços do terceiro grau cuja derivada é contı́nua. Nesta seção vamos fazer a construção teórica das funções polinomiais por pedaços que já aparecerem em vários exercı́cios e que portanto você já está praticamente familiarizado com este instrumento. Aqui a linguagem será mais formal apenas. Alguns itens da lista de exercı́cios seguinte servem apenas para relembrá-lo de algumas técnicas, do Cálculo Diferencial e Integral e da Geometria Analı́tica que precisaremos na continuação. Aquilo que lhe parecer trivial você deve, simplesmente, saltar. Exercı́cios 15 Polinômios por pedaços 1. Função linear por pedaços (a) Considere a seqüência de nós xk ∈ {−3, −2.5, −1.5, −0.5, 0.5, 1.5, 2.5, 3} ⊂ [−3, 3] e a seqüência de valores correspondente yk ∈ {0, 1, −1, −2, −3, −1, 2, 0} Construa, (faça o gráfico) da poligonal que interpola os pontos (xk , yk ). (b) Chame f a função cujo gráfico foi feito no item anterior e calcule os seus valores nos pontos inteiros do intervalo [−3, 3]. 2. Considere a seguinte melhoria nos dados do item anterior: para cada nó da malha, o sensor calculou a taxa de variação dk ∈ {1, 0, −2, −1, 0, 1, 0, −1} e consequentemente, em cada intervalo Ik = [ak , ak+1 ] temos quatro informações: 127 CAPÍTULO 4. SPLINES Ik = nó xk xk+1 valor yk yk+1 taxa de variação dk dk+1 Encontre, para cada intervalo Ik , o polinômio Pk (x) = ak,0 + ak,0 (x − xk ) + ak,0 (x − xk )2 + ak,0 (x − xk )3 que15 pode ser obtido considerando os valores nos extremos de Ik , yk , yk+1 e as taxas de variação nestes pontos, dk , dk+1 , quer dizer que Pk′ (xk ) = dk Pk′ (xk+1 ) = dk+1 Pk (xk ) = yk Pk (xk+1 ) = yk+1 3. Calcule a quantidade do fenômeno descrito no exercı́cio (ex. 2 ), por definição a quantidade de um fenômeno é a integral da função que o descreve. 4. Considere a seguinte tabela de dados (obtidos por um sensor) xk −5 1 7 yk 7 3 5 dk −3 1 −2 em que xk são os nós da malha e yk , dk são, respectivamente o valor medido e a taxa de variação calculada em cada nó. Encontre um polinômio por pedaços do16 terceiro grau, P , que represesente o fenômeno no intervalo [−3, 3] e faça o gráfico. 4.2.1 Um sensor mais inteligente Retomando a linguagem e a notação que usamos na discussão do polinômio de Lagrange, quando tivermos uma malha {a = x0 , . . . , xn = b} (4.90) definindo uma partição de um intervalo [a, b], o problema tı́pico que desejamos resolver consiste em criar um modelo para um fenômeno cujos valores {y0 , . . . , yn } (4.91) são conhecidos (medidos) sobre os nós. Anteriormente usamos a linguagem “desejamos encontrar um polinômio que passe pelos n + 1 pontos” (x0 , y0 ) · · · (xn , yn ) 15 dizemos 16 chamos que este polinômio está desenvolvido no ponto xk este tipo de função de “uma polinomial do terceiro grau” (4.92) 128 CAPÍTULO 4. SPLINES agora diremos que desejamos encontrar uma polinomial, uma função polinomial por pedaços que passe pelos pontos na equação (92). Uma situação prática que este problema descreve, consiste de uma série de sensores colocados ao longo de uma via por onde passe o fenômeno que desejamos medir, como um oleoduto e a pressão arterial do flúido que nele passe, ou a velocidade e a intensidade do tráfego em uma estrada, enfim, qualquer evento que possa ser medido controlado por um parâmetro que pertence a um intervalo. Este é o significado de yk , a medida tomada no nó xk , examine os exercicios (ex. 2) e (ex. 3), página 127. Vamos considerar um sensor de melhor qualidade, capaz de não somente medir a intensidade do fenômenos em cada nó xk mas também calcular-lhe a taxa de variação neste ponto. Assim a base de dados que temos é (x0 , y0 , d0 ) · · · (xn , yn , dn ) (4.93) em que yk é a intensidade do fenômeno em cada nó xk e dn é a taxa de variação em cada nó. Exemplo 10 Sensor Vamos mostrar com um pequeno exemplo que a situação descrita acima e explorada no exercı́cio 1, do sensor que também mede taxas de variação, é realista. Considere um sensor colocado em uma local estratégico para medir um fenômeno que executa as medições a intervalos determinados, a cada minuto, por exemplo. Mas, ao “disparar o medidor, em vez de fazer uma única medida, faz três medições, por exemplo, a cada mili-segundo. **aqui página 24 A base de dados assim levantada fica descrita pela matriz y0,2 −y0,1 y −y ∆y0,2 ∆y0,1 + 0,3∆t 0,2 ∆t1 ∆t1 + ∆t2 2 = 2 2 x0 y0,1 y0,2 y0,3 d0 = .. .. .. .. .. (4.94) . . . . . yn,3 −yn,2 ∆yn,2 ∆yn,1 yn,2 −yn,1 xn yn,1 yn,2 yn,3 dn = ∆t1 + 2 ∆t2 = ∆t1 + 2 ∆t2 em que dk é o valor médio das duas taxas de variação que pudemos calcular usando as três medidas finas obtidas em cada nó. Simplificando, desta matriz de dados vamos fazer uso apenas da submatriz x0 y0,1 d0 .. .. .. (4.95) . . . xn yn,1 dn x0 .. . xn y0 .. . d0 .. . dn e vamos simplificar a notação yn (4.96) 129 CAPÍTULO 4. SPLINES “esquecendo” o método como obtivemos as derivadas aproximadas e mesmo ignoraremos na continuação que se tratam de “derivadas aproximadas”. Diremos que dk é a derivada no ponto xn quer dizer que temos 2(n + 1)informações processadas17 pelo sensor: • Quatro informações em cada sub-intervalo [xk , xk+1 ]. Temos no nó xk : yk , dk (4.97) no nó xk+1 : yk+1 , dk+1 ; (4.98) • Polin^ omios por pedaços. Em cada sub-intervalo podemos calcular um polinômio de grau três que modela o fenômeno no intervalo [xk , xk+1 ]; Pk (x) = ak,0 + ak,0 (x − xk ) + ak,0 (x − xk )2 + ak,0 (x − xk )3 Examine, novamente, os exercicios (ex. 2) e (ex. 3), página 127. • Malha com n + 1 nós, com os n + 1 pontos, incluindo os extremos do intervalo, determinammos n subintervalos, temos n polinômios de grau três que irão modelar o fenômeno no intervalo [a, b]; • Polinomial de grau três é esta função que estamos chamando de uma polinomial de grau três que usaremos como modelo para os fenômenos que estamos estudando. A polinomial também chamada de função polinomial por pedaços. Podemos resumir estes dados na tabela: P0 (x) = a0,0 + a0,1 (x − x0 ) + a0,2 (x − x0 )2 + a0,3 (x − x0 )3 .. . yn dn Pn (x) = an,0 + an,1 (x − xn ) + an,2 (x − xn )2 + an,3 (x − xn )3 (4.99) Há várias formas de resolver o exercı́cio 1. Leia a solução dos exercı́cios ao final do capı́tulo, nós vamos usá-la como método de trabalho. Rode os nossos programas usando-os como exemplos dinâmicos18 do texto. x0 .. . xn y0 .. . 4.2.2 d0 .. . Aproximação de funções Analise o gráfico (fig. 4.8) página 130, Este gráfico (fig. 4.8), pode ser reproduzido e inclusive impresso em papel, usando o programa19 aproximacao que pode ser encontrado em [20, programas.tgz] No gráfico você pode ver uma função do tipo f (x) = P (x)sen(ax + b) 17 Houve (4.100) uma quantidade bem maior de informações coletadas, depois de coletadas foram processadas, ou pelo sensor ou por um programa num computador resultando em 2(n + 1) informações. 18 simplesmente rodar os programas não o vai levar a adquirir conhecimento... 19 escolha, no programa, a opção (3) 130 CAPÍTULO 4. SPLINES gráfico da aproximação Aproximação de uma função 60 "polped" "precisao" "XOY" 40 20 0 −20 −40 −60 −10 −5 0 5 10 gráfico da função Figura 4.8: Aproximação de uma função obtida pelo produto de uma função polinomial por uma senoide. Tais funções são bons exemplos de modelos com grandes oscilações e portanto que oferecem dificuldades para serem aproximadas. Rodando o programa com intervalos grandes, por exemplo [−30, 30] você poderá ver os defeitos da aproximação. Usando o intervalo default do programa, você terá uma visão enganosa de perfeição, mas é este o objetivo do programa, permitir que você manipule o exemplo o que não é possı́vel fazer com uma figura como (fig. 4.8). Observação 5 Simulação da realidade Primeiro que tudo é preciso observar que não temos nenhuma função para aproximar. O nosso objetivo é o de resolver problemas do tipo exemplificado pelo (ex. 3), página 127 em que uma massa de dados é obtida, de alguma forma20 , representando um certo fenômeno que desejamos estudar. No caso dos programas educacionais que fizemos, é interessante supor que exista uma função f dada, por uma equação “algébrica”21 , como f (x) = P (x)sen(ax + b), porque podemos exibir gráficos que mostrem as perfeições ou as fraquezas do método. Nada poderiamos ilustrar apenas apresentando o modelo. Falaremos com frequência de uma função hipotética que estamos tentando aproximar, e essa função seria a equação do fenômeno. Ora, a Natureza é muito rebelde para ser equacionada e é porisso que precisamos de modelos matemáticos para simular a Natureza, e, naturalmente, sempre estar conscientes de que uma parte, possivelmente significativa, da realidade se perdeu em sua idealização pelo modelo. 20 em geral com auxı́lio de sensores usando “algébrico” de forma larga, seno não é evidentemente uma função algébrica 21 estamos CAPÍTULO 4. SPLINES 131 A única forma de ter segurança com simulações é • Rodar diversas vezes o modelo. Rode o programa aproximacao com intervalos bem diferentes, para entender o que estamos dizendo; • cada vez que o modelo for rodado, fazer uma nova entrada de dados experimentais; • acompanhar estatisticamente a dispersão entre os dados obtidos com o modelo e os levantamentos de dados do fenômenos estudado; • somente aceitar o modelo quando resultados independentes tiverem uma dispersão estatı́stica baixa. Modelos são aproximações da realidade construidas por seres humanos que podem perder de vista um aspecto muito importante do problema no qual você estiver aplicando o modelo. Eis a razão da importância de entendamos os modelos por dentro e os possamos modificar, este é um ponto central na questão software aberto. Obviamente que existe um custo a ser considerado e, infelizmente, este custo pode ser alguma vezes sobreposto a questões como segurança, aqui entra a ética... Base teórica dos modelos Há vários tipos de modelos e este assunto sozinho ocupa vários volumes na literatura, portanto o leitor deve ficar consciente de que aqui seguiremos por um atalho em busca de um tipo de modelo de nossa escolha. Na bibligrafia você poderá encontrar mais dados para prosseguir num aprofundamento, se este for o seu desejo. Numa classificação um pouco simples consideraremos dois tipos de modelos: • discretos em que o conjunto sobre os quais as funções estiverem definidas tenha um número finito de valores. Teoria dos jogos por exemplo usa este tipo de modelos, a análise combinatória, ou mais amplamente a combinatória, é uma base teórica para tais modelos; • contı́nuos em que as funções envolvidas tem como domı́nios subconjuntos dos números reais. As funções contı́nuas e diferenciáveis são a peça central nestes modelos com todas as técnicas, integral e derivada, do Cálculo Diferencial e Integral. Os modelos de que trataremos neste livro são do segundo tipo, os contı́nuos. Observação 6 Contradição dos modelos contı́nuos Melhor do que contradição seria possivelmente usar a palavra paradoxo. Aqui é preciso chamar sua atenção para uma contradição com a qual é preciso conviver. Todo o nosso trabalho se encontra intimamente ligado com programas de computador, enfim com computadores. Ora, tudo em um computador é finito, 132 CAPÍTULO 4. SPLINES quer dizer que estaremos modelando o infinito (contı́nuo)22 com um modelo discreto, o computador. Uma das conseqüências mais funestas desta contradição é que surge um item omnipresente em nossos trabalhos, o erro, que temos que, permanentemente, levar em conta. Aqui é preciso ter uma atitude sempre realista de verificação sistemática dos modelos em suas aplicações. Mas o objetivo desta observação não é o de sugerir o receio e sim o de observar que o cuidado sempre deve estar presente e um método prático para enfrentar esta questão é o trabalho em equipes. Os elementos da teoria são os seguintes: • da computação vem uma técnica que estamos usando deste o primeiro capı́tulo, varredura; • na Matemática, esta técnica computacional de varreduras, assume o aspecto de malha, ou partição de um determinado conjunto. Estes dois conceitos matemáticos são equivalentes, malha,partição, embora algumas vezes não seja trivial a passagem de um para o outro. Neste livro sempre usaremos malhas associadas a um conjunto de pontos que determinam “retângulos” (nos casos multidimensionais) ou “sub-intervalos” (nos casos unidimensionais). Veja as figuras (fig. 2.2), página 32 e (fig. 2.3), página 35. Um exemplo, no caso unidimensional é o que você tem no (ex. 3), página 127, em um conjunto de nós escolhidos em um intervalo determina a malha. Associada a esta malha temos uma famı́lia de polinômios do grau três, uma polinomial do grau três e assim escapamos do alto custo computacional que é trabalhar com polinômios de grau elevado; • convergência do algoritmo Os algoritmos definem sucessões. Estudamos sucessões no capı́tulo três. Uma sucessão é uma função definida no conjunto dos números naturais e tomando valores em um outro conjunto. Este segundo conjunto determina a natureza das sucessões. Com frqüência, neste livro, as sucessões tem valores reais, é o que chamamos de sucessões de números reais23 . Sucessões deste tipo definem números quando forem convergentes, é o limite da sucessão. Entretanto, não daremos ênfase à convergência de algoritmos neste livro, e isto é um defeito do livro, procure compensar este defeito com literatura complementar. • o conceito de continuidade é utilizado seguidamente. No Cálculo você essencialmente estudou que se a diferença |∆x| = |x2 − x1 | 22 com freqüência a palavra contı́nuo é tomada como sinônimo de infı́nito mas os dois conceitos são distintos 23 em geral números racionais, sobretudo porque os nossos programas de computador somente podem lidar com números racionais 133 CAPÍTULO 4. SPLINES for pequena, então a diferença ∆f = f (x2 ) − f (x1 ) também será pequena quando a função f for contı́nua. Este é um ponto essencial e que se encontrará em jogo a todo momento. Vamos sempre supor que os fenômenos são contı́nuos. Lavoisier dizia, veja [11], que “na Natureza nada se cria e nada se perde, tudo se transforma que se pode traduzir grosseiramente por a Natureza não dá saltos, modificado pela Ciência Quântica para “a natureza dá saltos, porém pequenos. É a continuidade que usamos quando afirmamos que ao refinarmos uma malha reduzimos o erro cometido. As funções diferenciáveis são apenas funções mais profundamente contı́nuas. A derivada é uma ordem superior de continuidade. É com base nestes três conceitos • malha ou partição e sua realização computacional, a varredura; • convergência de sucessões; • continuidade dos fenômenos a hipotética equação que governaria um fenômeno das ciências naturais ou humanas, é uma função contı́nua e mesmo diferenciável, que vamos construir os modelos e provar que eles conseguem nos dar uma aproximação satisfatória da realidade. A próxima lista de exercı́cios tem por objetivo recı́clar os seus conhecimentos de Cálculo dentro do nosso objetivo. Observação 7 A admirável eficiência dos modelos matemáticos Ou, em outras palavras, modelos contı́nuos para um Universo esponjoso. Os saltos quânticos não alteram ou impedem o uso da continuidade nos modelos embora eles tenham que ser levados em conta num momento apropriado... Na verdade o Universo é esponjoso e não existe, na vida real, a continuidade dos modelos matemáticos. Mas os modelos, mesmo sendo, como são, uma realidade virtual, nos permitem analisar a realidade fı́sica muito bem, desde que saibamos usá-los adequadamente. O nosso objetivo é mostrar-lhe isto aqui. Exercı́cios 16 Continuidade e diferenciabilidade Se um exercı́cio lhe parecer óbvio, não o faça, não perca tempo, mas seja honesto consigo próprio: se um exercı́cio lhe parecer pouco claro, crie uma variante do mesmo e faça os dois, o exercı́cio e a variante. 1. continuidade Construa uma polinomial do terceiro grau P usando os dados da tabela abaixo. Prove, usando P0 (x1 ) = P1 (x1 ), que P é continua. Prove que P também é diferenciável. 134 CAPÍTULO 4. SPLINES xk x0 = −5 x1 = 0 x2 = 6 yk 1 0 2 dk 0 −1 1 2. Considere a figura (fig. 4.9) página 134. Justifique a existência de pontos (a) no intervalo de definição nos quais f ′ (ζ) = f (b)−f . Identifique ζ, a, b e b−a o teorema do Cálculo que governa esta afirmação. f 1 b a Figura 4.9: Derivada, tangente e Teorema do Valor médio 3. Considere uma função contı́nua e diferenciável, f , definida no intervalo [−5, 6] e a poligonal do terceiro grau P definida pela tabela seguinte: xk x0 = −5 x1 = 0 x2 = 6 yk f (−5) f (0) f (6) dk f ′ (−5) f ′ (0) f ′ (6) Mostre que existe um ponto x0,1 ∈ [x0 , x1 ] tal que P ′ (x0,1 ) = e um ponto x1,1 ∈ [x1 , x2 ] tal que P ′ (x1,1 ) = o Teorema do Cálculo que garante isto. f (x2 )−f (x1 ) x2 −x1 f (x1 )−f (x0 ) x1 −x0 indicando qual é 135 CAPÍTULO 4. SPLINES 4.3 Quase-splines Como anunciamos no inı́cio, a partir dos anos 1950, começamos a descobrir que havia um método polinomial mais inteligente. Em vez de procurarmos um polinômio de grau elevado, n passando por n + 1 pontos dados, poderiamos procurar vários polinômios de grau mais baixo. Isto é o que chamamos de polinômios por pedaços, uma polinomial. . Estas polinomiais são quase-splines. Vamos construtivamente mostrar que uma polinomial de grau três é a solução ótima e depois vamos definir o que são splines. 4.3.1 Polinomiais de grau três Queremos resolver o problema de interpolar n + 1 pontos com a informação extra da taxa de variação em cada um dos nós. Isto corresponde a um conjunto de quatro informações sobre cada sub-intervalo considerado o que nos permite determinar, associado a cada um dos intervalos, um polinômio de grau três. A solução vai ser obtida iterativamente percorrendo o conjunto dos intervalos, vamos então simplificar a notação, considerando [a, b] um intervalo genérico: c1 = P (a), d1 = P (a)′ c2 = P (b), d2 = P (b)′ (4.101) (4.102) no intervalo [a, b] e sabemos, da aproximação polinomial clássica que estudamos inicialmente, que estas quatro informações nos permitem determinar de forma única um polinômio do grau três. Temos as equações, (desenvolvendo o polinômio no ponto a) P (x) = m0 + m1 (x − a) + m2 (x − a)2 + m3 (x − a)3 P (a) = m0 = c1 P ′ (x) = m1 + 2m2 (x − a) + 3m3 (x − a)2 P ′ (a) = m1 = d1 P (b) = m0 + m1 (b − a) + m2 (b − a)2 + m3 (b − a)3 = c2 P ′ (b) = m1 + 2m2 (b − a) + 3m3 (b − a)2 = d2 (4.103) que se reduz assim a duas equações nas incognitas ainda restantes m2 , m3 observando que são conhecidos: m0 = c1 , m1 = d1 , b − a, c2 , d2 c1 + d1 (b − a) + m2 (b − a)2 + m3 (b − a)3 d1 + 2m2 (b − a) + 3m3 (b − a)2 (4.104) = c2 = d2 (4.105) 136 CAPÍTULO 4. SPLINES 3c1 + 3d1 (b − a) + 3m2 (b − a)2 + 3m3 (b − a)3 d1 (b − a) + 2m2 (b − a)2 + 3m3 (b − a)3 = 3c2 (4.106) = d2 (b − a) 3c1 + 2d1 (b − a) + m2 (b − a)2 = 3c2 − d2 (b − a) m2 = 3c2 −d2 (b−a)−(3c1 +2d1 (b−a)) (b−a)2 (4.107) (4.108) Nas (eq.106 ) igualamos os coeficientes de m3 depois subtraimos as duas equações para obter a (eq.107) de onde tiramos o valor de m2 . Esta solução é possı́vel porque os nós a, b são diferentes e assim, calculado o valor de m2 , ele pode ser substituido numa das equações (eq.106 ), por exemplo em, c1 + d1 (b − a) + m2 (b − a)2 + m3 (b − a)3 = c2 o que vai nos permitir o cálculo de m3 : m3 = c2 − (c1 + d1 (b − a) + m2 (b − a)2 ) (b − a)3 (4.109) que também é possı́vel porque a 6= b. Observe que não nos preocupamos em explicitar os valores porque estas contas devem ser feitas dentro de um programa que irá fazer os cálculos finais. Como esta solução é única, achamos assim o único polinômio P do terceiro grau que satisfaz às quatro condições no intervalo [a, b]. Demonstramos assim: Teorema 7 Existência e unicidade da poligonal de grau três Dada uma partição a = x0 < . . . < xn = b (4.110) de um intervalo [a, b] e uma lista de pares de valores y 0 , d 0 , . . . , yk , d k , . . . , yn , d n (4.111) interpretados como valor no ponto, yk , e taxa de variação no ponto, dk , existe uma única poligonal P = (P0 , . . . , Pk , . . . , Pn ) do terceiro grau tal que P (xk ) = yk P ′ (xk ) = dk (4.112) P (xk+1 ) = yk+1 P ′ (xk+1 ) = dk+1 com (desenvolvendo o polinômio Pk no ponto xk ) Pk (x) = mk,0 + mk,1 (x − xk ) + mk,2 (x − xk )2 + mk,3 (x − xk )3 (4.113) mk,0 = Pk (xk ) = yk mk,1 = Pk′ (xk ) = dk (4.114) (4.115) sk = xk+1 − xk 6= 0 (4.116) mk,2 = mk,3 = 3yk+1 −sk dk+1 −3yk −2dk sk s2k (4.117) yk+1 −(yk +dk sk +mk,2 s2k ) s3k (4.118) 137 CAPÍTULO 4. SPLINES O programa “aproximacao” calcula os coeficientes da poligonal em cada um dos intervalos lançando os resultados no arquivo “dados” que você pode ler com um editor de textos. O programa lhe dirá isto. Escolha a opção (5) no programa, mas antes edite o arquivo leitura onde os dados do sensor devem estar gravados. O programa tem um pequeno texto explicativo em que estas informações lhe serão apresentadas. Use a opção (7) para isto, ou responda que deseja ler a teoria, ao iniciar o programa. Como a polinomial P coı̈ncide com o polinômio Pk no intervalo [xk , xk+1 ], então P é contı́nua e diferenciável em cada sub-intervalo. Como Pk+1 (xk+1 ) = ′ Pk (xk+1 ) e Pk+1 (xk+1 ) = Pk′ (xk+1 ) então P é contı́nua e diferenciável no intervalo [a, b] Pk (xk+1 )′′ = 2mk,2 Pk+1 (xk+1 )′′ = 2mk+1,2 (4.119) (4.120) (4.121) 4.4 Valor médio integral O tamanho da letra indica que o assunto desta seção é mais difı́cil. Você pode optar por saltá-lo se achar que a discussão anterior sobre valor médio @ deixou convencid@. Vamos precisar do valor médio integral em nossa construção dos splines e como este tipo de valor médio é muito importante e será usado muito no capı́tulo 0, vamos fazer aqui uma revisão deste assunto de Cálculo. Definimos: Definição 2 (Valor médio integral) Valor médio integral Se f for integrável no intervalo [a, b] então V alm ed(f )[a,b] 1 = b−a Zb f (x)dx a Os probabilistas fazem uso de um outro tipo de valor médio integral que é uma generalização deste que acabamos de definir e para definir os splines vamos precisar desta generalização. Considere uma função positiva cuja integral seja 1. Um exemplo bem simples é uma função como χ[−0.5,0.5] (4.122) a função caracterı́stica do intervalo [−0.5, 0.5], exatamente porque a medida do suporte, [−0.5, 0.5], é 1. Demos um exemplo, mas vamos continuar pensando numa função qualquer positiva cuja integral seja 1. Esta questão do valor médio está longe de ser óbvia. Temos que demonstrá-la, provar que é verdade. Vale a pena discutir um tópico muito importante que é Valor médio integral. Vamos começar analisando qual é o significado da integral Zβ α g=1 (4.123) 138 CAPÍTULO 4. SPLINES quando g for uma função positiva24 , definida em um intervalo limitado [α, β]. Integral no sentido25 de Riemann é área! quer dizer que podemos calcular aproximadaRβ mente g se colocarmos uma malha fina no intervalo [α, β] e considerarmos os sub-retângulos α que os sub-intervalos vão gerar no gráfico de g. Assim produzimos a soma que chamamos de soma de Riemann, e que você deve ter visto no curso de Cálculo26 , veja o gráfico na figura (fig. 1), na página ix. Uma soma de Riemann tem o seguinte aspecto: n X g(xi )∆xi (4.124) i=0 e no caso de g, como sua integral vale 1, temos n X i=0 g(xi )∆xi ≈ 1 (4.125) em que27 todos os números que aparecem na soma são positivos. Definição 3 Pesos Uma coleção de números positivos, cuja soma é 1 se chama uma coleção de pesos, ou simplesmente pesos. Famı́lias de pesos são usadas para calcular médias aritméticas ponderadas, por exemplo, a inflação28 é uma média aritmética ponderada. No caso da função g = χ[−0.5,0.5] esta soma é exatamente 1, mas observe que estamos fazendo uma demonstração e assim g é uma função qualquer satisfazendo duas propriedades: • é positiva; • sua integral é 1. Se agora colocarmos a função f na soma de Riemann, teremos: n X f (xi )g(xi )∆xi (4.126) i=0 e podemos interpretar esta soma como uma quase29 média aritmética dos valores de f no intervalo [α, β] porque xi ∈ [α, β] onde estamos calculando a integral. Veja esta afirmação de outra maneira: os valores f (xi ); xi ∈ [α, β] podem ser interpretados como amostragem de f neste intervalo e a equação (eq. 126) é o valor médio desta amostragem por que a soma dos números g(xi )∆xi é quase 1. Quanto mais fina for a malha, mas próximo de 1 estará a soma na equação (eq.125 )30 , portanto é este o valor da integral, “o valor médio de f no intervalo [α, β], relativamente à função g”. Aqui temos dois fatores de precisão com que lidar: 24 um núcleo, ou um pulso unitário apenas integrais no sentido de Riemann, neste livro! e tem integral num sentido diferente? 26 O capı́tulo 0 faz uma revisão rápida deste assunto, visite-o agora se achar que precisa. 27 aproximadamente 1 porque é uma aproximação da integral que supusemos ser 1 28 Em que os governos colocam pesos onde lhe interessam para produzir os ı́ndices inflacionarios com que nos enganam 29 quase, porque a soma de Riemann,(eq. 125), não é 1, ela é aproximadamente 1 30 e mais preciso o cálculo da média aritmética 25 usamos CAPÍTULO 4. SPLINES 139 • a densidade dos pontos da malha, quanto mais pontos forem tomados na amostragem, mais preciso fica o levantamento de dados, mas também fica mais caro; • a medida da região de correção que é o tamanho do intervalo [α, β], a “base” da funçãopeso com que estamos fazendo a média. Veja a ilustração da região de correção na figura (fig. 4.13) página 147. Quanto menor for a medida desta região, mais exato fica a correção do erro na função, a “ciência” vai consistir em obter o máximo de precisão com o mı́nimo de custo. A função utilizada para calcular o valor médio, influência este valor médio. Como em qualquer média aritmética ponderada31 , a escolha dos pesos influência o valor da média, quer dizer que tais médias são viciadas32 , não podemos ter uma resposta padrão sobre o valor médio integral Zβ f (x)g(x)dx = V alMedg,[α,β] (f ) (4.127) α que chamamos de Valor médio integral de f relativo à g, no intervalo [α, β]. Em geral as funções usadas para calcular valor médio, são funções equilibradas em torno do zero, o ponto central do gráfico, e são translatadas para uma certa posição, para alı́ fazer o valor médio da função que interessa, como é o caso de χ[−0.5,0.5], que além do mais é uniforme ao longo do intervalo [−0.5, 0.5] e consequentemente ela produz uma autêntica média aritmética de f no intervalo. Quando a medida da região de correção diminue, esta média tende para o valor de f , no ponto central da região de correção, se ele existir. Quando a função f for contı́nua, este valor coı̈ncide com algum valor de f no intervalo em que a média está sendo calculada33 . Se a função for descontı́nua ele representa uma proposta de correção da função. Esta idéia é essencial em diversas áreas hoje, sob a rubrica correção da informação. Veja na figura (fig. 4.13) página 147, a ilustração da região de correção. Esta questão da média, a sua dependência de uma função-peso, está longe de ser óbvia. Mas se você raciocinar um pouco, chegará à conclusão que deve ser assim. Por exemplo, • considere g, a função relativamente a qual se quer calcular a média, como tendo mais área à esquerda do ponto central a do intervalo. Tendenciosa à esquerda. Então a média estará mais influênciada pelos valores à esquerda; Veja a (fig. 4.15) página 152. • considere agora g, a função relativamente a qual se quer calcular a média, como tendo mais área à direita do ponto central a do intervalo. Tendenciosa à direita. Então a média estará mais influênciada pelos valores à direita; Veja a (fig. 4.15) página 152. • mas se agora, g for equilibrada, tiver áreas iguais à direita e à esquerda do ponto central, vamos encontrar a média aritmética, o valor de f neste ponto central a, se ele existir; • e fica uma pergunta não respondida, porque usamos uma variedade grande de funçõespeso, porque não usamos sempre a mesma, uma função equilibrada em torno de um ponto central ? guarde esta pergunta no bolso... este raciocı́nio deve conduzı́-l@ a aceitar que se g não tiver inclinações nem à direita, nem à esquerda, então a média calculada com ela corresponderá ao valor f (a)34 em que a é o ponto central do intervalo. Conseguimos assim “demonstrar” o teorema: Teorema 8 do valor médio integral Se g for uma função positiva tal que 31 e o valor médio integral é uma média ponderada adjetivo vicidadas tem sentido técnico, aqui, mas você pode facilmente extrapolar o sentido da frase para outros contextos menos técnicos...como no cálculo da inflação. A inflação é polı́tica! os preços são polı́ticos! os juros são polı́ticos! 33 esta é uma propriedade das funções contı́nuas 34 aqui tem um erro, veja observação mais a frente 32 o 140 CAPÍTULO 4. SPLINES Zβ g=1 (4.128) α então V alMedg,[α,β] = Zβ f (x)g(x)dx (4.129) α é o valor médio integral de f relativamente a g no intervalo [α, β]. E se g for equilibrada no intervalo [α, β] no sentido de que tenha a mesma área a esquerda e á direita do ponto central a deste intervalo, então a ∈ [α, β] ; V alMedg,[α,β] = Zβ f (x)g(x)dx = f (a) (4.130) α Observação 8 Um erro no teorema do valor médio O teorema 8 tem um erro que é preciso corrigir. Observe o gráfico na figura (fig. 4.11). A função f não está definida no ponto c Quer dizer que não podemos escrever c ∈ [α, β] ; V alMedg,[α,β] = Zβ f (x)g(x)dx = f (c) (4.131) α como está no teorema, mas sim V alMedg,[α,β] = Zβ f (x)g(x)dx (4.132) α ou seja, apenas dizer que é o valor médio. É o acontece, no gráfico (fig. 4.11), página 144 em relação ao ponto c em que a função pode nem siquer estar definida. Aproveitemos para ver que o valor médio serve para definir o valor f (c) que faltava para f ou que tinha sido calculado de forma errada. Este é um método que os estatı́sticos usam frequentemente, e também muito usado nas telecomunicações, restaurações de arquivos, recuperação de dados. Observação 9 Evolução e correção de um teorema Quando redigimos o teorema 8 cometemos o erro de escrever o valor de f no ponto a a volta do qual o valor médio está sendo calculado. Depois nos apercebemos do erro, mas resolvemos deixá-lo assim, com a correção posterior, para que você veja que os teoremas as vezes nascem errados. Em geral eles sempre são corrigidos, depois, mas por outra pessoa que lê o trabalho, não pelo próprio autor. Acho que este erro torna mais fácil a compreensão do teorema. Exercı́cios 17 (Valor médio) Valor médio 1. Considere a função f = χ[−0.5,0.5] , a função caracterı́stica do intervalo [−0.5, 0.5]. Prove que gα (x) = αf (αx) também tem integral 1. Produza alguns exemplos usando gnuplot. 2. Construa uma função que seja contı́nua e positiva cuja integral seja 1. 141 CAPÍTULO 4. SPLINES Solução 9 Se uma função positiva for contı́nua e diferenciável, digamos f , e definida e integrável no intervalo [a, b] então podemos calcular A= Rb f (x)dx (4.133) 1 f (x) A (4.134) a g(x) = o que resulta numa função positiva, contı́nua, diferenciável cuja integral sobre o intervalo [a, b] é 1. Basta-nos, portanto construir uma função qualquer e poderia ser f (x) = 4 − x2 ; x ∈ [−2, 2] R2 A = f (x)dx g(x) = −2 |x| > 2 1 f (x) |x| ≤ 2 A ⇒ 0 (4.135) (4.136) (4.137) 3. Construa uma função formada de três segmentos de parábola, que seja contı́nua, diferenciável e positiva cuja integral seja 1. Solução 10 Considere a função f (x) = 4 − x2 cuja derivada nos extremos do intervalo [−2, 2] são, respectivamente, {4, −4}. Podemos construir um parábola que tenha derivada no ponto −4 o valor -2, por exemplo ′ f1 (x) = (x + 4)2 ; f1 (x) = 2(x + 4); f1 (−2) = 4 portanto se somarmos: h(x) = f (x) + 4 teremos ′ h(−2) = f1 (−2); h′ (−2) = f1 (−2) Defina x ≤ −4 x ≤ −2 x≤2 g(x) = x≤4 x>4 0 f1 (x) f (x) + 4 f2 (x) = (x − 4)2 0 (4.138) Esta função se anula fora do intervalo [−4, 4], por contrução é diferenciável e sua integral vale 142 CAPÍTULO 4. SPLINES R4 g(x)dx = (4.139) −4 −2 R = + R2 f1 (x)dx + (4.140) (f (x) + 4)dx + (4.141) R4 + f2 (x)dx (4.142) −4 −2 2 R2 −2 −2 R f1 (x)dx = R2 x2 dx = 0 −4 (f (x) + 4)dx = 16 − R4 R∞ −∞ g(x) = = (4.143) 32 3 (4.144) 8 3 (4.145) 48 3 (4.146) f2 (x)dx = 2 16 3 8 3 3 Defina então F (x) = 48 g(x) e temos assim uma função cuja integral é 1 sendo diferenciável na reta. O gráfico de F pode ser vista na figura (4.10) página 143, 4. estoque de núcleos Mostre que se uma função f tiver integral 1 então g(x) = αf (αx) também tem integral 1. 4.5 Splines cúbicos Em muitas aplicações os quase-splines construidos na seção anterios são suficientes oferecendo boa aproximação. Mas em outras, como exemplo em computação gráfica, em que é necessário mais dinâmica, os algoritmo tem que ser mais otimizado e o método de aproximação mais preciso. Para isto temos os splines cúbicos que construiremos aqui. O nome do jogo! É spline ou splines. Se você consultar [28, Spline], você logo vai ver a indecisão sobre o nome, hora é usado spline e logo em seguida splines. Vamos preferir a segunda forma que nos parece mais eufônica, mas não temos nenhuma razão especial pela preferência a não ser porque os splines são 143 CAPÍTULO 4. SPLINES 10 F(x) 0 g(x) 5 0 -5 -10 -15 -10 Figura 4.10: -5 0 5 10 15 Uma função positiva cuja integral é 1 formados sempre de vários pedaços e talvez porisso devessemos usar o “s” ao final. Há vários métodos para construir splines. O que vamos adotar é muito poderoso, embora exija um pouco mais de base teórica. Ao mesmo tempo sua aplicabilidade pode ser bastante simplificado, ao ponto de você poder carregar o “motor” dos splines num pen-drive, ou mesmo num disquete de 1.44 Mb, falei num pen-drive porque os disquetes em geral representam mais trabalho do que utilidade. Até o final deste capı́tulo esta questão ficará clara. Definição 4 Splines Um n-splines é uma polinomial35 de grau n que é de classe C n−1 , quer dizer que tem n − 1 derivadas contı́nuas. 35 Não precisa ser “polinomial”, no momento certo faremos esta observação novamente. Há splines não polinomiais. 144 CAPÍTULO 4. SPLINES Você está vendo a razão porque criamos um o conceito de polinomial que chamamos de quase-splines. Elas serviram para antecipar os splines e em alguns casos substituı́-los porque dependem de menos teoria. As polinomiais que construimos até agora são de grau três e de classe C 1 , poristo não são splines, a segunda derivada pode ser descontı́nua. Exemplo 11 Splines Uma poligonal contı́nua, isto é uma sucessão de segmentos de linha reta que interligue n pontos, é uma polinomial de grau 1 e de classe C 0 , portanto um 1-splines É difı́cil construir manualmente um 2-splines, uma polinomial do segundo grau que seja de classe C 1 . Você pode e deve tentar construir usando os métodos que apresentamos para construir os quase-splines afim de se convencer da dificuldade e melhor avaliar a pequena complicação onde vamos metê-l@ agora. 4.5.1 Produto de convolução Vamos definir uma operação que ficou na geladeira por anos até que os métodos computacionais a viessem resgatar, a convolução, ou melhor dizendo, o produto de convolução que é o seu nome original. Vamos começar com uma “definição geométrica” errada, ilustrada36 na figura (fig. 4.11) página 144. f 0 retângulo móvel Figura 4.11: posição original do retângulo Definição geométrica - produto de convolução No próximo parágrafo corrigiremos a definição usando uma motivação algébrica para adotar uma forma mais adequada de definir a operação. 36 Você deve ter compreendido o poder do erro que aparece no coeficiente do segundo grau do Polinômio de Taylor no capı́tulo 1 145 CAPÍTULO 4. SPLINES Você pode identificar, na figura (fig. 4.11), o gráfico da função descontı́nua f e várias cópias do mesmo37 retângulo que são translações do gráfico da função caracterı́stica, χ[−0.5,0.5] , do intervalo [−0.5, 0.5]. É esta a forma de fazermos produto de convolução entre duas funções. • Uma delas fica com o gráfico fixo, a outra, tem seu gráfico translatado para um ponto a, Shapiro,[6], chama isto de média volante e logo você vai ver porque. • Neste ponto calculamos a integral do produto das duas funções, o resultado é f ∗ χ[−0.5,0.5](a), o valor do produto de convolução no ponto a. Exercı́cio (resolvido em seguida) escreva a equação da translação χ[−0.5,0.5]a da função χ[−0.5,0.5] para o ponto a. • A cada novo deslocamento (translação) do gráfico de χ[−0.5,0.5], o peso se deslocando novamente, para um ponto b e nova integral corresponde ao cálculo de f ∗ χ[−0.5,0.5] (b), o valor do produto de convolução no ponto b. • Leitura “produto de convolução de f por χ[−0.5,0.5] no ponto b”, a expressão formal38 seria (errada, como já @ advertimos) Z∞ −∞ f (x)χb (x)dx = Z∞ f (x)χ(x − b)dx (4.147) −∞ Na expressão da integral o exercı́cio proposto linhas acima ficou resolvido. Sem dúvida é difı́cil39 calcularmos f ∗ χ[−0.5,0.5] (x) num ponto x qualquer ou mesmo obtermos uma fórmula para este resultado. Nosso objetivo é mostrar-lhe alguns exemplos do que significa f ∗ g para convencê-l@ do valor do investimento pesado que vai fazer. Depois você verá que um programa de computador será o encarregado de fazer o trabalho pesado, não se esqueça de que você está lendo um livro de Cálculo Numérico Computacional. . . e que você deve apresnder a escrever expressões formais que um computador possa ler e calcular. E, finalmente, deixe-me dizer-lhe, nos aviões comerciais, a fuselagem, é feita com este instrumento, e quase que todos os jogos eletrônicos tem splines por trás, portanto estamos diante de uma ferramenta que vale a pena ser entendida e dominada. Depois, passado o susto com a definição geométrica, você verá que o trabalho ficará com os programas...mas, temos que entender como fazer, para podermos escrever os programas. 37 Duas das cópias estão superpostas dando a impressão de que você dois retângulos com bases menores, mas é uma ilusão de ótica. 38 O autor escreveu os limites ±∞, propositadamente, para que você se intimidasse, verifique esta integral se limita ao intervalo [−0.5 + b, 0.5 + b] 39 não há porque escondermos a dificuldade, o “difı́cil” é apenas difı́cil, não impossı́vel, e apenas exige mais trabalho para dominar, somente isto. Como escalar um morro é difı́cil, e o segredo é saber e ter os meios... 146 CAPÍTULO 4. SPLINES Vamos calcular o resultado da convolução esboçada na figura (fig. 4.11), geometricamente. A sucessão de figuras (fig. 4.12) página 146, (um filme...) f f b a 0 0 cálculo de cálculo de f*X(a) posição inicial f*X(b) do retângulo b>a posição inicial do retângulo 0.5+b 0.5+a −0.5 +a −0.5+b f c 0 cálculo de posição inicial f*X(c) do retângulo c>b>a 0.5+c −0.5+c Figura 4.12: O significado geométrico de três valores lhe mostra o significado do produto de convolução calculado em três pontos diferentes. Observe que escolhemos uma função muito particular: χ[−0.5,0.5] Esta função tem integral 1 e temos a tendência de chamar tais funções de sinal, impulso unitário, núcleo. Vamos usar a palavra núcleo porque consideramos sinal outra coisa que não irá aparecer neste livro. As funções deste tipo, os núcleos, serão o instrumento que precisaremos quando fizermos produtos de convolução. O produto das duas funções no ponto a e no ponto b vai produzir resultados semelhantes. O quadradinho que representa a translação de χ[−0.5,0.5] para estes pontos, fica inteiramente imerso dentro do gráfico de f . E como o quadradinho 147 CAPÍTULO 4. SPLINES tem área 1, a integral do produto vai nos dar o valor médio da integral de f no intervalo de medida 1 (por causa da base do quadradinho) tendo como ponto médio a translação. Estamos discutindo: a<b<c ; f ∗ χ[−0.5,0.5] (a), f ∗ χ[−0.5,0.5](b), f ∗ χ[−0.5,0.5] (c) (4.148) (4.149) • [−0.5 + a, 0.5 + a] no caso de a • [−0.5 + b, 0.5 + b] no caso de b • [−0.5 + c, 0.5 + c] no caso de c isto é, em qualquer caso, f ∗ χ[−0.5,0.5] (x) é o valor médio de f no intervalo [−0.5 + x, 0.5 + x] porque a função caracterı́stica, χ[−0.5,0.5] , é positiva e tem integral 1. Retornando à f ∗ χ[−0.5,0.5] , como χ[−0.5,0.5] é uma função equilibrada em torno do ponto central do intervalo [−0.5, 0.5] então f ∗ χ[−0.5,0.5] (x) = f (x) (4.150) quando este valor existir, e no caso do ponto c é um valor que fica entre os extremos do salto que a função dá no ponto c. Veja o gráfico da convolução na figura (fig. 4.13) página 147, f c 0 Região de correção Figura 4.13: Correção pelo valor médio numa vizinhança de c A figura (fig. 4.13) chama sua atenção para uma região do gráfico em que a função f está sendo corrigida. Isto ocorre num intervalo de medida 1, (devido a base do quadradinho utilizado). Nesta figura você vê os gráficos de duas funções, a função f descontı́nua no ponto c e uma outra função f˜, contı́nua, que é igual a f fora do intervalo de correção. 148 CAPÍTULO 4. SPLINES Esta, f˜, é a proposta de correção da função descontı́nua, de que já falamos acima. Podemos corrigir a equação (eq. 150) escrevendo: f ∗ χ[−0.5,0.5] (x) = f˜(x) (4.151) A região de correção pode ter medida menor e alguns dos exercı́cios da lista que segue vão lhe mostrar isto: a região de correção pode ser arbitrariamente corrigida de modo que a função f˜ seja uma melhor aproximação para f . Exercı́cios 18 Média e núcleo 1. núcleos Faça os gráficos das funções abaixo e descubra o que há de comum entre elas do ponto de vista da integral. Você não precisa fazer todos os gráficos se descobrir a regra do jogo... χ[−0.5,0.5] 1 2 χ[−1,1] χ[0,1] χ[−1,0] 2χ[−0.25,0.25] 1 4 χ[−2,2] 2χ[0,0.5] 2χ[0.5,0] 3 1 1 2 χ[− 3 , 3 ] 1 10 χ[−5,5] 3 2 2 χ[0, 3 ] 3 χ 2 2 [− 3 ,0] 5χ[−0.1,0.1] 1 20 χ[−10,10] 1 20 χ[0,20] 1 χ 20 [−20,0] 2. Podemos classificar os núcleos definidos na questão anterior como (1) com tendência à esquerda, (2) com tendência à direita ou (3)equilibrados. Descubra quais ficam em cada uma dessas classes. 3. Para cada um dos núcleos apresentados no primeiro exercı́cio, indique a medida da respectiva região de correção que lhe está associada. 4. média viciada O gráfico seguinte representa f, f ∗ g em que g é um núcleo tendencioso (à direita, ou à esquerda). Decida qual é a tendência de g, analisando o gráfico Veja na figura (fig. 4.14) página 148, f f*g c 0 Cálculo de média com sinal tendencioso Figura 4.14: Média viciada Definição correta da convolução Esta é uma seção difı́cil, o que não significa que não seja para os comuns mortais. Aquilo que é difı́cil apenas exige mais esforço para ser adquirido. É preciso, 149 CAPÍTULO 4. SPLINES entretanto, salientar que, na prática do dia-a-dia, não será preciso estar com todas estas contas presentes. Ao final você vai encontrar a equação de um núcleo-splines cúbico que poderá registrar num arquivo, num pen-drive, e sair com ele por aı́ para usar quando precisar fazer convoluções, é uma contribuição deste livro para sua vida prática. ¡- forca uma parada do LaTeX Vamos definir o produto de convolução, e inicialmente escreveremos uma definição errada, acompanhando as idéias geométricas que desenvolvemos anteriormente. Logo veremos, com um cálculo algébrico, porque esta definição não serve e assim chegaremos à definição adequada da convolução. Na introdução geométrica que fizemos acima dissemos que o valor de f ∗ g no ponto a era obtido • translatando a função g de a e • calculando a integral do produto de f por esta translatada Precisamos de uma notação adequada para escrever tudo isto: • a translatada de g por a vamos chamar de ga e assim • a “transformação” translação tem uma equação curiosa: x 7→ ga (x) = g(x − a) (4.152) de modo que se você quiser translatar para direita, no sentido positivo do eixo OX então a > 0, por exemplo, g3 (x) = g(x − 3) translata a função g de três no sentido positivo de OX. Se g(0) = 0 então g3 (3) = 0. Faça as contas. • definição errada da convolução no ponto a é a 7→ f ∗ g(a) = Z∞ f (x)ga (x)dx (4.153) −∞ Observe que estamos calculando a integral sobre o conjunto mais amplo em que f esteja definida, a reta R. É possı́vel que esta equação não tenha sentido portanto se impõe uma verificação sobre quais as funções para as quais podemos calcular f ∗ g. Vamos logo responder parcialmente esta questão: para que funções vale a expressão (eq. 5 ) da convolução. Veja que, se a integral Z∞ f (x)dx (4.154) −∞ existir, e se g for a função caracterı́stica de um intervalo fechado, [α, β], então 150 CAPÍTULO 4. SPLINES f ∗ g(a) = R∞ = = −∞ R∞ R∞ f (x)ga (x)dx = (4.155) −∞ f (x)g(x − a)dx = (4.156) f (y + a)g(y)dy = (4.157) −∞ = Rβ f (y + a)g(y)dy (4.158) α e se f tiver integral finita sobre R então qualquer translação40 de f terá integral finita sobre qualquer intervalo da reta. Isto mostra a última é integral é finita para qualquer valor de a portanto f ∗ g está bem definida para qualquer que seja a ∈ R, quando g for uma função caracterı́stica de intervalo limitado. • Crı́tica da sucessão de equações Observe que a equação (eq. 158 ) sugere que a convolução não é comutativa. Aqueles que trabalharam com esta operação, anos atrás, observaram que uma pequena modificação definiria uma operação comutativa: R∞ g(a − x) dx = | {z } troca de sinal y = a − x =⇒ x = a − y =⇒ dx = −dy −∞ R − f (a − y)g(y)dy = (f ∗ g)(a) = R∞ −∞ f (x) (4.159) −∞ ∞ ∞ R (4.160) (4.161) f (a − y)g(y)dy = (4.162) g(y)f (a − y)dy = (g ∗ f )(a) (4.163) −∞ Isto nos leva à definição adequada da convlução Definição 5 Convolução f ∗ g(a) = Z∞ −∞ f (x)g(a − x)dx (4.164) quando esta integral existir. 40 uma propriedade da integral de Riemann, translação não alteram o valor da integral 151 CAPÍTULO 4. SPLINES • Análise do domı́nio de f ∗ g Vamos retomar a sequência de equações acima, agora com a definição correta da convolução em que g é a função caracterı́stica do intervalo [α, β] f ∗ g(a) = Z∞ f (x)g(a − x)dx (4.165) −∞ se uma das funções for integrável na reta e a outra for limitada, esta integral existe. Isto mostra que esta operação tem sentido, e logo veremos que há uma infinidade de funções que podem ser os operandos do produto de convolução. Demonstramos assim o teorema Teorema 9 Domı́nio de validade da convolução A convolução f ∗ g está bem definida se g for uma função caracterı́stica de um intervalo fechado e f tiver integral em qualquer intervalo fechado. Exemplo 12 Domı́nio da convolução Exemplos de funções para as quais podemos calcular f ∗ g são qualquer função contı́nua f se g for uma função caracterı́stica de um intervalo fechado. Podemos calcular a convolução de duas funções caracterı́stica de intervalos fechados. Nós voltaremos logo a esta questão, ampliando o conjunto de pares de funções para os quais podemos calcular a convolução. A convolução define uma nova função que nós estamos sugerindo que seja uma aproximação de f o que é inteiramente errado. Isto somente vai ser verdadeiro se a função g for um núcleo41 . Vamos discutir este detalhe logo a frente. 4.5.2 Funções a suporte compacto Vamos aqui entender o que controla a região de correção, já algumas vezes mencionada, e que estivemos todo tempo associando a base do quadradinho que fica deslizando sobre o gráfico da função. Você já deve ter percebido que esta função que usamos para calcular médias deve ter um aspecto do tipo que aparece na figura (fig. 4.15) página 152. Nos casos destes exemplos gráficos, existe um intervalo 0 ∈ [c, d] tal que, fora do intervalo [c, d] a função é nula. Este intervalo se chama de suporte do núcleo. Não é preciso que o suporte seja um intervalo limitado. 41 ou equivalente, um pulso unitário 152 CAPÍTULO 4. SPLINES núcleo equilibrado núcleo tendencioso à direita núcleo tendencioso à esquerda Figura 4.15: Núcleos ou pulsos unitários Exemplo 13 Núcleo tendo como suporte a reta 2 A função f (x) = e−x , chamada de gaussiana tem integral finita 2 √ g(x) = √1 f (x) 2 (4.167) g(x)dx = 1 (4.168) R∞ e−x dx = −∞ R∞ 2 (4.166) −∞ e assim a função g(x) = √12 f (x) é um núcleo tendo por suporte a reta R. Quer dizer que se usarmos g como núcleo para calcular uma convolução f ∗ g o resultado seria uma função muito semelhante a f mas a região de correção seria a reta inteira. Mesmo com este defeito, f ∗ g é uma boa aproximação de f. Usar um núcleo cuja região de correção se extenda ao espaço inteiro tem significado: se dilue o erro ao longo do espaço todo. Mas em geral não usamos a gaussiana para fazer aproximações porque ela introduziria outra complicação. Procuramos núcleos parecidos com os gráficos da figura (fig. 4.15) página 152, e vamos aqui ver como podemos construir tais núcleos. Os intervalos fechados e limitados são chamados intervalos compactos daı́ o tı́tulo desta seção, queremos núcleos com suporte compacto. 153 CAPÍTULO 4. SPLINES Observação 10 Domı́nio da convolução Podemos ampliar um pouco a resposta da questão do domı́nio de definição da convolução, ou, para que tipos de funções podemos calcular a convolução. Onde acima usamos função caracterśtica, agora podemos dizer funções a suporte compacto. Notação o suporte de f é designado42 por supp(f ). Um exemplo simples mostra como podemos construir núcleos com suporte compacto: Exemplo 14 Um núcleo com suporte compacto Considere f = χ[−0.5,0.5] e vamos calcular f ∗ f . Geometricamente podemos ver que se a translação for maior do que 1 em módulo, a convolução se anula, porque os dois retângulos não mais terão superposição, serão disjuntos. Faça um gráfico para se verificar isto. Como consequência temos x∈ / [−1, 1] =⇒ f ∗ f (x) = 0 e portanto o supp(f ∗f ) ⊂ [−1, 1]. Por outro lado, para qualquer translação cujo módulo seja menor do que 1, os dois retângulos terão superposição e assim a integral será diferente de zero. Verifique isto geométricamente, faça um gráfico. Consequentemente supp(f ∗ f ) = [−1, 1]. Vamos agora calcular f ∗ f , determinar sua equação. Prosseguiremos com o método geométrico. Observe que o parâmetro da função f ∗ g é a translação aplicada à função g x 7→ f ∗ f (x) = f ∗ f (x) = = R∞ −∞ 0.5 R −0.5 0.5 R −0.5 f (t)f (x − t)dt f (t)f (x − t)dt f (x − t)dt (4.169) (4.170) (4.171) y = x − t; dy = −dt; t = −0.5 =⇒ y = x + 0.5; t = 1 =⇒ y = x − 0.5 (4.172) x−0.5 x+0.5 R R f ∗ f (x) = − f (y)dy = f (y)dy (4.173) x+0.5 x−0.5 chegamos à equação (eq. 170) porque f é a função caracterı́stica do intervalo [−0.5, 0.5], logo, fora dele é nula, à equação (eq. 171) porque f é 1 sobre o intervalo [−0.5, 0.5], na equação (eq. 172) estamos preparando a “mudança de variável” que irá na simplificar a análise na equação (eq. 173). As hipóteses, 42 duas razões para usar “pp”, sup é para supremo, em inglês usamos supp para o suporte 154 CAPÍTULO 4. SPLINES que temos que fazer para calcular a integral na equação (eq. 173) são x + 0.5 < −0.5 f ∗ f (x) = 0 x+0.5 R dy x + 0.5 ∈ [−0.5, 0.5] f ∗ f (x) = −0.5 0.5 R (4.174) x − 0.5 ∈ [−0.5, 0.5] f ∗ f (x) = dy x−0.5 x − 0.5 > 0.5 f ∗ f (x) = 0 Podemos melhorar as premissas no conjunto de equações re-escrevendo-as como x < −1 f ∗ f (x) = 0 x ∈ [−1, 0] f ∗ f (x) = x + 0.5 − (−0.5) = x + 1 (4.175) f ∗ f (x) = 0.5 − (x − 0.5) = 1 − x x ∈ [0, 1] x>1 f ∗ f (x) = 0 e você pode ver o gráfico da convolução na figura (fig. 4.16) página 154. 0 −1 Figura 4.16: 1 quadrado de convolução da função caracterı́stica Observe! A convolução de duas funções descontı́nuas, resultou numa função contı́nua, f ∗ f . A convolução não existe para ser calculada à mão, e o cálculo acima mostra que ele pode ser bastante complicado, em geral, com muitas equações e hipóteses. Vamos ver isto no próximo exemplo. Mas o principal resultado deste exemplo é f ∗ f é um 1-splines. Estamos assim nos aproximando do objetivo do capı́tulo... e para melhorar o ânimo, no meio de tantas contas, vamos calcular f ∗ f ∗ f que podemos antecipar que será um 2-splines coisa que anteriormente dissemos que seria difı́cil de calcular manualmente. Exemplo 15 2-splines por convolução Queremos calcular f ∗ f ∗ f , e como o produto de convolução é associativo, temos f ∗ f ∗ f = f ∗ (f ∗ f ) = (f ∗ f ) ∗ f o que nos diz que vamos aproveitar o resultado do exemplo anterior. Preparando os cálculos, temos f ∗ (f ∗ f )(x) = = 0.5 R −0.5 R∞ −∞ f (t)f ∗ f (x − t)dt f (t)(f ∗ f )(x − t)dt (4.176) (4.177) 155 CAPÍTULO 4. SPLINES y = x − t; dy = −dt; t = −0.5 =⇒ y = x + 0.5; t = 0.5 =⇒ y = x − 0.5 (4.178) x−0.5 x+0.5 R R f ∗ (f ∗ f )(x) = − f ∗ f (y)dy = f ∗ f (y)dy (4.179) x+0.5 x−0.5 A razão da equação (eq. 177 ) é que o suporte de f é o intervalo [−0.5, 0.5], na equação (eq. 178 ) estamos fazendo os cálculos para mudança de variável, e finamente, como x−0.5 < x+0.5 invertemos os limites de integração e trocamos o sinal na equação (eq. 179 ). Agora recorremos a intuição gráfica para agilizar o método. A função f ∗ f tem quatro fases (quatro equações) e seu suporte é o intervalo [−1, 1] • antes de −1; • no intervalo [−1, 0] • no intervalo [0, 1] • depois de 1 que são os intervalos em que a equação de f ∗ f muda, e temos que interpretar a última integral em cada um desses casos, esta é a primeira análise x + 0.5 < −1 x + 0.5 ∈ [−1, 0] x + 0.5 ∈ [0, 1]; x − 0.5 ∈ [−1, 0] R0 x−0.5 x − 0.5 ∈ [0, 1] −1 f ∗ f (y)dy + R1 x−0.5 x − 0.5 > 1 Re-escrevendo as equações, temos: x < −1.5 x ∈ [−1.5, −0.5] x ∈ [−0.5, 0.5]; x − 0.5 ∈ [−1, 0] x ∈ [0.5, 1.5] x > 1.5 f ∗ f ∗ f (x) = 0 x+0.5 R f ∗ f (y)dy x+0.5 R 0 f ∗ f (y)dy f ∗ f (y)dy f ∗ f ∗ f (x) = 0 R0 (4.180) f ∗ f ∗ f (x) = 0 x+0.5 R (y + 1)dy −1 (y + 1)dy + x−0.5 x+0.5 R 0 R1 x−0.5 (1 − y)dy (1 − y)dy f ∗ f ∗ f (x) = 0 (4.181) 156 CAPÍTULO 4. SPLINES com a devida interpretação de f ∗ f . Calculando as integrais temos: x < −1.5 f ∗ f ∗ f (x) = 0 (x+ 23 ) x ∈ [−1.5, −0.5] 2 3 x ∈ [−0.5, 0.5] − x2 4 3 (x− 2 ) x ∈ [0.5, 1.5] 2 x > 1.5 f ∗ f ∗ f (x) = 0 (4.182) Para simplificar a notação, vamos chamar g = f ∗ f ∗ f . Queremos verificar se g é contı́nuamente derivável, de clase C 1 : uma polinomial de grau 2 de classe C1. • Primeiro a continuidade, o que basta verificar os valores de cada uma das equações nos extremos dos intervalos onde elas estão definidas. – g(−1.5) = 0 à direita e à esquerda ! (−0.5+ 3 )2 2 – g(−0.5)− = = 0.5 à esquerda, e à direita g(−0.5)+ = 2 3 −(−0.5)2 = 0.5 e as duas equações coı̈ncidem à direita e à esquerda 4 ! – g(0.5)− = 43 −(0.5)2 = 0.5 à esquerda, e à direita g(0.5)+ = 0.5 as duas equações coı̈ncidem à direita e à esquerda ! (0.5− 32 )2 2 = – g(1.5) = 0 à direita e à esquerda ! e provamos que g é contı́nua. Verificando que a derivada é contı́nua. • g ′ (−1.5)+ = 2x+3 2 |−1.5 = 0 coı̈ncidindo à direita e à esquerda ! ′ • g ′ (−0.5)− = 2x+3 2 |−0.5 = 1 g (−0.5)+ = −2x|−0.5 = 1 coı̈ncidindo à direita e à esquerda ! • g ′ (0.5)− = −2x|0.5 = −1 g ′ (0.5)+ = e à esquerda ! • g ′ (1)− = 2x−3 2 |1.5 2x−3 2 |0.5 = −1 coı̈ncidindo à direita = 0 coı̈ncidindo à direita e à esquerda ! Verificamos assim que g é contı́nua e que g ′ é também contı́nua, portanto g é de classe C 1 sendo uma polinomial do segundo grau, portanto um 2 − splines. O gráfico de g = f ∗ f ∗ f é formado de tres segmentos de parb́ola tangentes duas a duas no ponto (−0.5, g(−0.5)) e no ponto (0.5, g(0.5)). As parábolas externas são tangentes ao eixo OX e você pode ver o gráfico de g, feito à mão, na figura (fig. 4.17) página 166. Na mesma figura você pode ver o gráfico, feito com Gnuplot, das tres parábolas, e usando os comandos do Gnuplot g(x)= (x<-1.5)?0:x<-0.5?0.5*(x+3.0/2.0)**2: x<0.5?0.75-x**2:x<1.5?0.5*(x-3.0/2.0)**2:0 set xrange [-1.5:1.5] plot g(x),0 você pode obter o terceiro gráfico que também aparece na referida figura. Observe a “barra invertida” na linha em 157 CAPÍTULO 4. SPLINES que se inicia a definição de g(x) dentro do Gnuplot. Ela serve para lhe permitir escrever uma fórmula que se expanda por mais de uma linha. Terminando a linha com a “barra invertida”, evita que Gnuplot leia um fim de linha e assim uma fórmula pode ser escrita em diversas linhas. Observando, dos exemplos que duramente desenvolvemos, que ao fazer uma convolução a polinomial aumenta de um grau assim como a classe de continuidade. Isto é verdade mas a demonstração é muito difı́cil e vamos apenas enunciar o resultado sem demonstrá-lo, para uma demonstração leia o artigo [21]. Teorema 10 Núcleos n-splines A enésima potência de convolução da função caracterı́stica do intervalo [−0.5, 0.5] é um (n-1)-splines a suporte compacto, positivo, com área 1. Portanto um núcleo (n-1)-splines. Nas aplicações nos contentamos com 3-splines, os splines cúbicos, que dão tı́tulo a esta seção. Exercı́cios 19 Splines a suporte compacto 1. splines cúbico Partindo do exemplo do núcleo 2-splines, construa um núcleo 3-splines (splines cúbico). 2. escala e núcleo (a) Chame g ao 2-splines construido no exemplo (ex. 15). Considere a seguinte operação: ga (x) = ag(ax) e verifique a identidade Z∞ ga (x)dx = −∞ Z∞ g(x)dx = 1 −∞ para todo número real a 6= 0. (b) Faça o gráfico de g2 , g3 , g4 , g 31 sugestão use gnuplot para fazer estes gráficos. 3. splines cúbico - formato arbitrário (a) Faça o gráfico da função x < −4 x+8 x ∈ [−4, −1] −2 x ∈ [−1, −0.5] 1 x ∈ [−0.5, 1] |2x| x ∈ [1, 4] 2 (b) Amacie a função cujo gráfico foi feito no item anterior, multiplicandoa por convolução, sucessivamente, pelos núcleos g2 , g3 , g4 e faça um laudo do resultado. 158 CAPÍTULO 4. SPLINES 4.6 Solução de alguns exercicios 1. (ex. 8) página 121 Analisando o máximo de |P | e de |P ′ | no intervalo [−a, a]; a > 0 em que se encontram as raı́zes, temos |P ′ (x)| = |x + a + x − a| = 2|x| ≤ 2|a| ′ M ax(|P |) = 2|a| M ax|P | = a2 ≤ 2|a| =⇒⇐= |a| ≤ 2 (4.183) (4.184) (4.185) Se fizermos uma translação neste gráfico43 a equação de P será P (x) = (x − a)(x − b) em que a, b são as duas raizes do polinômio. Da parte anterior do problema deduzimos que a distância entre as raı́zes é no máximo 4 para que a desigualdade se dê, portanto se |a − b| ≤ 4 2. (ex. 9) página 121 O máximo módulo de P ′ se dá no ponto médio das raı́zes ou nos extremos do intervalo [−1, 1]. Calculando estes tres valores encontramos |P ′ (−1)| = 2 = |P ′ (1)|; |P ′ (0)| = 1 logo o módulo máximo de P ′ é 2. O módulo máximo da função do terceiro grau Pq, sobre o intervalo em que ela tem raı́zes, se dá nas raı́zes da derivada: ± 13 e vale, em módulo r 1 1 ( − 1) = 3 3 r 12 <2 33 demonstrando o que desejavamos. 3. (ex. 10) página 121 4. Polinômio interpolando pontos no plano 5. (ex. 11g) página 122 P(x) = P1(x)= P2(x)= P3(x)= P4(x)= P5(x)= 43 movimento (x+3)*(x+2.5)*(x+1.5)*(x+0.5)*(x-0.5)*(x-1.5)*(x-2.5)*(x-3) (x+2.5)*(x+1.5)*(x+0.5)*(x-0.5)*(x-1.5)*(x-2.5)*(x-3) (x+3)*(x+1.5)*(x+0.5)*(x-0.5)*(x-1.5)*(x-2.5)*(x-3) (x+3)*(x+2.5)*(x+0.5)*(x-0.5)*(x-1.5)*(x-2.5)*(x-3) (x+3)*(x+2.5)*(x+1.5)*(x-0.5)*(x-1.5)*(x-2.5)*(x-3) (x+3)*(x+2.5)*(x+1.5)*(x+0.5)*(x-1.5)*(x-2.5)*(x-3) rı́gido, não altera as proporções no gráfico CAPÍTULO 4. SPLINES 159 P6(x)= (x+3)*(x+2.5)*(x+1.5)*(x+0.5)*(x-0.5)*(x-2.5)*(x-3) P7(x)= (x+3)*(x+2.5)*(x+1.5)*(x+0.5)*(x-0.5)*(x-1.5)*(x-3) P8(x)= (x+3)*(x+2.5)*(x+1.5)*(x+0.5)*(x-0.5)*(x-1.5)*(x-2.5) dP(x)= P1(x)+ P2(x)+ P3(x)+ P4(x)+ P5(x)+ P6(x)+ P7(x)+ P8(x) set xrange [-3:3] plot P(x),dP(x),0 f(x) = P1(x)/dP(-3) + P2(x)/dP(-2.5) + P3(x)/dP(-1.5)+\ P4(x)/dP(-0.5)+P5(x)/dP(0.5) + P6(x)/dP(1.5) + P7(x)/dP(2.5)+\ P8(x)/dP(3) plot f(x),0 g(x) = (x**2 - 9)*sin(2*x) h(x) = g(-3)*P1(x)/dP(-3) + g(-2.5)*P2(x)/dP(-2.5)+\ g(-1.5)*P3(x)/dP(-1.5) + g(-0.5)*P4(x)/dP(-0.5)+\ g(0.5)*P5(x)/dP(0.5) + g(1.5)* P6(x)/dP(1.5)+\ g(2.5)*P7(x)/dP(2.5) + g(3)*P8(x)/dP(3) plot h(x),g(x),0 P(x) = (x+7)*(x+2.5)*(x+1.5)*(x+0.5)*(x-0.5)*(x-1.5)*(x-2.5)*(x-7) P1(x)= (x+2.5)*(x+1.5)*(x+0.5)*(x-0.5)*(x-1.5)*(x-2.5)*(x-7) P2(x)= (x+7)*(x+1.5)*(x+0.5)*(x-0.5)*(x-1.5)*(x-2.5)*(x-7) P3(x)= (x+7)*(x+2.5)*(x+0.5)*(x-0.5)*(x-1.5)*(x-2.5)*(x-7) P4(x)= (x+7)*(x+2.5)*(x+1.5)*(x-0.5)*(x-1.5)*(x-2.5)*(x-7) P5(x)= (x+7)*(x+2.5)*(x+1.5)*(x+0.5)*(x-1.5)*(x-2.5)*(x-7) P6(x)= (x+7)*(x+2.5)*(x+1.5)*(x+0.5)*(x-0.5)*(x-2.5)*(x-7) P7(x)= (x+7)*(x+2.5)*(x+1.5)*(x+0.5)*(x-0.5)*(x-1.5)*(x-7) P8(x)= (x+7)*(x+2.5)*(x+1.5)*(x+0.5)*(x-0.5)*(x-1.5)*(x-2.5) dP(x)= P1(x)+ P2(x)+ P3(x)+ P4(x)+ P5(x)+ P6(x)+ P7(x)+ P8(x) set xrange [-7:7] plot P(x),dP(x),0 f(x) = P1(x)/dP(-7) + P2(x)/dP(-2.5) + P3(x)/dP(-1.5)+\ P4(x)/dP(-0.5)+P5(x)/dP(0.5) + P6(x)/dP(1.5) + P7(x)/dP(2.5) +\ P8(x)/dP(7) plot f(x),0 g(x) = (x**2 - 9)*sin(2*x) h(x) = g(-7)*P1(x)/dP(-7) + g(-2.5)*P2(x)/dP(-2.5)+\ g(-1.5)*P3(x)/dP(-1.5) + g(-0.5)*P4(x)/dP(-0.5)+\ g(0.5)*P5(x)/dP(0.5) + g(1.5)* P6(x)/dP(1.5)+\ g(2.5)*P7(x)/dP(2.5) + g(7)*P8(x)/dP(7) plot h(x),g(x),0 6. (ex. 1) página 126 (a) Coloque no arquivo “dados” os pares de pontos (xk , yk ). -3 0 -2.5 1 160 CAPÍTULO 4. SPLINES -1.5 -1 -0.5 -2 0.5 -3 1.5 -1 2.5 2 3 0 observe que xk e yk ficam separados por espaço, e cada par fica em uma única linha. Depois, chame Gnuplot e execute set pointsize 0.1 ## definir a expessura da linha plot 0, "dados" with lines ## o nome do arquivo entre aspas Se você estiver lendo este arquivo eletronicamente (em pdf), “cortar e colar” funciona com Gnuplot. (b) Em cada intervalo a função f está definida por uma equação do primeiro grau fk y = b + m(x − a) equação da reta por (a, b); fk (x) = yk + mk (x − xk ); k+1 −yk ; x ∈ [xk , xk+1 ] mk = ∆k = xyk+1 −xk (4.186) (4.187) (4.188) (4.189) Basta agora, para cada inteiro n, encontrar n ∈ [xk , xk+1 ]. Por exemplo n ∈ [xk , xk+1 ] 1 ∈ [0.5, 1.5] = [x4 , x5 ] f4 (x) = y4 + m4 (x − x4 ) (4.190) (4.191) (4.192) f4 (x) = −3 + 2(x − 0.5) ; f (1) = −3 + 2(1 − 0.5) = −2(4.193) A definição de f num algoritmo de computador é float fl(float x) { float m,a1,b1,a2,b2; if (x < -2.5) {a1= -3; b1=0; a2=-2.5; b2=1; m = (b2 - b1)/(a2 -a1); return m*(x - a1) + b1; } if (x < -1.5) {a1= -2.5; b1=1; a2=-1.5; b2=-1; m = (b2 - b1)/(a2 -a1); return m*(x - a1) + b1; } if (x < -0.5) 161 CAPÍTULO 4. SPLINES {a1= -1.5; b1=-1; a2=-0.5; b2=-2; m = (b2 - b1)/(a2 -a1); return m*(x - a1) + b1; } if (x < 0.5) {a1= -0.5; b1=-2; a2=0.5; b2=-3; m = (b2 - b1)/(a2 -a1); return m*(x - a1) + b1; } if (x < 1.5) {a1= 0.5; b1=-3; a2=1.5; b2=-1; m = (b2 - b1)/(a2 -a1); return m*(x - a1) + b1; } if (x < 2.5) {a1= 1.5; b1=-1; a2=2.5; b2=2; m = (b2 - b1)/(a2 -a1); return m*(x - a1) + b1; } if (x < 3) {a1= 2.5; b1=2; a2=3; b2=0; m = (b2 - b1)/(a2 -a1); return m*(x - a1) + b1; } else return(0.0); } 7. (ex. 1) página 126 Será possı́vel encontrar polinômios do terceiro grau em cada intervalo Ik = [ak , ak+1 ] porque temos quatro dados em cada um deles: fk (x) = a1,k + a2,k (x − xk ) + a3,k (x − xk )2 + a4,k (x − xk )3 fk (xk ) = yk = a1,k ′ fk (xk ) = dk fk (xk+1 ) = yk+1 ′ fk (xk+1 ) = dk+1 a1,k + a2,k (x − xk ) + 8. (ex. 2) página 126 A figura (fig. 4.18) página 167, mostra, comparativamente, a aproximação polinomial clássica, de Lagrange com a aproximação polinomial por pedaços. 162 CAPÍTULO 4. SPLINES Neste exemplo escolhemos os pontos de precisão x1 = −7, x2 = −5, x3 = −3.0, x4 = −1, x5 = 1, x6 = 3, x7 = 5, x8 = 7; e estamos aproximando a função h(x) = (x ∗ x − 9) ∗ sin(x) no intervalo [−7, 7]. A escolha dos nós foi feita de forma a salientar a fragilidade da aproximação polinomial de Lagrange uma vez que a distância entre os dois primeiros nós e os dois últimos nós é grande. Se a distância entre os nós for pequena, e uniforme, a aproximação polinomial de Lagrange tem um desempenho melhor, como se pode Veja na figura (fig. 4.19) página 168. em que usamos os nós x1 = −3.0, x2 = −2.0, x3 = −1.0, x4 = 0.0, x5 = 1.0, x6 = 2.0, x7 = 3.0, x8 = 4.0 e estamos aproximando a função h(x) = (x ∗ x − 9) ∗ sin(x) no intervalo [−3, 4]. A aproximação melhora na medida em que a malha ficar mais fina, e consquentemete o polinômio de mais alto grau o que torna o método, computacionalmente, ineficiente. 9. (ex. 2) página 157 (a) R∞ ga (x)dx = (4.200) ag(ax)dx = (4.201) ag(ax)d(ax) = (4.202) −∞ R∞ 1 a −∞ R∞ −∞ R∞ a g(ax)d(ax) = a −∞ R∞ a g(y)d(y) = a −∞ R∞ g(y)d(y) −∞ (b) Com Gnuplot defina g(x)= (x<-1.5)?0:x<-0.5?0.5*(x+3.0/2.0)**2: x<0.5?0.75-x**2:x<1.5?0.5*(x-3.0/2.0)**2:0 (4.203) (4.204) (4.205) CAPÍTULO 4. SPLINES 163 a=2;b=3;c=4; h1(x)=a*g(a*x); h2(x)=b*g(b*x); h3(x)=c*g(c*x); plot g(x), h1(x),h2(x),h3(x),0 10. (ex. 3) página 157 Figura (fig. 4.20) página 168, (a) Faça o gráfico da função x < −4 x+8 x ∈ [−4, −1] −2 x ∈ [−1, −0.5] 1 x ∈ [−0.5, 1] |2x| x ∈ [1, 4] 2 (b) Amacie a função cujo gráfico foi feito no item anterior, multiplicandoa por convolução, sucessivamente, pelos núcleos g2 , g3 , g4 e faça um laudo do resultado. 4.7 Vocabulário correç~ ao da informaç~ ao, scilab • correção da informação Vamos dar aqui um exemplo ilustrativo sobre a correção da informação. Observe o seguinte texto: Mituo isneterasstne De aorcdo com uma pqsieusa de uma uinrvesriddae ignlsea, não ipomtra em qaul odrem as lrteas de uma plravaa etãso, a úncia csioa iprotmatne é que a piremria e útmlia lrteas etejasm no lgaur crteo. O rseto pdoe ser uma bçguana ttaol que vcoê pdoe anida ler sem pobrlmea. Itso é poqrue nós não lmeos cdaa lrtea isladoa, mas a plravaa cmoo um tdoo. Mutitu isneterassten De aorcod com uma pqsieuas de uma uinrvesriddea ignlsae, não ipomtar em qaul odrem as lrtesa de uma plravaa etãso, a úncai csioa iprotmaten é que a piremrai e útmlai lrtesa etejams no lgaru crtoe. O rseto pdoe ser uma bçguaan ttalo que vcoê pdoe anida ler sem pobrlmae. Itso é poqreu nós não lmeos cdaa lrtea isladoa, mas a plravaa cmoo um tdoo. O texto explicou mal. A razão é outra, é um caso de correção da informação que vou agora explicar. CAPÍTULO 4. SPLINES 164 É que ao lermos, não lemos! Comparamos as palavras com as que temos em nosso banco de dados e compomos a informação usando uma amostragem da informação. Quem lê devagar, de fato lê. Quem lê rápido, faz esta amostragem e compõe a informação. Quem lê rápido, nem siquer lê palavras, lê frases inteiras, e novamente, não lê, analisa o conjunto das palavras, seleciona no banco de dados o que dá certo para colocar naquele conjunto, e percebe a informação. Claro, esta rapidez pode ter seus contra-pontos, é possı́vel rapidamente adquirir o centro da idéia, porém perder detalhes. O leitor rápido pode num relance compreender, do texto, que “brigaram o homem e a mulher”, mas pode não perceber que foi o “seu irmão com a mulher dele”... se alguém lhe perguntar depois pelo conteúdo do texto, responderia: - Brigaram! e se o interlocutor insistisse na pergunta: - Quem brigou, com quem? responderia: - Sei lá! A inmaforção foi rbidecea, mas ptare dela se pdeeru pquore o ltoeir anapes abvsoreu patre do prcaedido e paert do pratiedicvo na oração. Se o astsuno de fato lhe chssamae atçãeno, voriltaa e se ceicartifria de pater dos dados pedordis. Qudano, num tetxo, a infaormção for retipeda e abdaunnte, etsa leuitra rádpia é saftisatória pourqe, com a amraostgem, o leoitr abrsove toda a inmaforção imtapornte. Qunado o tetxo é coincso, sórbio, téicnco, a letiura temrina sedno mias letna poqrue a amotsragem se reevla impfereita, o letior obesrva que não está cogunseindo coeemprnder e, natlmuraente, psasa a faezr uma amraostgem mais fina, teirmna ledno. . . A informação foi recebida, mas parte dela se perdeu porque o leitor apenas absorveu parte do predicado e parte do predicativo na oração. Se o assunto de fato lhe chamasse atenção, voltaria e se certificaria de parte dos dados perdidos. Quando, num texto, a informação for repetida e abundante, esta leitura rápida é satisfatória porque, com a amostragem, o leitor absorve toda a informação importante. Quando o texto é conciso, sóbrio, técnico, a leitura termina sendo mais lenta porque a amostragem se revela imperfeita, o leitor observa que não está conseguindo compreender e, naturalmente, passa a fazer uma amostragem mais fina, termina lendo. . . • scilab é um programa para resolver questões de Álgebra Linear, computacionalmente, distribuido sob GPL. É semelhante a um programa comercial também dedicado à Álgebra Linear. Pode ser obtido na internet, [23]. CAPÍTULO 4. SPLINES • • 165 166 CAPÍTULO 4. SPLINES −1 5 0 1 f1(x) f2(x) f3(x) 0 4 3 2 1 0 −1 −2 −1.5 −1 −0.5 0 0.5 1 1.5 2−spline a suporte compacto 0.8 g(x) 0 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 −1.5 −1 −0.5 0 Figura 4.17: 0.5 2-splines 1 1.5 167 CAPÍTULO 4. SPLINES 40 "polped" "lagrange" "precisao" "XOY" 30 20 10 0 -10 -20 -30 -40 -8 -6 -4 Figura 4.18: -2 0 2 4 Comparação: polinômio de Lagrange e splines 6 8 168 CAPÍTULO 4. SPLINES 8 "polped" "lagrange" "precisao" "XOY" 6 4 2 0 -2 -4 -6 -8 -3 -2 -1 0 1 2 3 4 Figura 4.19: Comparação: polinômio de Lagrange e splines - quando os nós ficam uniformente próximos. 4 ’data1’ ’data2’ 3 2 1 0 −1 −2 −6 −4 −2 Figura 4.20: 0 2 Regularização por convolução 4 6 Capı́tulo 5 Integração aproximada O objetivo deste capı́tulo é o de apresentar-lhe dois métodos para o cálculo aproximado da integral Zb f (x)dx a Vou começar com as somas de Riemann que, embora não seja o método conduzindo a melhor aproximação, é o mais simples e é usado em diversas situações em que se deseje rapidamente avaliar a integral. Depois vou discutir uma variante da soma de Riemann - regra do trapésio. Embora o método não seja eficiente e nós lhe vamos mostrar na segunda parte do capı́tulo um que é eficiente, as idéias básicas das somas de Riemann estarão presentes posteriormente: partição, varredura, malha. Finalmente vou mostrar como podemos aplicar o assunto do capı́tulo 4 no cálculo aproximado de integrais. Este método, sim, é de alta precisão e muito otimizado. É possı́vel que o leitor, ou o professor, sinta a falta do método Simpson entre os processos para o cálculo aproximada da integral. De fato ele está sendo omitido aqui uma vez que podemos mostrar coisa melhor que é o uso dos splines, afinal não seria somente o método de Simpson que estaria faltando, num livro como este temos que escolher, selecionar material para que não transformá-lo num tratado enciclopédico, alguns destes tratados estão na bibliografia. Se você fez um bom curso de Cálculo, estudou integral no sentido de Riemann e portanto as somas de Riemann. Parte do material deste capı́tulo será uma amena revisão para você, esperamos. 169 170 CAPÍTULO 5. INTEGRAL APROXIMADA 5.1 Integral no sentido de Riemann Neste capı́tulo discutimos a integral de forma intuitiva e geométrica fazendo, inicialmente, uma revisão concentrada daquilo que se faz em Cálculo Diferencial e Integral mas voltados para o nosso objetivo que é o cálculo numérico de integrais. Começamos por descrever, com alguma simplicidade, o método de integração, atribuido ao matemático alemão, Bernard Riemann, as somas de Riemann, como aproximação para o cálculo da integral e daı́ derivaremos os métodos tı́picos desta disciplina que logo o leitor verá que é uma aplicação da aproximação polinomial. 5.1.1 Integração geométrica. Vamos começar calculando aproximadamente várias integrais para tornar “mecânico” o uso da “soma de Riemann” como método de aproximação de integrais. Neste livro a integral representa a área algébrica delimitada pelo gráfico de uma função f entre dois pontos dados de seu domı́nio. Veja a interpretação geométrica na figura (fig. 5.1) página 172. Rb Esta é a forma de se interpretar a integral no Cálculo: o sı́mbolo f representa esta área a limitada pelo gráfico de f e o eixo OX desde x = a até x = b. A lista de exercı́cios deve ser entendida como um laboratório para relembrar conhecimentos que o aluno deveria ter, o que nem sempre é verdadeiro. Um aluno que considere um exercı́cio trivial, simplesmente deve ignorá-lo e passar para o seguinte, apenas tendo o cuidado de ter a certeza de que não fez um julgamento apressado. Exercı́cios 20 Cálculo aproximado da integral 1. Represente geométricamente as seguintes integrais: R3 R3 R0 a) 4 b) 4 c) 4 d) g) j) −3 R3 2x −3 R10 −3 R3 e) 2x + 3 h) x+4 −3 R3 m) k) x2 + 2x + 1 n) 0 R3 2x −2 R10 −1 R3 0 R3 0 −3 3 f) 2x − 3 i) x−4 l) 1 − x2 o) R3 2x 0 −3 R 3 R0 −3 R0 3 3 − 2x 4−x x2 − 4 2. Calcule as integrais, que você souber calcular, dentre as indicadas na questão anterior. 3. Calcule aproximadamente as integrais. a) R3 −3 x2 + 2x + 1 b) R3 0 1 − x2 c) R3 −3 4 − x2 CAPÍTULO 5. INTEGRAL APROXIMADA 171 Sugestão aproxime por falta ou por excesso as áreas com retângulos, triângulos ou trapésios, conforme for conveniente, e aumente a precisão dos resultados usando uma máquina de calcular ou um programa de computador. 5.1.2 Expressão formal do cálculo da integral Nós ainda não sabemos calcular as integrais: R3 −3 x2 + 2x + 1 (5.1) R3 1 − x2 (5.2) x2 − 4 (5.3) 0 R3 −3 e agora vamos ver como isto se faz, aproximadamente. Área aproximada usando retângulos As integrais, (eq. 1), (eq. 2) e (eq. 3), representam as áreas de regiões limitadas por contornos não retilı́neos. Você já foi convidado, em exercı́cio anterior, a representar geometricamente estas integrais. Neste momento tudo que podemos fazer é calcular estas áreas aproximadamente, este método está representado na figura (fig. 5.1) página 172 e será discutido em detalhe mais abaixo, mas é assunto que você pode encontrar discutido em profundidade nos cursos de Cálculo. Uma saı́da, para obter uma aproximação de integrais como Z3 x2 + 2x + 1 (5.4) −3 representando a área de regiões com contornos curvilı́neos, consiste em subdividir a região que elas representam com retângulos, triângulos ou trapésios e calcular a soma das áreas destas figuras: Veja na figura (fig. 5.1) página 172, Você logo deve se convencer de que não há ganho especial em trabalhar com tantas figuras. Usando apenas retângulos podemos obter alta precisão, desde que a base dos retângulos seja pequena, e este objetivo poderá ser alcançado com um programa de computador, não com cálculos manuais. Veja, por exemplo, a área de um trapésio é a média aritmética entre as áreas de dois retângulos, um com a altura máxima do trapésio, e o outro com a altura mı́nima do trapésio, supondo que o trapésio tenha duas alturas. Analise as figuras (fig. 5.4), página 190. 172 CAPÍTULO 5. INTEGRAL APROXIMADA f b a Figura 5.1: Trapésios para aproximar área Isto mostra que o cálculo da área usando trapésio pode ser obtido com a média aritmética dos cálculos feitos usando, retângulos por excesso e retângulos por falta. Depois, um triângulo é apenas um tipo particular de trapésio... Então vamos nos concentrar no cálculo com retângulos, para encontrar a área aproximada das integrais e nos preocupar em obter este resultado com precisão máxima diminuindo a base dos retângulos. Se convença do que foi dito fazendo alguns gráficos. Somas de Riemann Para calcular aproximadamente Rb f podemos subdividir a região em triângulos, a retângulos ou trapésios, conforme a conveniência ou de acordo com as possibilidades geométricas da figura. Mas já observamos que não se ganha muito com este detalhe, muito mais se ganha na quantidade de subdivisões1 , e, naturalmente com o uso de um programa de computador. Mas a principal razão de usarmos retângulos é a de que podemos obter uma expressão algébrica simples para a soma das área dos retângulos e depois aplicá-la num programa de computador. A expressão algébrica que se presta, facilmente, para utilizar num programa é uma soma de Riemann. As somas de Riemann usam exclusivamente retângulos. Para obter os retângulos, se subdivide o intervalo [a, b] em n sub-intervalos, veja na figura (fig. 5.2) página 173, a sugestão gráfica de como fazer isto. as subdivisões não precisam ser irregulares, como é o caso da (fig. 5.2), elas podem ser os nós de uma partição . uniforme e assim satisfazer a uma progressão aritmética de razao ∆x = b−a n 1 em outras palavras, ao usarmos subintervalos cada vez menores 173 CAPÍTULO 5. INTEGRAL APROXIMADA f b a [a,b] Figura 5.2: Soma de Riemann Este valor ∆x é também o tamanho, (medida), da base de cada um dos subintervalos. Vamos adotar este caso particular de partição, chamada de partição uniforme, e o leitor pode consultar um livro de Cálculo para verificar que se a integral existir, o valor dela independe do tipo de partição que se escolher para o Cálculo das somas de Riemann. Os nós da partição (malha) são: a, a + ∆x, a + 2∆x, a + 3∆x, · · · a + k∆x, · · · , a + (n − 1)∆x = b − ∆x (5.5) Aqui faremos mais uma simplificação no método. Falamos anteriormente de área por excesso e área por falta. Mas queremos calcular integrais automaticamente e assim não desejamos analisar o gráfico para escolher a área por excesso ou por falta. Seguiremos assim o exemplo da figura (fig. 5.2) na qual você pode ver que alguns retângulos representam a área por excesso e outros por falta. CAPÍTULO 5. INTEGRAL APROXIMADA 174 Convidamos a que você faça um exercı́cio: Exercı́cio 1 Área por falta ou por excesso 1. Verificar que os quatro primeiros retângulos na (fig. 5.2) representam uma aproximação por excesso. 2. Verificar que os retângulos quinto e sexto na (fig. 5.2) representam uma aproximação por falta da área. 3. Verificar que os retângulos, sétimo, oitavo e nono, na (fig. 5.2) representam uma aproximação por falta e que o décimo aproxima por excesso a área. Se você não concordou com a veracidade das afirmações contidas nos exercı́cios acima, é porque, talvez, você não tenha observado que há alguns retângulos com área nula (altura nula), volte a análisar os exercı́cios munido desta nova informação. Vamos agora passar a expressão formal da soma de Riemann. Soma de Riemann Considere agora a figura (fig. 5.2) página 173. Estipulamos um tamanho ∆x para a base dos retângulos e cobrimos a área algumas vezes por excesso, outras vezes por falta. Para isto consideramos a progressão aritmética a + k∆x; k = 0, 1, ... (5.6) e o último retângulo ficou extrapolando o intervalo de integração [a, b]. Para evitar que isto aconteça temos que • calcular ∆x usando a medida do intervalo [a, b] e • um número de divisões, um número inteiro escolhido: ∆x = b−a n A progressão aritmética obtida com esta razão ∆x vai fazer de b = a + n∆x, o último termo da p.a. de modo que o último retângulo escolhido corresponde ao subintervalo [a + (n − 1)∆x, a + n∆x] = [b − ∆x, b] (5.7) Existe uma notação prática que esconde a expressão dos termos da progressão aritmética, mas que sabemos qual é, de forma implı́cita. Usamos x0 = a = a + 0∆x; xk = a + k∆x; xn = b = a + n∆x; (5.8) (5.9) (5.10) CAPÍTULO 5. INTEGRAL APROXIMADA 175 Agora podemos escrever a expressão da soma dos retângulos: Zb a f≈ n−1 X f (xk )∆x = n−1 X f (a + k∆x)∆x (5.11) k=0 k=0 a segunda formulação é apropriada para programas de computação, a primeira é mais resumida e própria para escrever em textos de Matemática. Com este cálculo do ∆x evitamos que haja um retângulo a mais ou a menos na cobertura da área representada pela integral que é o defeito apresentado na (fig. 5.2). Observe que o último “nó” não é b, mas sim ‘b − ∆x”. Para cada um dos subintervalos, consideraremos a altura f (a + k∆x) = f (xk ) em que k varia desde 0 até n − 1 : f (a), f (a + ∆x), f (a + 2∆x), · · · f (a + k∆x), · · · , f (a + (n − 1)∆x). (5.12) Quer dizer que os retângulos tem por área: f (a)∆x, f (a + ∆x)∆x, f (a + 2∆x)∆x, · · · f (a + (n − 1)∆x)∆x (5.13) A soma destas áreas é o valor aproximado da integral, agora não sabemos se é por falta ou por execesso, mas, com certeza é um valor médio, entre o cálculo por excesso e o cálculo por falta. Experimente as funções riemann(), riemann grafun() no arquivo riemann.py. Digite python riemann.py depois de editar o arquivo. Vejas as últimas linhas do arquivo riemann.py que trazem instruções de como usar o programa. Não se preocupe em entender o programa, agora. Volte a ler o programa em outras ocasiões, ao longo do capı́tulo. Definição 6 Soma de Riemann Considere o intervalo [a, b] e uma função que seja integrável neste intervalo. Definimos uma soma de Riemann, de ordem n2 , associada a uma partição uniforme3 2 ordem 3 Já x0 = a .. . (5.14) xk = a + k∆x .. . (5.16) xn−1 = a + (n − 1)∆x = b − ∆x b = a + n∆x (5.18) (5.19) (5.15) (5.17) n porque representa a soma de n parcelas dissemos que as partições não precisam ser uniforme, estamos fazendo uma escolha. 176 CAPÍTULO 5. INTEGRAL APROXIMADA como Sn (f ) = n−1 X f (a + k∆x)∆x. (5.20) k=0 Observe que em todos os retângulos consideramos a altura dada pelo primeiro extremo do correspondente subintervalo. Quer dizer que, no intervalo [xk , xk+1 ] = [a + k∆x, a + (k + 1)∆x] a altura considerada é f (xk ). Poderiamos ter usado o segundo extremo obtendo a fórmula Sn (f ) = n X f (a + k∆x)∆x. (5.21) k=1 que você deve se convencer de que representa uma aproximação equivalente da integral. Dissemos equivalente, os valores não são iguais, faça as contas e veja. Mas o erro entre as duas expressões é pequeno, ou tende a ser pequeno, quando a medida dos subintervalos decresce. Exercı́cios 21 Soma de Riemann superior ou inferior Objetivo: adquirir uma visão intuitiva das integrais superior e inferior e compreender a relação Sn (f ) ≥ Sn (f ) para uma mesma partição do intervalo [a, b] quando f for positiva. Se os exercı́cios lhe parecerem claros, não perca o seu tempo fazendo-os. 1. Divida o intervalo [−3, 3] em 10 subintervalos iguais, represente geometricamente a aproximação da área Z3 −3 f (x) = Z3 x2 −3 usando sempre o máximo de f em cada sub-intervalo. Esta soma de Riemann assim obtida se chama soma superior de Riemann S 10 (f ) e vale a desigualdade Z3 f (x) ≤ S 10 (f ) −3 Observe que escrevemos ‘menor ou igual” porque, por uma casualidade, se pode obter uma igualdade. Se f for constante vale a igualdade. 177 CAPÍTULO 5. INTEGRAL APROXIMADA 2. Divida o intervalo [−3, 3] em 20 subintervalos iguais, represente geometricamente a aproximação da área Z3 f (x) = −3 Z3 x2 −3 usando sempre o máximo de f em cada sub-intervalo. Esta soma de Riemann assim obtida se chama soma superior de Riemann S 20 (f ) e valem as desigualdades Z3 f (x) ≤ S 20 (f ) ≤ S 10 (f ) −3 3. Tente uma demonstração para a afirmação: “ se duplicarmos a quantidade de intervalos, usando partições uniformes, se tem ≤ S 2n (f ) ≤ S n (f ) em outras palavras, as somas superiores obtidas por subdivisão sucessiva dos subintervalos, forma uma sucessão decrescente. Ela decresce para o valor da integral Zb f (x) a sobre o intervalo [a, b]. 4. Prove que, se f for uma função crescente, Sn (f ) = n−1 X f (a + k∆x)∆x. (5.22) k=0 é uma aproximação por falta da integral Rb f e a Sn (f ) = n X f (a + k∆x)∆x. (5.23) k=1 é uma aproximação por excesso da integral. Faça um gráfico ilustrativo. 5. Prove que, se f for uma função decrescente, Sn (f ) = n−1 X k=0 f (a + k∆x)∆x. (5.24) 178 CAPÍTULO 5. INTEGRAL APROXIMADA Rb é uma aproximação por excesso da integral f e a Sn (f ) = n X f (a + k∆x)∆x. (5.25) k=1 é uma aproximação por falta da integral. Faça um gráfico ilustrativo. 6. Use o programa riemann() para calcular, aproximadamdente, as integrais R3 a) c) 3 R3 i) 0 5 − 2x −2 R10 −3 −3 R 3 k) R3 x2 − 2x + 3 f) 4xsen(x) + 3x2 h) j) sen(x) l) −3 2x − x2 −3 3x2 − 2x R3 3 − 2x R3 d) 0 m) R3 b) −3 R0 e) g) 2x + 3 x2 cos(x) − 2xsen(x) − cos(x) R3 2 − 2x2 0 R10 −1 R3 −3 R0 −3 R3 n) x2 cos(x) − 2x − 3 (x3 − x2 − x + 4)sen(x) cos(x) 1 + x2 cos(x) 0 e compare o resultado usando o Teorema Fundamental do Cálculo, (em alguns casos você vai ter que usar integração por partes). Na proxima seção alguns cálculos feitos com um programa em Python vão ilustrar numericamente e graficamente o significado da soma de Riemann. 5.2 Integral no sentido de Riemann Falamos diversas que as somas de Riemann eram aproximações da integral e vamos agora ver como. A teoria que vamos apresentar é um pouco simplificada, deixamos que você leia uma teoria mais completa num livro de Cálculo. Um dos itens de nossa simplificação reside em que vamos considerar apenas malhas uniformes, este defeito é importante! O método algorı́tmico para calcular integrais é • Temos uma função f [a, b] → R que desejamos “provar que é integrável”; CAPÍTULO 5. INTEGRAL APROXIMADA 179 • Determinamos uma sucessão de malhas4 (partições), Πk , no intervalo [a, b] de modo que a sucessora de cada malha seja um refinamento5 da anterior Πk+1 << Πk ; (5.26) • a cada malha desta sucessão associamos uma soma de Riemann para f obtendo assim uma sucessão de somas de Riemann Πk 7→ Sk (f ); (5.27) • Se qualquer sucessão de somas de Riemann, assim construı́da, tiver o mesmo limite, este limite comum é Zb f (5.28) a este é um dos métodos para definir números reais, um número real é o limite comum de uma classe de equivalência de sucessões convergentes de números racionais. Podemos escrever uma definição para função integrável a Riemann: Definição 7 integral no sentido de Riemann Seja f [a, b] → R. f é integrável no sentido de Riemann se qualquer sucessão de somas de Riemann obtida por refinamentos arbitrários de uma partição de modo que a medida dos subintervalos tendam a zero, definir um mesmo número real. Este único número real é Zb f. a Observação 11 Partições uniformes Observe que na definição não fizemos menção às partições uniformes. Para definir a integral precisamos de famı́lias arbitrárias de partições. Mas neste texto somente faremos uso de partiçoes uniformes. Para que você fique alerta, a função 1 (5.29) x seria integrável se usarmos apenas partiçoes uniformes e na verdade esta função não é integrável. f [−1, 1] → R; x 7→ 4 que na linguagem da estatı́stica representa uma amostragem linguagem da estatı́stica seria uma amostragem compatı́vel, ou comparável, com a anterior 5 na 180 CAPÍTULO 5. INTEGRAL APROXIMADA Entretanto, se a função for integrável, usando apenas partições uniformes podemos calcular a sua integral, este é o atalho que estamos usando aqui. Este é um livro de Cálculo Numérico, em que calculamos numéricamente aquilo que você aprendeu a calcular exatamente no curso de Cálculo Diferencial e Integral. Exemplo 16 Programa riemann.py Rode e leia o programa riemann.py. Ele produz alguns refinamentos de uma partição inicial criando uma sucessão que converge para o valor da integral, se este valor existir. Experimente o programa com algumas das funções que estão definidas nele, por exemplo inv(x) que igual a x1 quando x 6= 0. Experimente calcular sua integral no intervalo [−1, 1] para ver alguns elementos de uma sucessão que não ‘parece” ser convergente. Os números que surgem não formam uma sucessão que pareça ter limite. Observe que um programa deste tipo não prova nada! ele apenas serve como exemplo e deve ser usado com este cuidado. Para usar o programa, troque o nome da função cuja integral você deseja dentro de uma das últimas linhas do programa. Veja a observação que indica isto no próprio programa. Use o programa para definir outras funções cujas integrais você deseja, observe a sintaxe da linguagem Python ao definir novas funções. 5.2.1 Duas propriedades da integral Não vamos desenvolver aqui a teoria de integração, ela é privativa do curso de Cálculo! Mostraremos entretanto uma propriedade da integral de Riemann para ilustrar como as somas de Riemann são um método efetivo de aproximação. Depois veremos que combinando as somas de Riemann com aproximação polinomial, teremos algoritmos muito possantes para calcular integrais aproximadamente. A propriedade: se f = h + g então Zb a f= Zb (h + g) = a Zb a h+ Zb g a é de grande uso. Vamos ver sua demonstração. Suponhamos que f, g, h sejam funções integráveis e que f = h + g. Para cada partição do intervalo [a, b] podemos escrever f (xk ) = g(xk ) + h(xk ); n P Sn (f ) = f (xk )∆xn ; (5.31) Sn (h) = (5.32) k=0 n P k=0 h(xk )∆xn ; (5.30) 181 CAPÍTULO 5. INTEGRAL APROXIMADA Sn (g) = n P g(xk )∆xn ; (5.33) k=0 Sn (h + g) = n P (h(xk ) + g(xk ))∆xn = (5.34) k=0 n P f (xk )∆xn = Sn (f ) (5.35) k=0 o que nos mostra que os números Zb f; a Zb h+g (5.36) a são iguais, porque • As equações (30)-(35) valem para qualquer que sejam as partições escolhidas no intervalo de integração; • Logo a a soma dos limites é igual ao limite da soma, e provamos assim que a soma das integrais é igual a integral das somas. É fácil usar uma pequena alteração desta demonstração para provar outra propriedade também muito útil: Zb Kf = K a Zb f (5.37) a se f for uma função integrável e K for uma constante qualquer. Temos assim o exemplo Z3 10x2 + 2x + 7 = 10 −3 Z3 x2 + 2 −3 Z3 x+ −3 Z3 7. (5.38) −3 Exercı́cios 22 Expressão formal do cálculo da integral 1. Escreva somas de Riemann, com 10 sub-intervalos, para aproximar cada uma das integrais abaixo: a) R3 1 1 x b) R3 −3 1 1+x2 c) R3 −3 2x+3 4+x2 2. Re-escreva as somas de Riemann aumentando a precisão, de modo que os sub-intervalos tenha medida 0.1 Use uma calculadora ou computador e calcule estas integrais. 182 CAPÍTULO 5. INTEGRAL APROXIMADA 3. O número de Napier Descubra experimentalmente um ponto e ∈ R tal que Ze 1 =1 x (5.39) 1 Sugestão, use o programa riemann.py e calcule as integrais Za 1 x 1 até obter (uma aproximação do) número desejado. 4. Verifique que, das duas somas de Riemann abaixo, uma fornece uma aproximação por falta e a outra por excesso da integral Z1 2 x ; n−1 X 0 0 n k2 1 X k2 1 ; n2 n 1 n2 n (5.40) identifique quem é quem. Use riemann() in riemann.py. 5. Verifique que, das duas somas de Riemann abaixo, uma fornece uma aproximação por falta e a outra por excesso da integral Z1 p x ; p∈N; p>1 ; 0 n−1 X 0 n kp 1 X kp 1 ; np n np n 1 (5.41) identifique quem é quem . Use riemann() in riemann.py. 6. Verifique experimentalmente (somas de Riemann) que R1 0 riemann() in riemann.py. x2 = 1 . 3 Use 7. soma de RiemannProve a desigualdade: n−1 X 2 k <n 3 k=0 Z1 2 x < n X k2 (5.42) n X k3 (5.43) k=1 0 8. soma de RiemannProve a desigualdade: n−1 X k=0 3 k <n 4 Z1 0 x3 < k=1 183 CAPÍTULO 5. INTEGRAL APROXIMADA 9. soma de RiemannProve a desigualdade: a Z n−1 n a3 X 3 a3 X 3 3 k < x < 4 k n4 n k=0 (5.44) k=1 0 10. soma de RiemannProve a desigualdade: n−1 X p k <n p+1 k=0 Z1 xp < 0 n X kp (5.45) k=1 11. soma de RiemannProve a desigualdade: a Z n−1 n a4 X 3 a4 X 3 3 k < x < k n4 n4 k=0 (5.46) k=1 0 12. soma de RiemannProve a desigualdade: a Z n−1 n ap+1 X 3 ap+1 X p p k < x < k np+1 np+1 k=0 0 (5.47) k=1 13. Expresse como uma soma de áreas de triângulos isósceles, (ou de retângulos0 uma aproximação para a área do cı́rculo de raio 1. 5.2.2 Cálculo “numérico” da integral Vamos calcular as áreas dos retângulos limitados pelo gráfico de f (x) = x2 + 2x + 1 ao longo de uma partição do intervalo [−3, 3]. Os dados contidos na tabela 5.1 na página 184, mostram a saı́da de dados de um programa em Python para o cálculo da integral do exercı́cio 3, com ∆x = 0.2. O gráfico 5.3, página 185, mostra os retângulos cujas áreas se encontram calculadas abaixo. O gráfico foi feito com auxı́lio do Gnuplot. A tabela 5.1 mostra os valores da integral ao longo dos sub-intervalos da partição. deltax = 0.2 Valor aproximado da integral 24.104801. Repetindo os cálculos com valores menores para o ∆x temos o seguinte: CAPÍTULO 5. INTEGRAL APROXIMADA x= x= x= x= x= x= x= x= x= x= x= x= x= x= x= x= x= x= x= x= x= x= x= x= x= x= x= x= x= x= -3 -2.8 -2.6 -2.4 -2.2 -2.0 -1.8 -1.6 -1.4 -1.2 -1.0 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8 Sn(-3) = Sn(-2.8) = Sn(-2.6) = Sn(-2.4) = Sn(-2.2) = Sn(-2.0) = Sn(-1.8) = Sn(-1.6) = Sn(-1.4) = Sn(-1.2) = Sn(-1.0) = Sn(-0.8) = Sn(-0.6) = Sn(-0.4) = Sn(-0.2) = Sn(0) = Sn(0.2) = Sn(0.4) = Sn(0.6) = Sn(0.8) = Sn(1.0) = Sn(1.2) = Sn(1.4) = Sn(1.6) = Sn(1.8) = Sn(2.0) = Sn(2.2) = Sn(2.4) = Sn(2.6) = Sn(2.8) = 0.7262867 1.3078534 1.7607801 2.1011468 2.3450335 2.5085202 2.6076869 2.6586136 2.6773803 2.680067 2.6827137 2.7013204 2.7518871 2.8504138 3.0129005 3.2553472 3.5937539 4.0441206 4.6224473 5.344734 6.2318207 7.2957874 8.5527141 10.0186808 11.7097675 13.6420542 15.8316209 18.2945476 21.0469143 24.104801 Tabela 5.1: Tabela de valores da integral de f (x) = x2 + 2x + 1 a o a o a o base de cada retangulo eh deltax = 0.12 valor da integral aproximado eh = 23.2944 base de cada retangulo eh deltax = 0.06 valor da integral aproximado eh = 23.6436 base de cada retangulo eh deltax = 0.006 valor da integral aproximado eh = 24.060036 O valor exato desta integral é: Z3 −3 x2 + 2x + 1 = 24 184 185 CAPÍTULO 5. INTEGRAL APROXIMADA e um programa em Python para calculá-la, aproximadamente, é: Exemplo 17 Um programa em Python para calcular integrais ## inicio do arquivo integral.py def f(x): return x*x ## função f a ser integrada. def integral(f,inicio,fim): inicio = input(‘inicio do intervalo [a, b] − − > a =”) fim = input(‘fim do intervalo [a, b] − − > b =”) soma = 0 deltax = 0.0000001 ## a precisão do cálculo. while (inicio < f im): soma = soma + f(inicio) inicio = inicio + deltax soma = soma*deltax return soma inicio = 0 fim = 1 print integral(f,inicio,fim) ## fim do arquivo integral.py Rode este programa assim. Na linha de comandos do LinuX digite: $ python integral.py Você pode alterar na definição de f , veja no programa onde está “def f(x)”, a equação e assim calcular outras integrais. O programa pede os extremos do intervalo de integração. 16 ’data’ 14 12 10 8 6 4 2 0 -3 -2 Figura 5.3: -1 0 1 retângulos da soma de Riemann para 2 R3 −3 Observação 12 Comentando o programa 3 x2 + 2x + 1 4 CAPÍTULO 5. INTEGRAL APROXIMADA 186 Não considere como ponto de honra entender um programa de computação agora. O autor deste livro levou quase 15 anos para conseguir entender os programas de computação... Use os programas, e aos poucos eles passarão a fazer parte de sua vida. Existe uma regra com algumas exceções, em Unix (LinuX é Unix). O sı́mbolo # representa comentário e o programa ignora o que vier depois deste sinal até o final da linha. Assim podemos inserir nos programas comentários para o outros que forem usar os programas. No programa você pode encontrar o comentário “a precisão do cálculo”ao lado da variável “deltax”. Esta é medida da base dos retângulos com a integral está sendo calculada. Troque por valor menor se quiser ter mais precisão, mas verá que logo deixa de valer a pena, porque a precisão máxima da máquina será atingida. Entretanto se você iniciar os cáculos com valores maiores para “deltax”, ao substituir valores menores, verá que cálculo se torna mais preciso. Experimente iniciar com deltax = 0.1 (5.48) e depois o substitua sucessivamente por 0.01, 0.001, 0.0001 · · · . Se você tiver executado a experiência, lhe terá aparecido ante os olhos a sucessão: 0.385, 0.32835, 0.3328335, 0.333383335, 0.333338333349, 0.333332833334 correspondentes a R1 (5.49) x2 calculada com este programa em que usamos 0 deltax ∈ {0.1, 0.01, 0.001, 0.0001, 0.00001, 0.000001} (5.50) Se você for além mais um pouquinho terá a desgradável surpreza de ver que a máquina começa se perder... mas é bom que isto aconteça para que você desmistifique a máquina. Nós, e não as máquinas, sabemos com contornar esta dificuldade para obter precisões ainda maiores, mais isto não cabe ser discutido aqui. Na próxima lista de exercı́cios vamos usar o que o programa nos ofereceu, (supondo que você tenha usado o programa, naturalmente). Observe que a sucessão das somas de Riemann parece produzir uma sucessão de números com um comportamento assintótico previsı́vel. Para uso no exercı́cio abaixo, use a seguinte versão do programa6 integral.py Mais adiante vamos lhe apresentar uma outra alternativa computacional usando uma “máquina de calcular” bem poderosa que pode estar instalada nos computadores a que você tiver acesso. Observe que o programa abaixo não se encontra no arquivo riemann.py. Você deverá digitá-lo e gravá-lo em sua área de trabalho. ## inicio do arquivo integral.py def f(x): return x*x ## função f a ser integrada. def integral(f,inicio,fim): fim = 1 soma = 0 deltax = 0.1; ## precisão incial do cálculo. while deltax > 0.0000001: soma = 0 6 Os programas usados neste livro podem ser conseguidos via e-mail com o autor. CAPÍTULO 5. INTEGRAL APROXIMADA 187 x = deltax while (x < f im): soma = soma + f(x) x = x + deltax soma = soma*deltax print soma deltax = deltax/2 return soma print integral(f,inicio,fim) ## fim do arquivo integral.py Esta versão difere da anterior nos seguintes pontos, agora ‘inicio”vale “deltax”e “fim=1”, quer dizer que ele calcula Z1 f (x). (5.51) 0 Além disto, o próprio programa sai dividindo sucessivamente ‘deltax”por dois, você tem apenas que sentar-se e olhar o resultado... Para rodar este programa faça o seguinte: • Primeiro copie o texto do programa para um arquivo chamado integral.py. Alternativa, arrume um disco com os programas com o autor do livro. • Digite, numa “shell” do LinuX, ‘python /home/seu-nome/calculo/integral.py” porque estamos supondo que você está trabalhando num diretorio chamado “calculo” em sua área de trabalho. • Qualquer dúvida, contacte tarcisiomember.ams.org descrevendo cuidadosamente a dificuldade encontrada. Junte cópia de eventuais mensagens de erro. Observação 13 Calcular integrais aproximadamente Qual pode ser o sentido de que eu o esteja conduzindo ao cálculo aproximado de integrais que você sabe calcular exatamente? Na verdade eu não deveria estar me concentrando no cálculo aproximado de integrais que não sabemos calcular exatamente? A resposta para esta pergunta é simples: como você sabe calcular exatamente as integrais você também pode comparar os resultados do cálculo aproximado com o cálculo exata e assim ganhar segurança sobre a precisão do cálculo aproximado. Inclusive os exercı́cios salientam este ponto ao pedir que você calcule usando o Teorema Fundamental do Cálculo as integrais calculadas aproximadamente. 188 CAPÍTULO 5. INTEGRAL APROXIMADA Exercı́cios 23 Cálculo “numérico” da integral Objetivo 1. Rode o programa integral.py com as integrais abaixo e decida em que casos parece haver um comportamento assintótico previsı́vel (limite). R1 a) x3 b) 0 e) R1 x4 0 R1 0 f) R1 0 1 x c) R1 x+3 d) 0 x+1 x g) R1 0 R1 0 x x+1 h) R1 0 1 x2 x+1 x+2 2. Existem exatamente três casos em que o comportamento assintótico da sucessão de Somas de Riemann fica indefinido. Tente encontrar uma explicação. 3. Verifique que se, numa soma de Riemann para Rb f , os sub-intervalos tive- a rem todos o mesmo tamanho b−a n então a soma de Riemann é um multiplo de b − a por uma média de valores de f , indique que média é esta: (1) aritmética, (2) geométrica ou (3) aritmética ponderada. 4. Usando o resultado do exercı́cio anterior, conclua que se Rb f existir, então a 1 b−a Zb f =M (5.52) a é um valor médio de f . Tente justificar a razão do “artigo indefinido”. 5. partição do intervalo A metodologia usada pelo programa integral.py consiste em, sucessivamente, dividir os intervalos na metade para obter uma nova coleção de sub-intervalos para a soma de Riemann seguinte. Considere a soma de Riemann n X f (a + k∆x)∆x (5.53) k=1 e escreva a expressão da soma de Riemann em que ∆x′ é a metade de ∆x = b−a n . 6. Suponha que os valores V0 , V1 , · · · , Vn−1 (5.54) são os resultados das medidas da velocidade de um carro tomadas a intervalos regulares (iguais) do tempo t ∈ [a, b]. (a) Qual a velocidade média Vm ? 189 CAPÍTULO 5. INTEGRAL APROXIMADA (b) Qual distância percorrida pelo veı́culo? (c) Expresse este valores numa fórmula usando a expressão da integral. 7. Descubra, geometricamente, as soluções da equação: Zx 0 3−t = Zx 6 t−3 (5.55) 8. Transforme numa equação algébrica a equação: Zx 0 3−t = Zx 6 t−3 (5.56) 9. Verifique quais das integrais abaixo é positiva: 2π R R2 a) x + sen(x) b) x − cos(x) 0 0 10. Faça tabelas de valores semelhantes à tabela 5.1 na página 184, para as integrais das funções f (x) = x1 ; ; x ∈ [1, 10] 2 g(x) = e−x ; ; x ∈ [−3, 3] (5.57) (5.58) No último exercı́cio você solicitado a fazer tabelas de valores para o cálculo das integrais para às quais não há forma de cálculo exato. • A integral da função f (x) = logaritmo natural. 1 x no intervalo [1, R] fornece os valores do 2 • A integral da função g(x) = e−x no intervalo [−a, a] fornece os valores da gaussiana. São duas funções de grande importância em aplicações e você foi conduzido, neste capı́tulo, a saber fazer as tabelas das integrais destas funções. 5.3 Regra do trapésio Vamos fazer referência a este método apenas para não deixá-lo de fora, seu valor é histórico. Foi um método que teve importância quando calculavamos aproximações manualmente. Ao mesmo tempo ele serve de exemplo de fórmulas que se escrevem facilmente com Matemática e que é difı́cil traduzir num programa de computador. Fizemos um comentário, páginas acima, dizendo que a área de um trapésio (ou de um triângulo) é a média aritmética das áreas de dois retângulos: 190 CAPÍTULO 5. INTEGRAL APROXIMADA 1. um cuja altura é a altura maior do trapésio; 2. outro cuja altura é a altura menor do trapésio; Veja isto na figura (fig. 5.4) página 190, Figura 5.4: área do trapésio é uma média aritmética Para demonstrar esta afirmação, considere um trapésio com base B e alturas 2 H1 < H2 . Como é sabido, a área de um trapésio é B( H1 +H ) 2 2 )= B( H1 +H 2 BH1 +BH2 2 = (5.59) BH1 é a área do retângulo de menor altura (5.60) (5.61) BH2 é a área do retângulo de maior altura (5.62) 191 CAPÍTULO 5. INTEGRAL APROXIMADA e a figura (fig. 5.4) lhe mostra como, geometricamente, você pode obter um trapésio, a partir do retângulo menor, cortando um triângulo. Em Matemática é fácil escrever a soma de Riemann superior que fornece a área por excesso associada a uma partição Π([a, b]): S n (f ) = n−1 X f k ∆x (5.63) k=0 em que f k representa o supremo de f no intervalo [xk , xk+1 ]. Mas não há programas de computador que consigam calcular supremos facilmente. De forma análoga a soma de Riemann inferior se escreve S n (f ) = n−1 X f k ∆x (5.64) k=0 em que f k representa o ı́nfimo de f no intervalo [xk , xk+1 ]. A mesma observação se pode fazer sobre ı́nfimos e programas de computador. A fórmula matemática Rb para calcular uma aproximação, usando trapésios, de f será a média aritmética a de S n (f ), S n (f ) que é n−1 S n (f ) + S n (f ) X f k + f k = ∆x 2 2 (5.65) k=0 que não é nada fácil de produzir com um programa de computador. Esta fórmula foi muito utilizada nos tempos que em que calculavamos aproximações de integrais manualmente. Hoje perdeu o sentido porque uma soma de Riemann calculada com um programa com valor muito pequeno para ∆x nos dará aproximações que dificilmente conseguiriamos com a regra do trapésio. 5.4 Integral de funções polinomiais Nos cursos de Cálculo mostramos que Zb a f (x)dx = Zb a bn+1 an+1 xn+1 b | = − = F (b) − F (a) x dx = n+1 a n+1 n+1 n que é a expressão do Teorema Fundamental do Cálculo para as funções polinomiais. Vou agora usar este teorema para o cálculo da integral das aproximações quase-splines de dados. CAPÍTULO 5. INTEGRAL APROXIMADA 5.4.1 192 Apresentação do método No capı́tulo 4 vimos que num levantamento de dados, por exemplo, com auxı́lio de sensores, podemos recuperar de forma muito precisa a distribuição de um determinado fenômeno usando apenas as informações obtidas sobre este fenômeno em pequena quantidade de nós de uma malha. Na primeira parte deste capı́tulo fiz uso de malhas, que chamei de partições de um intervalo, sobre cujos nós calculei os valores de uma função, portanto também um levantamento de dados, concluindo na construção de somas de Riemann como aproximações para a integral das funções. Agora vou substituir a utilização dos sub-intervalos das partições para neles simular os valores de uma função usando um quase-spline e calcular a integral de cada um desses pedaços de polinômio em cima de cada sub-intervalo da partição, substituindo estes valores na expressão das somas de Riemann. Estarei assim re-utilizando o conceito de soma de Riemann para obter uma nova forma de aproximação da integral de uma função. Veremos, na comparação com casos particulares, em que sabemos calcular a integral com precisão, que o resultado da aproximação da integral usando este método fornece uma grande aproximação do valor da integral, validando, assim o método. Finalmente vou mostrar que os bons resultados não correspondem a conı̈ncidências obtidas com casos bem comportados, mas que a integral dos quasesplines correspondem a uma forma excelente de aproximação quando a função tiver alguma classe de regularidade (ser contı́nua, por exemplo). A conclusão sendo, portanto, que, como os dados amostrais são supostos serem o resultado de medições de fenômenos regulares, em geral mais do que apenas contı́nuos, diferenciáveis também, então a a modelagem com quase-splines dos mesmo nos permite uma quantificação muito boa dos dados no cálculo da quantidade total (integral), taxas de variação (derivadas), valor médio (integral). 5.4.2 Integral de quase-splines Vou usar, neste seção, o calculo da integral de uma função polinomial, automatizada, com um programa de computador. Os quase-splines com que trabalhamos são funções polinômiais por pedaços, de grau menor ou igual a três. Simplificando inicialmente a notação, vou designar por [a, b] um sub-intervalo tı́pico de uma malha considerarada num intervalo I. Então o pedaço de polinômio, P , associado a este sub-intervalo tem por equação P (x) = a0 + a0 (x − a) + a2 (x − a)2 + a3 (x − a)3 e sua integral no intervalo [a, b] será (5.66) 193 CAPÍTULO 5. INTEGRAL APROXIMADA A= Rb P (x)dx = (5.67) a A= b−a R P (x + a)d(x + a) (5.68) 3 b−a R P (5.69) 0 A= ak xk dx k=0 0 3 P A= A= k=0 3 P k=0 k+1 ak xk+1 |b−a 0 (5.70) k+1 ak (b−a) k+1 (5.71) em que • na equação (68) fiz a chamada mudança de variável para transformar o intervalo de integração de [a, b] para [0, b − a]; • na equação (69) estou trocando a ordem dos sı́mbolos de soma e integral (distributividade da integral relativamente à soma); • na equação (70) apliquei o Teorema Fundamental do Cálculo a cada um dos monômios; • e na equação (71) fiz a substituição final usando a expressão simples obtida em consequência da mudança de variável. Agora, se substituirmos a notação do intervalo [a, b] por um sub-intervalo tı́pico da malha, com as correspondentes expressões para os pedaços de polinômio, teremos [a, b] := [xi , xi+1 ] 3 P k+1 x −x A := Ai = ai,k xk+1 |0 i+1 i (5.72) (5.73) k=0 Rb a Rb a f (x)dx ≈ f (x)dx ≈ n−1 P 3 P i=0 k=0 n−1 P Ai (5.74) i=0 k+1 −xi ) ai,k (xi+1k+1 (5.75) em que • na equação (72) substitui o intervalo [a, b] por um intervalo genérico [xi , xi+1 ] da partição (malha); • na equação (73) escrevi a expressão da integral pedação de polinômio Pi no subintervalo [xi , xi+1 ]; 194 CAPÍTULO 5. INTEGRAL APROXIMADA • na equação (74) escrevi a aproximação da integral de f como a soma das integrais de cada um dos pedaços de polinômio Pi ; • e, finalmente, na equação (75) escrevi a expressão da soma final que dá aproximação da integral de f no intervalo [a, b]. Vemos assim que a integral de um quase-spline depende apenas da expressão da matriz dos coeficientes ai,k (5.76) ∆i,k = xi+1 − xi (5.77) e das medidas de cada um dos sub-intervalos da malha considerada. A informação sobre o fênomenos está guardada nos coeficientes da matriz dos splines e em alguma forma também na medida dos intervalos. Quando as malhas forem informes esta medidas serão todas iguais a ∆ e já vimos nas discussões anteriores que esta simplificação em geral não traz nenhuma distorção significativa na análise dos fenômenos. Vou sintetizar estes resultados em alguns teoremas para tornar fácil a referência. Teorema 11 Integral de quase-splines - partição não uniforme Considere uma aproximação quase-spline de f : [a, b] −→ R (5.78) (ai,k ) i = 0 . . . n − 1 ; k = 0 . . . 3 (5.79) (∆i ) i = 0 . . . n − 1 (5.80) determinada pela matriz e pela matriz das medidas dos sub-intervalos de [a, b]. Zb a f (x)dx ≈ n−1 3 XX ai,k i=0 k=0 (∆i )k+1 k+1 (5.81) se a partição for uniforme temos um resultado um pouco simplificado Teorema 12 Integral de quase-splines - partição uniforme Considere uma aproximação quase-spline de f : [a, b] −→ R determinada pela matriz (5.82) 195 CAPÍTULO 5. INTEGRAL APROXIMADA (ai,k ) i = 0 . . . n − 1 ; k = 0 . . . 3 (5.83) Zb (5.84) a f (x)dx ≈ n−1 3 XX ai,k i=0 k=0 (∆)k+1 k+1 em que ∆ é a medida comum a todos os sub-intervalos da malha considerada em [a, b]. É interessante registrar também com uma fórmula o valor médio de f e vamos fazê-lo nos dois casos. Teorema 13 Valor médio aproximado de f - partição não uniforme Considere uma aproximação quase-spline de f : [a, b] −→ R (5.85) (ai,k ) i = 0 . . . n − 1 ; k = 0 . . . 3 (5.86) (∆i ) i = 0 . . . n − 1 (5.87) determinada pela matriz e pela matriz das medidas dos sub-intervalos de [a, b]. O valor médio aproximado de f é n−1 3 1 XX (∆i )k+1 ai,k b − a i=0 k+1 (5.88) k=0 e quando a partição for uniforme temos a seguinte aproximação do valor médio Teorema 14 Valor médio aproximado de f - partição uniforme Considere uma aproximação quase-spline de f : [a, b] −→ R (5.89) (ai,k ) i = 0 . . . n − 1 ; k = 0 . . . 3 (5.90) determinada pela matriz O valor médio aproximado de f é n−1 3 (∆)k+1 1 XX ai,k b − a i=0 k+1 (5.91) k=0 em que ∆ é a medida comum a todos os sub-intervalos da malha considerada em [a, b]. 196 CAPÍTULO 5. INTEGRAL APROXIMADA Exercı́cios 24 Integral de funções polinomiais 1. Considere a seguinte tabela de dados xk −4 −1 2 6 f (xk ) 3 0 −7 5 f ′ (xk ) −1 −2 0 6 Calcule a área da função polinomial por pedaços, f , de grau 3 que ela determina. Solução 11 Os coeficientes dos polinômios7 são P1 P2 P3 [−4.00, −1.00] [−1.00, 2.00] [2.00, 6.00] a0 , a1 , a2 , a3 a0 , a1 , a2 , a3 a0 , a1 , a2 , a3 3.0, −1.0, 0.33, −0.11 0.0, −2.0 − 1.0, 0.296296 −7.0, 0.0, 0.75, 0.0 As integrais destes polinômios são (nos respectivos intervalos) −1 R P1 = 5.24999925 (5.92) P2 = −12.000006 (5.93) −4 R2 −1 R6 2 R6 −4 P3 = −12 (5.94) f = −18.75 (5.95) Veja o gráfico da função polinomial por pedaços, na figura (fig. 5.5) página 197. 2. Calcule a quantidade do fenômeno descrito pelos dados xk −4 −1 2 6 f (xk ) 3 0 −7 5 f ′ (xk ) −1 −2 0 6 usando a regra do trapésio e compare com o resultado obtido usando aproximação polinomial do terceiro grau. 7 os coeficientes foram calculados com o programa ex0732.c 197 CAPÍTULO 5. INTEGRAL APROXIMADA 6 "dados" 4 2 0 -2 -4 -6 -8 -4 -3 -2 -1 Figura 5.5: 0 1 2 3 4 5 6 Gráfico do polinômio por pedaços 3. Um sensor obteve as seguintes medidas a intervalos iguais de tempo 3 3.2 3.5 4 4.7 5 5.1 5.2 5.21 5.22 5.223 5.2231 5.2232 Encontre um polinômio por pedaços que descreva este fenômeno e calcule a quantidade total do fenômeno (integral) e o valor médio do mesmo. Solução 12 Como temos medidas igualmente espaçadas, (uma partição uniforme) vamos selecionar um subconjunto destas medidas guardando dois valores seguidos e desprezando tres valores seguidos. Com os valores seguidos calcularemos a taxa de varição. De acordo com esta decisão, a tabela de valores que temos é 198 CAPÍTULO 5. INTEGRAL APROXIMADA xk 0 5 10 f (xk ) 3 5 5.2231 f ′ (xk ) 3.2−3 1 5.1−5 1 5.2232−5.2231 Como selecionamos dois pontos seguidos e desprezamos os três seguintes, é razoável considerar que a distância entre os nós seja 5 e assim escolhemos {0, 5, 10} como o conjunto de nós. Usando o programa ex0732.c para calcular os coeficientes dos polinômios, temos P1 (x) = 3.0 + 0.2x + 0.14x2 − 0.02x3 (5.96) P2 (x) = 5.0 + 0.1x − 0.013248x2 + 0.000434x3 (5.97) As integrais, em cada subintervalo, são R5 P1 = 20.208334 (5.98) 0 R10 P2 = 25.765875 (5.99) 5 e a quantidade do fenômeno é 45.974209. O valor médio é 4.59742 A representação gráfica da modelagem deste fenômeno pode ser vista na figura (fig. 5.6) página 198, 6 "dados" 5 4 3 2 1 0 0 1 2 3 Figura 5.6: 4 5 6 7 8 Modelagem com polinômios por pedaços 9 10 CAPÍTULO 5. INTEGRAL APROXIMADA 199 Você logo irá perceber que o cálculo aproximado da integral usando splines é uma generalização da soma de Riemann o que justifica que tenhamos começado o capı́tulo usando um método atrazado e ineficiente. 5.5 Integral de quasi-splines Um n-spline é uma função polinomial por pedaços, de grau n que é de classe8 C n−1 . Em outras palavras, se f [a, b] −→ R (5.100) for um n-spline, então • existe uma partição Π([a, b]), uma famı́lia de subintervalos, (Ik )n−1 k=0 e • uma famı́lia de polinômios (Pk )n−1 k=0 de grau menor ou igual a n de tal modo que f |[xk ,xk+1 ] = Pk f coı̈ncide com o polinômio Pk sobre o intervalo [xk , [xk+1 ]; • e f é de classe n − 1. Consequentemente a integral de um spline é uma soma de integrais de polinômios sobre o ı́ndice que descreve a famı́lia de sub-intervalos associados ao spline: xk+1 Zb n−1 X Z f= Pk (5.101) a k=0 x k Há várias formas de apresentarmos splines, e um pouco disto foi visto no capı́tulo 4 quando também chamamos sua atenção de que aqui estamos usando uma versão fraca de splines que chamamos de quasi-splines porque apenas exigimos a continuidade da derivada das funções polinomiais por pedaços. Os nossos quasi-splines são de classe C 1 . Exercı́cios 25 Integral aproximada 1. Considere 2. 3. 8 que tem n − 1 derivadas contı́nuas Capı́tulo 6 Equações diferenciais ordinárias Vou apresentar alguns métodos que permitem, sobre tudo, uma visualização da solução aproximadas de equações diferenciais de primeira ordem da forma dy = f (x, y) dx considerada uma condição inicial (x0 , y0 ) e uma região retangular da qual esta condição inicial é um ponto interior. Resolver exatamente uma equação diferencial é uma tarefa difı́cil mesmo nos casos em que sabemos tudo1 , equações diferenciais lineares. Durante a segunda metade do século 20 foram desenvolvidos complementos computacionais para métodos desenvolvidos já no século 19. É desta fusão dos métodos antigos, com os avanços computacionais que trataremos aqui para mostrar como podemos resolver aproximadamente uma equação diferencial ordinária. As equações diferenciais de ordem superior a um podem ser reduzidas, através de sistema de equações às equações de primeira ordem, e na parte final do capı́tulo mostrarei alguns exemplos desta técnica. Entretanto o leitor não deve perder de vista uma verdade crucial, cada equação diferencial é um novo problema, não temos uma teoria universal para resolver estas equações e nem talvez isto venha a existir no futuro. Por outro lado os métodos computacionais vem se revelando cada vez mais eficazes em nos ajudar na construção das soluções 1 teoricamente sabemos tudo, mas sabemos que nem sempre conseguiremos encontrar as soluções.... 200 201 CAPÍTULO 6. E.D.O. aproximadas mas continua sendo verdadeiro que os programas não podem rodar sozinhos, eles tem que ser monitorados, é o homem que resolve as equações com auxı́lio da máquina. Uma equação diferencial ordinária é uma expressão da forma F (x, y, y ′, . . . , y (n) ) = 0 (6.1) em que as “potências” da variável y representam as sucessivas de y em relação à única variável livre x sendo porisso que estas equações se denominam ordinárias, o adjetivo indicando o caso univariado. A variável nesta equação diferencial de fato é y, que é a incognita mas o hábito de chamar os parâmetros livres de variáveis persiste sendo um defeito que não nos incomoda e naturalmente vou continuar usando esta terminologia. Se a incognita, numa equação diferencial, tiver várias variáveis, a equação se chama equação diferencial parcial e na expressão da equação intervem as derivadas parciais da incognita relativamente às variáveis. Neste livro vou tratar apenas de equações diferenciais ordinárias. A maior ordem de derivação é a ordem da equação. Como já observei, as equações de ordem superior a um podem ser transformadas num sistema de equações de primeira ordem por meios bastante engenhosos e que dependem de cada equação, esta é a razão pela qual se estuda de forma intensiva as equações de primeira ordem. Outra razão importante é a de que, se interpretada de forma aproximada, derivadas de ordem superior a 1 induzem nos cálculo erros signficativos que é difı́cil de controlar. Isto se pode ver facilmente numa listagem de quociente de diferenças de ordem 2, numa malha suficientemente fina, em volta de pontos em que a função tenha uma oscilação muito intensa, como apresentei no primeiro capı́tulo. Então vou me restringir nesta exposição às equações diferenciais do tipo da equação (1) de ordem 1 F (x, y, y ′) = 0 (6.2) Esta equação, desde que satisfeitas ás condições do Teorema da Função Implı́cita pode ser escrita na forma y ′ = f (x, y) = 0 (6.3) exceto possivelmente em cima de algumas curvas onde a derivada parcial de F relativamente a terceira variável se anulasse portanto esta nova expressão é em geral fácil de ser deduzida a partir da equação (2) o que justifica que a grande maioria dos textos parte diretamente de uma equação na forma (3) deixando as expressões das equações (1), (2) no preâmbulo como uma forma adequada de iniciar falando de equações diferenciais. Então será a equação (3) que eu vou tomar como modelo para uma equação diferencial ordinária de primeira ordem neste capı́tulo sendo esta uma expressão bastante geral como acabei de expor. O meu objetivo aqui é apresentar métodos para resolver de forma aproximada as equações diferenciais e sobretudo apresentar este métodos no contexto atual em que a computação nos permite trabalhar. 202 CAPÍTULO 6. E.D.O. Resolver uma equação diferencial significa para nós encontrar uma solução aproximada para um problema de valor inicial y ′ = f (x, y) ; y ′ (x0 ) = f (x0 , y0 ) (6.4) o ponto (x0 , y0 ) é comumente denominado condição inicial. Por exemplo, certos autores ainda fazem referência ao método passo a passo em que podemos obter um sucessão de valores yk quando hoje podemos encontrar uma poligonal com um número grande de lados sendo estes lados arbitrariamente pequenos representando uma aproximação de alta precisão para um problema de valor inicial. A menção anterior é apenas aos vértices desta poligonal. Aqui vamos melhorar, como apoio computacional, os métodos tradicionais de uma forma que logo vamos descrever. Com frequência a variável livre usada é t quando se quer fazer referência a problemas dinâmicos. Como esta notação é puramente psicológica, eu vou continuar usando x como parâmetro, mas vou me permitir a usar a linguagem de equações dinâmicas quando me parecer interessante. Queremos obter uma poligonal a partir da condição inicial (x0 , y0 ) para frente, ou para trás, quando x ∈ I, um intervalo aberto I contendo x0 como o indica a figura (fig. 6.1) página 202, em que uma curva, a solução “exata” apa- Figura 6.1: Uma poligonal-solução aproximada rece passando por um ponto, a condição inicial, onde também se origina uma poligonal, a solução aproximada que nos interessa. A figura também ilustra um item importante neste problema que o domı́nio Ω de validade da solução. A determinação desta domı́nio é consequência dos coeficientes variáveis da equação ou da própria função f (x, y). Por exemplo, a equação y′ = − x y (6.5) 203 CAPÍTULO 6. E.D.O. que logo iremos usar como um exemplo, estabelece como domı́nio Ω = R2 − {(x, y) ∈ R2 ; y = 0} (6.6) o que justifica plenamente um problema de instabilidade do algorı́tmo de que vamos tratar mais a frente. Entretanto nós sabemos que esta restrição não precisa existir, em particular esta equação é uma das equações mais elementares para ser resolvida conduzindo pelo método das “variáveis” separáveis à equação de uma famı́lia de cı́rculos de centro na origem com validade em todo R2 . Infelizmente nem sempre podemos fazer uma discussão simples assim num problema particular. O plano do trabalho que vamos desenvolver aqui é • O método de Euler que produz a poligonal de Euler; Um algoritmo computacional produz esta poligonal com uma precisão bastante grande em vez de apenas construir os vértices; • O método de Taylor que é uma aplicação dos polinômios de Taylor2 em que uma função polinomial vai representar a solução aproximada. Aqui vamos usar o método de Taylor para fazer uma melhoria no método de Euler produzindo uma função polinomial por pedaços, cada pedação construido com o método de Taylor. Este método é comparável ao método de Runge-Kutta em muito exemplos. 6.1 O método de Euler O método de Euler pode ser explicado de forma bem elementar. A figura (fig. 6.2) página 204, ilustra o método com uma construção feita à mão. O ponto P na figura representa uma condição inicial onde desenhei um segmento de reta tangente, uma aproximação linear da curva num vizinhança do ponto P . O outro ponto do segmento, P1 é uma nova condição inicial em que novo segmento de reta tangente será traçado e assim sucessivamente temos uma poligonal que representa uma aproximação da curva-solução da equação diferencial. A curva apresentada na (fig. 6.2) é um cı́rculo que se for centrada na origem é uma solução da equação diferencial y′ = − x = f (x, y) y (6.7) e eu escolhi este exemplo porque ele oferece um problema na implementação do algoritmo: os pontos com tangentes verticais, em cima do eixo OX, tornam o programa instável. O mesmo aconteceria com a equação y′ = 2 alguns x y autores se referem indevidamente à série de Taylor (6.8) 204 CAPÍTULO 6. E.D.O. P P 1 P 2 P 3 método de Euler Figura 6.2: O método de Euler - uma poligonal cujas curvas-solução são hipérboles. Novamente o algoritmo perde estabilidade quando passa no eixo OX. É possı́vel obter uma solução que corte este eixo, mas em geral o programa se perde desenhando retas obliquas porque perto do eixo, logo acima ou logo abaixo o coeficiente angular é muito alto e é difı́cil escrever um algoritmo que supere este problema. O algoritmo, como mostra a figura, consiste em substituir a solução por uma poligonal que parte da condição inicial dada, (x0 , y0 ), e que podemos descrever com a seguinte sucessão de equações num processo indutivo. No conjunto de equações abaixo, cada duas equações representa um passo no processo (x0 , y0 ) ⇒ f0 (x) = y0 + f (x0 , y0 )(x − x0 ) x1 = x0 + ∆x ; y1 = f0 (x1 ) .. . (6.9) (6.10) (6.11) CAPÍTULO 6. E.D.O. (xk , yk ) ⇒ fk (x) = yk + f (xk , yk )(x − xk ) xk+1 = xk + ∆x ; yk+1 = fk (xk ) .. . (xn , yn ) ⇒ fn (x) = yn + f (xn , yn )(x − xn ) xn+1 = xn + ∆x ; yn+1 = fn (xn ) 205 (6.12) (6.13) (6.14) (6.15) (6.16) eu escrevi a equação da reta fk com a qual calculei yk+1 definindo antes xk+1 = xk + ∆x . • o primeiro lado da poligonal se originando na condição inicial para a qual se calcula a equação da reta tangente ; • o segundo extremo deste segmento de reta tangente é uma nova condição inicial para determinar um novo lado da poligonal e assim sucessivamente. O programa euler.c implementa este algoritmo mas não consegue resolver a equação do cı́rculo se a condição inicial estiver em cima do eixo OX. A figura (fig. 6.3) página 206, O trecho essencial do programa euler.c, escrito em C que implementa este algoritmo é data = abrearquivo("dados","e"); // (2) enquanto( (x > InicioX)*(x < FimX)*(y > InicioY)*(y < FimY)*(k < n) { // (cos(theta), sin(theta)) = (a,b) real m = atan(f(x,y)); real a=cos(m),b = sin(m); // b=sqrt(1 - a*a); // cosenos diretores imprime_arq(data,"%f %f \n", x, y); // primeiro ponto da reta x = x + a*salto; y = y + b*salto; // novo ponto da reta imprime_arq(data,"%f %f \n", x, y); k++; // contando os segmentos de reta da poligonal imprime("..."); } fecha_arquivo(data); // fecha o arquivo "dados" que coloca no arquivo ”dados”apenas os vértices da poligonal. Depois posso usar Gnuplot, um programa de domı́nio público, que completa os segmentos de reta entre os pontos desenhando a poligonal. Eu chamo o Gnuplot diretamente de dentro do programa de modo que o programa já apresenta o gráfico da solução aproximada deixando os dados registrados em arquivos o permite repetir o gráfico posteriormente, sem rodar o programa. Além de poder ver o gráfico tenho assim os vértices da poligonal de Euler disponı́veis para aplicações numéricas. O leitor interessado pode me pedir cópia do programa por e-mail. ) 206 CAPÍTULO 6. E.D.O. 4 "dados" "XOY" 3 2 1 0 -1 -2 -3 -4 -4 -3 -2 -1 Figura 6.3: Exercı́cios 26 2. 3. 1. 0 1 2 solução aproximada de y ′ = − yx 3 4 5 207 CAPÍTULO 6. E.D.O. 6.2 Polinômio de Taylor: solução aproximada O método de Taylor pode ser visto como generalização do método de Euler e eu vou apresentá-lo sob esta forma nesta exposição. Fazendo assim, o algoritmo computacional já produzido par o método de Euler pode ser facilmente alterado para produzir o método de Taylor. Quero resolver o problema de valor inicial y ′ = f (x, y) ; y ′ (x0 ) = f (x0 , y0 ) (6.17) num domı́nio Ω ⊂ R2 em que (x0 , y0 ) ∈ Ω. A suposição de que Ω seja um aberto nos deixa livre de preocupações com a fronteira onde eventualmente as derivadas parciais de f deixassem de existir. Na construção vamos ver quais são as hipóteses necessárias para que o problema possa ser resolvido. A polinômio de Taylor de grau n produz uma função polinomial tangente ao gráfico de uma função tangenciando até a ordem de derivação correspondente ao grau do polinômio. 6.2.1 Polinômio de Taylor do segundo grau A reta tangente é a expressão do polinômio de Taylor de primeiro grau. Podemos então tomar a equação (x0 , y0 ) ⇒ f0 (x) = y0 + f (x0 , y0 )(x − x0 ) (6.18) em que obtivemos uma função do primeiro grau cujo gráfico é tangente ao gráfico da curva-solução passando no ponto (x0 , y0 ) e queremos expandir mais um termo para obter uma expressão (polinômio) do segundo grau. Para isto vamos formalmente expressar y ′ = z, que o leitor verá novamente quando numa equação de ordem dois fizermos sua transformação num sistema de equações de primeira ordem, ao final do capı́tulo, para escrever: dz = y ′′ = y ′′ (x0 ) = y ′ = z = f (x, y) y ′ (x0 ) = A0 (6.19) (6.20) ∂f (x,y) ∂x dx (6.21) dz dx = + ∂f (x,y) ∂x ∂f (x,y) |(x0 ,y0 ) ∂x y ′′ (x0 ) + ∂f (x,y) ∂y dy + ∂f (x,y) dy ∂y dx (6.22) ∂f (x,y) |(x0 ,y0 ) y ′ (x0 ) ∂y = A1 f0 (x) = y0 + A0 (x − x0 ) + A1 (x 2 − x0 ) 2 (6.23) (6.24) (6.25) 208 CAPÍTULO 6. E.D.O. f0 (x) = y0 + A0,0 (x − x0 ) + A0,1 2 (x − x0 ) 2 (6.26) é a expressão do polinômio do segundo grau que substitui, na fórmula de Euler, a equação da reta tangente. Posso agora retomar as equações que de forma iterativa me deram a poligonal de Euler, para calcular construir uma sucessão de polinômios do segundo grau, uma polinomial de segundo grau que aproxima a solução do problema de valor inicial y ′ = f (x, y) ; y ′ (x0 ) = f (x0 , y0 ) (x0 , y0 ) ⇒ f0 (x) = y0 + A0,0 (x − x0 ) + A0,1 (x 2 x1 = x0 + ∆x ; y1 = f0 (x1 ) .. . (6.27) − x0 ) 2 A An,1 2 (x xn+1 = xn + ∆x ; yn+1 = fn (xn ) (6.29) (6.30) (xk , yk ) ⇒ fk (x) = yk + Ak,0 (x − x0 ) + 2k,1 (x − x0 )2 xk+1 = xk + ∆x ; yk+1 = fk (xk ) .. . (xn , yn ) ⇒ fn (x) = yn + An,0 (x − x0 ) + (6.28) − x0 ) 2 (6.31) (6.32) (6.33) (6.34) (6.35) O programa taylor.c é uma simples consequência do programa euler.c apenas acrescentanodo as funções necessárias para calcular Ak,0 , Ak,1 , e naturalmente usando a nova expressão de fk no cálculo dos pontos para obter o gráfico. 6.2.2 Polinômio de Taylor de grau n Poderiamos ser tentados em prosseguir estes cálculos em busca de um polinômio de Taylor de grau mais elevado. Como é fácil de observar a partir do cálculo feito acima, as contas ficariam bem mais complicadas a cada nova ordem (grau do polinômio). A experiência que temos com aproximação nos indica que outro caminho pode ser tomado para obter melhor aproximação, por exemplo construir um método hı́brido, de Taylor, usando a mesma metologia acima. Isto recairia na construção de splines ou quase-splines. Referências Bibliográficas [1] D’Azevedo, E.F. Romine, C. H. e Walker, D. W. Shared-Memory Emulation is key to Billion-Atom Molecular Dynamics Simulation - SIAM-News Vol 28 (5) - 1995 [2] Beazley, D. M. e Lomdahl, P. S. Large-Scale Molecular Dynamics on MPPs: Part I - SIAM-News Vol 28 (2) - 1995 [3] Borwein, Jon - [email protected] 28/07/1997 www.cecm.sfu.ca/personal/jborwein/Kanada 50b.html jborwein@@cecm.sfu.ca [4] Cláudio, D. M. e Marins, J.M. Cálculo Numérico Computacional - 1994 editora atlas - 2a Edição [5] Sperándio, D. Mendes, J. T. e Silva, L.H.M Cálculo Numérico Prentice Hall Brasil [6] Shapiro, H. S Smothing and approximation of functions Van Nostrand Reinhold Mathematical Studies - 24 [7] Franco, N.M.B. Cálculo Numérico Prentice Hall Brasil [8] Daubechies, Ingrid, Ten lectures on wavelets - SIAM - Philadelphia, PA - 1992 [9] Dieudoné Calcul Infinitesimal - 1968 - Collection Méthodes - Herman - Paris. [10] Eaton, John W. Octave - A high-level interactive language for numerical computations 1996 ftp.che.utexas.edu/pub/octave/octave-M.N.tar.gz 209 REFERÊNCIAS BIBLIOGRÁFICAS 210 [11] Faculdade de Engenharia Mecânica - Unicamp http://www.fem.unicamp.br/ em313/paginas/person/lavoisie.htm [12] Saunders, M e Birkhoff, G - Algebra MacGraw-Hill - 1968 [13] gnuplot um programa para fazer grafico e alguns cálculos http://www.gnuplot.info [14] A enciclopédia livre na Internet http://www.widipedia.org [15] Linz, P. A critique of numerical Analysis. - Bull. of AMS vol 19 no. 2 1989 (407,416) [16] Meyer, Y Wavelets Algorithms and Applications - SIAM - 1994 [17] Monagan e Neuenschwander GRADIENT. Algortithmic Differentiation in Maple Pre-Print - Symbolic Computation Group Institut für Wissenschftliches Rechnen - ETH - Zürich - Switzerland [18] Praciano-Pereira, T. Cálculo numérico Computacional - Introdução à linguagem Pascal - Editora da Universidade Estadual Vale do Acaraú - 2000 http://www.4shared.com/file/14206895/ae074651/pascal.html [19] Praciano-Pereira, T. Cálculo numérico Computacional - Edição Eletrônica Laboratório de Matemática Computacional - 2007 http://www.4shared.com/dir/1751707/4c187abc/sharing.html [20] Praciano-Pereira, T Programas para Cálculo Numérico - programas.tgz http://www.4shared.com/dir/2041165/e14cc331/programas.html [21] Praciano-Pereira, T Splines por convolução http://www.4shared.com/file/17757661/3515d0b6/convspl02.html [22] Rossum, Guido van A tutorial on Python - [email protected] - ftp.python.org. REFERÊNCIAS BIBLIOGRÁFICAS 211 [23] Scilab Group - SciLab - programa para simulações numéricas INRIA - Unité de recherche de Rocquencourt - Projet Meta2 - [email protected] - 1996 htt://www.scilab.org [24] SIAM NEWS - The news journal of the Society of Industrial and Applied Mathematics - Philadelpphia, PA - USA [25] Simmons, G.F. Differential Equations with App. and Hist. Notes. McGraw-Hill - Book Company - 1978 [26] An elementary proof of the Arithmetic-Geometric Inequality - Revista Vetor - Univ. Federal do Rio - 2004 - Grande - Rio Grande - RS [27] José Stálio Rodrigues do Santos e Praciano-Pereira, T. Introdução à Matemática Universitária Edição Eletrônica do Laboratório de Matemática Computacional - Univ. Estadual Vale do Acaraú - Sobral - Ceará - 2005 http://www.4shared.com/file/12779601/ab687cc4/fundam2p.html [28] Spline A enciclopédia livre na Internet http://pt.wikipedia.org/wiki/Spline [29] A enciclopédia livre na Internet - Wikipédia http://encyclopedia.thefreedictionary.com/ Índice Remissivo 1-spline, 133 2-spline, 133 aberto software, 126 algébrica computação, vi algorı́tmica derivada, 13, 112–115 amostragem, 10, 102 antigo moderno, 82 aproximação, 4 Aquiles paradoxo, 30 aritmética geométrica desigualdade, 83 assintótico, comportamento, 177 babilônios, 83 algoritmo, 88 precisão, 82 barra invertida, 148 binária busca, 73 busca binária, 28 calc, vi C interpretado, 52 caracterı́stica função, 133 cı́rculo desenhando, 4 compilar e rodar, 43 comportamento assintótico, 177 computação algébrica, vi cientı́fica, vi numérica, vi constantes especı́ficas, 36 construções área de, 36 contı́nuo, 127 continuidade, 129 contração, 91 contradição, 127 convexa comb. linear, 121 convolução correção, 143 def. geométrica, 133 domı́nio, 144 produto, 133 produto de, 133 correção informação, 137 pela média, 8 cortes de Dedekind, 69 cúbicos splines, 132, 148 cúbicos, splines, 132 Dedekind cortes de, 69 derivada, 1 aproximada, 7 importância, 7 derivada algorı́tmica, 13, 112–115 derivada zero, 61 desigualdade aritmético-geométrica, 83 212 213 ÍNDICE REMISSIVO diferença quociente, 10 diferenciáveis funções, 128 diferenciabilidade, 128 método da secante, 54 método de Euler, 195, 197 malha, 32, 35 figura plana, 35 multiplicidade raı́zes, 40 núcleos, 144 partição, 32 figura plana, 35 polin. por ped., 188, 189 raź recursividade, 91, 92 raı́z reta tangente, 63 raı́z da tangente, 64 Raı́z duma função, 29 raı́z quadrada, 87 raı́zes secantes, 48 Reta tangente, 20 secantes raı́zes, 48 sensor mais antigo, 5 melhor geração, 6 solução edo, 193 soma de Riemann, 164 tangência parabólico, 60 tangente cı́rculo, 2 taxa de variação, 2 trapésio, 181 um-spline, 105 Valor médio, 130 valor médio, 139 equipe trabalho, 127 erra fórmula, 18 erro, 19, 127, 138 correção, 138 Valor Médio, 138 especı́ficas constantes, 36 ética, 126 Euler, 112 método de, 194 poligonal, 194 figura área, 80, 81 área aproximada, 163 ŕea, 79 2-spline, 157 aprox. polin. clássica, 103 aproximação, 125 Lagrange,splines, 158, 159 convolução, 146 produto, 134 produto de, 135 convolucao regularização, 159 dados amostrais, 18 derivada interpretação, 9 derivada zero, 61 grafico de f , 17 interpolação, 108 linear, 7 não linear, 8 interseção curvas, 77 Lagrange, polinômio, 114 máximo módulo, 104 média viciada, 140 fixo ponto, 66, 73 ponto,teorema, 90 fixo ponto teoremas, 90 florestas área de, 36 gaussiana, 143 214 ÍNDICE REMISSIVO integral da, 143 GNU/Linux, vi Gnuplot, 148 gnuplot, vi, 12, 89, 102 comandos, 16 GPL, vii, xii gráfico Riemann,soma, 176 soma de Riemann, 176 iterada de T, 65 hipotética função, 126 Lagrange interpolação, 112, 121 método, 112 tutorial, 112 Landau O grande de, 26 o pequeno de, 3 o pequeno de , 26 Linux, vi, xii, 127 loop infinito, 65 implı́cita teorema da função, 22 impulso unitário, 134 infinito, 127 loop, 65 informação correção, 137 informações excesso, 120 integrável à Riemann, 170 não, 170 integral, 183 aprox. por falta, 173 aproximação, 174–176, 178 cálculo numérico, 178 calculo, 161 Expressão formal, 169 python, 178 soma de Riemann, 167–169 valor médio, 136, 138, 186 interpolação curva, 6 Lagrange, 112 linear, 104 não linear, 7, 105, 109 poligonal, 121 polinomial clássica, 111 interpolação linear, 7 intervalo partição, 32 malha, 31, 124, 127, 164 laço, 36 multidimensional, 34, 35 problema, 37 uso, 35, 36 nós, 120 norma, 31 máximo módulo, 104 teorema, 103 Maxima, xii maxima, vi média, 8 dados, recuperação, 138 restaurações, 138 telecomunicações, 138 médio valor, 183 método determinar raı́zes da secante, 62 da tangente, 62 microrganismos quantidade de, 35 modelagem, 101 modelo, 126, 127 tipos de, 126 modelos contı́nuos, 127 discretos, 127 moderno antigo, 82 módulo máximo, 104 215 ÍNDICE REMISSIVO teorema, 103 mônico polinomio, 109 movimento equação, 19 multidimensional malha, 34 MuPad, xii n-splines, 133, 148 nó de uma malha, 112 nós, 164 malha, 120 núcleo, 134, 136 n-spline, 148 norma da malha, 31 Octave, xii órbita foguete, 4 oscilação, 104 fenômenos com, 120 paradoxo, 127 de Aquiles, 30 partição, 31, 120, 127, 164 norma, 31 uniforme, 120 partição não uniforme, 120 pedaços linear, 121, 122 polinômios, 124 pen-drive-splines, 140 pequeno relativamente, 48 peso, 121 pesos, 136 pique fenômeno com, 120 poligonal, 121 polinômio de Lagrange, 121 polinomial, 130 aprox. clássica, 102 aproximação, 101, 102 de grau três, 124 do terceiro grau, 123 interpolação, 111 por pedaços, 102 splines, 102 poluição avaliação de, 36 ponderada média, 136 ponto fixo, 66, 73, 85, 88 teorema, 90 precisão pontos, 120 pontos de, 120 produto de convolução, 133 programa, 176, 178 fim de linha, 148 raizes01.c, 43 programas integral.py, 178 python, 178 pulso unitário, 136 Python, 169 quantidade fenômeno, 122 quasi-splines, 132, 190 integral, 185 raź quadrada, 83 raı́z método secante, 28 tangentes, 28 secante, 48–50, 55, 56 tangente, 47 tipo secante, 47 tipo tangente, 47 raı́zes de funções, 28 separação das, 39 raiz tipo secante, 61, 62 tipo tangente, 61, 62 real 216 ÍNDICE REMISSIVO número, 170 realidade simulação, 126 recursiva sucessão, 66 recursivas sucessões, 88 sucesswões, 88 recursividade, 28, 53, 66, 73 raı́z, 91, 92 Reduce, xii Riemann soma, 166, 173, 174 Riemann, soma, 162, 163 riemann.py, 173 rodar e compilar, 43 Runge-Kutta, 194 salto quântico, 128 Scilab, xii scilab, vi secante método, 73 secantes e tangentes, 4 segurança simulação, 126 separação das raı́zes, 39 sequências recursivas, 88 série termo geral, 98 Simpson integral, 160 simulação, 126 sinal, 134 soma de Riemann, 160, 162, 163, 166 splines, 101, 102, 130, 133,190 aplicações, 134 pen-drive, 140 splines cúbicos, 132 sucessão, 128 sucessões recursivas, 88 suporte notação, 144 tangente método, 73 parábola, 18, 19 tangentes e secantes, 4 taxa de variação, 183 Taylor fórmula, 19, 23 fórmula multivariada, 21 polinômio, 194 teorema módulo máximo, 103 tipos de raı́zes, 47 translação, 134 trapésio regra do, 160 tutorial, 112 Lagrange, polinômio, 112 uniforme partição, 120, 170 unitário pulso, 136 unitário, impulso, 134 valor médio, 136, 138, 183 integral, 186 valor médio integral, 138 Vandermonde, 111, 112 variação taxa, 9 taxa de, 1, 183 variedade, 22, 27 varredura, 30, 127 viciada média, 137 Waring, 112