MAP-2121 - Segundo exercício programa - 26 Splines Cúbicos Instruções gerais - Os exercícios computacionais pedidos na disciplina Cálculo Numérico têm por objetivo fundamental familiarizar o aluno com problemas práticos que requeiram técnicas numéricas em sua solução. Neste segundo programa sua tarefa será aprender e implementar um método de interpolação polinomial por partes usando splines cúbicos, além de aplicá-lo na solução de alguns problemas. Seu programa deve ser entregue no Panda até o dia 29 de novembro. Não deixe para fazê-lo no final do prazo. O programa deve ser escrito em Linguagem C e ser compilado e executado com o compilador disponível através do Panda. Caso você desenvolva seu programa em outro compilador, confira se ele também compila e executa no devcpp na versão que se encontra no Panda). Programas que não compilarem terão notas muito baixas. Ao desenvolver seu projeto você possivelmente trocará idéias com seus colegas. Esta interação é saudável e desejável, vocês estarão aprendendo mais. O seu programa deve no entanto ser desenvolvido por você individualmente, para que você realmente saiba fazêlo. Haverá controle de cópias e caso estas sejam detectadas, os envolvidos terão nota zero no programa e o caso será levado à coordenação do biênio. Esperamos sinceramente não encontrar nenhum caso deste tipo. Bom trabalho e divirta-se com sua tarefa! Splines cúbicos Em alguns problemas de interpolação com muitos pontos, o uso de interpolação polinomial leva a soluções que oscilam muito. Uma técnica muito usada nestes casos é interpolação polinomial por partes, sendo os splines cúbicos muito populares devido a boas propriedades de aproximação e permitir gerar curvas suaves a partir dos valores tabelados de uma função. Considere uma partição do intervalo [a, b] a = x < x 1 < < x n 1 < x n = b em n subintervalos [x i 1, x i ], 1 i n, e sejam y i = fx i ), i n, os valores de uma função f nos pontos da partição. Um spline cúbico interpolador é uma função Sx) tal que: a) Sx i ) = y i, i n. b) A restrição de S a cada subintervalo [x i 1, x i ], 1 i n, é um polinômio de grau menor ou igual a 3. c) S, S e S são contínuas em [a, b]. 1
O termo spline foi cunhado pelo matemático I. J. Schoenberg em conexão com alguns problemas de ajuste de dados estudados por ele. Spline é o nome em inglês de uma régua fina flexível usada para desenhar curvas suaves passando por pontos prescritos. Usando teoria da elasticidade linear, pode-se mostrar que estas curvas são aproximadamente polinômios cúbicos por partes com derivadas até ordem 2 contínuas. Construindo splines cúbicos Os splines cúbicos interpoladores podem ser carcterizados pelos valores y i da função e pelos valores m i = S x i ) da derivada segunda de S nos pontos da partição. Para isso, denote por S i x) = Sx), x [x i 1, x i ] as restrições de S aos intervalos [x i 1, x i ] e por = x i x i 1 os comprimentos destes intervalos, 1 i n. Então, S i x) = x i x m i 1 + x x i 1 m i. Integrando a expressão acima duas vezes e usando a propriedade de interpolação obtemos S i x) = x i x y i 1 + x x i 1 y i + 1) h {[ i xi ) ] [ 3 x i x x ) ] } 3 i x xi 1 m i 1 + x x i 1 m i 6 onde a fórmula é válida para x [x i 1, x i ]. Note que ela já incorpora as condições S e S contínuas por que?). Para determinarmos as incógnitas m i, usamos a continuidade de S, ou seja, S i x i) = S i+1 x i), 1 i n 1. Usando estas relações em 1) e após uma manipulação das expressões chegamos ao seguinte sistema de equações + +1 m i 1 + 2m i + +1 + +1 m i+1 = d i 2) para 1 i n 1, onde 6 yi+1 y i d i = + +1 +1 y ) i y i 1. 3) Note que 2) é um sistema linear com n 1 equações e n + 1 incógnitas. Pode-se mostrar que a matriz do sistema tem posto máximo, e portanto há uma infinidade de splines cúbicos interpoladores. Para caracterizar um único spline, é necessário impor condições adicionais. Veremos a seguir algumas possibilidades. 2
Caracterizações de splines cúbicos Veremos nesta seção algumas possibilidades para se obter um único spline cúbico interpolador. a) Spline cúbico natural: é obtido impondo-se que as derivadas segundas de S em x e x n sejam nulas, isto é, m = m n =. Este é o spline gerado pela régua flexível. b) Spline cúbico completo: se conhecermos os valores y = f x ) e y n = f x n ) da derivada de f nos extremos do intervalo, acrescentamos duas equações ao sistema 2) a partir de S 1x ) = y e S nx n ) = y n. Verifique como exercício quais são estas equações. c) Condição not a knot : Este spline, proposto por Carl de Boor, é obtido impondo-se que nos intervalos [x, x 2 ] e [x n 2, x n ], S seja um polinômio de grau menor ou igual a 3. É como se desligássemos os nós x 1 e x n 1. Estas condições são equivalentes a S 1 x 1 ) = S 2 x 1 ) e S n 1x n 1 ) = S n x n 1 ), gerando o seguinte sistema n 1) n 1): a primeira equação em 2) é modificada para 2 + h ) 1 m 1 + 1 h ) 1 m 2 = d 1, a equação n 1 é modificada para 1 h ) n m n 2 + 2 + h n ) m n 1 = d n 1 e para 2 i n 2 usamos as mesmas equações de 2). calculados m 1,..., m n 1, obtemos m e m n por Uma vez m = h 1 + m 1 h 1 m 2 ; m n = + h n m n 1 h n m n 2. d) Spline cúbico periódico: quando f é periódica de período b a, temos y = y n. Podemos então obter o spline cúbico periódico impondo-se m = m n e S x ) = S x n ). As equações para m 1,..., m n ficam iguais a: i = 1: use m = m n para obter 2m 1 + h 1 + m 2 + h 1 h 1 + m n = d 1. 2 i n 1: use as equações dadas por 2). i = n: Use S nx n ) = S 1x ) para obter h 1 m 1 + h n m n 1 + 2m n = d n h 1 + h n h 1 + h n onde a expressão 3) com i = n deve ser avaliada usando-se h n+1 = h 1 e y n+1 = y 1. 3
Nos casos a), b) e c), o sistema linear resultante é tridiagonal e pode ser resolvido pelo método descrito no Exercício Programa 1. No caso d), a matriz é tridiagonal periódica, e uma maneira de se resolver o sistema linear é descrita no Apêndice. Uma vez calculados os valores m i, i n, podemos calcular Sx) para qualquer x [a, b]. Determine o índice i tal que x [x i 1, x i ]. Calcule então A = x i x)/ e B = x x i 1 )/ = 1 A. De 1) temos Sx) = Ay i 1 + By i + h2 i 6 [ A 3 A ) m i 1 + B 3 B ) m i ]. Curvas bidimensionais suaves Uma aplicação de interpolação com splines cúbicos é a construção de curvas suaves no plano passando por n + 1 pontos P k com coordenadas dadas x k, y k ), k n, onde uma representação geral na forma y = fx) não é possível. Portanto, devemos usar uma representação paramétrica x = xt) y = yt), 4) onde t denota o parâmetro. Podemos assumir que os valores t, t 1,...,t n dos parâmetros correspondentes aos n + 1 pontos estão em ordem crescente de magnitude. Construimos então dois splines cúbicos que interpolam as funções tabeladas t k, x k ) e t k, y k ), k n, por meio dos quais obtemos uma representação paramétrica 4). O comprimento de arco da curva seria o parâmetro t mais apropriado. Como ele não é conhecido a priori, os valores t k para o parâmetro são usualmente escolhidos como sendo as distâncias entre pontos consecutivos: t =, t k = t k 1 + x k x k 1 ) 2 + y k y k 1 ) 2, 1 k n. Para gerar a curva entre P k 1 e P k, os splines cúbicos xt) e yt) devem ser avaliados com o parâmetro t percorrendo o intervalo [t k 1, t k ]. Tarefa Parte 1) Implemente um programa para construir o spline cúbico interpolador com a condição not a knot, dados os pontos x i e os valores y i de uma função nestes pontos, para i n. O programa deve calcular e imprimir os valores m i, i n, e o valor do spline em um ponto x especificado. Imprima também o valor de n e os valores de x i e y i. O sistema linear tridiagonal deve ser resolvido pelo método descrito no Exercício Programa 1. Teste o seu programa com o seguinte problema: Um CDB pré-fixado com investimento inicial igual a F é um depósito a prazo para T dias úteis, cujo valor de resgate é V = F 1 + y T ) T 252 onde y T é a taxa pré-fixada anualizada para um período de T dias úteis, obtida por interpolação da estrutura de taxas de juros vigentes na data de cálculo. 4
No dia 3/1/26 a estrutura de taxas de juros consistia dos seguintes valores: Dias Úteis Taxas 1 13,67% 21 13,5939296874674% 42 13,593% 63 13,4175698997828% 126 13,193493568555% 252 13,1118765655795% 54 13,316985654568% 756 13,449763373259% Calcular, nesta data, o valor de um CDB pré-fixado de 3 meses vencendo em 3/1/27 62 dias úteis ) com investimento inicial F = R$1.,. Note que o valor y T obtido da interpolação é usado para calcular V, que deverá ser impresso também. Parte 2) Implemente um programa que usa splines cúbicos periódicos para a construção de curvas fechadas no plano, dadas as coordenadas de n + 1 pontos P, P 1,...,P n, onde P n = P. O programa deve calcular e imprimir os valores t k do parâmetro, x t k ) e y t k ), k n. Imprima também o valor de n e as coordenadas dos pontos P k. Os sistemas lineares devem ser resolvidos pelo método descrito no Apêndice. Teste o seu programa com os seguintes dados: k 1 2 3 4 5 6 7 8 9 1 11 x k 25 19 13 9 5 2.2 1 3 8 13 18 25 y k 5 7.5 9.1 9.4 9 7.5 5 2.1 2 3.5 4.5 5 Para ver a curva obtida, seria necessário calcular xt), yt)) para vários valores do parâmetro t além dos valores t k, e plotar a curva formada pelos pontos com estas coordenadas. Para a entrega do programa, no entanto, imprima apenas o que foi pedido. Obs.: Faça todas as contas usando precisão dupla. Para a impressão dos resultados, use um formato reduzido, com 5 algarismos significativos. 5
Apêndice: sistemas lineares tridiagonais periódicos Considere o sistema linear b 1 x 1 + c 1 x 2 + a 1 x n = d 1 a i x i 1 + b i x i + c i x i+1 = d i, 2 i n 1 c n x 1 + a n x n 1 + b n x n = d n Sistemas lineares deste tipo aparecem na construção de splines cúbicos periódicos e em várias outras situações envolvendo periodicidade. Eles podem ser resolvidos a partir do método de eliminação de Gauss para sistemas lineares tridiagonais da seguinte forma. Denote por à a parte tridiagonal da matriz A do sistema linear: à = b 1 c 1 a 2 b 2 c 2......... a n 1 b n 1 c n 1 a n b n Então, Ax pode ser escrito na forma Ax = Ãx + x n Logo a solução de Ax = d satisfaz a 1. + x 1. c n x + x n y + x 1 z = w 5) onde y, z e w são soluções dos sistemas lineares tridiagonais Ãy = a 1,..., ) T, Ãz =,..., c n ) T e Ãw = d, respectivamente. Uma vez calculados y, z e w, obtemos x 1 e x n a partir das primeira e última componentes de 5), o que equivale a resolver o sistema 2 2 1 + z 1 )x 1 + y 1 x n = w 1 z n x 1 + 1 + y n )x n = w n Finalmente, tendo calculado x 1 e x n, obtemos de 5) x i = w i x n y i x 1 z i, 2 i n 1. Os três sistemas lineares tridiagonais são resolvidos pelo método descrito no Exercício Programa 1. 6