Preview only show first 10 pages with watermark. For full document please download

Ep2 2006

Enunciado do EP2 de MAP2121 (cálculo numérico) de 2006

   EMBED


Share

Transcript

MAP-2121 - Segundo exerc´ıcio programa - 2006 Splines C´ ubicos Instru¸ c˜ oes gerais Os exerc´ıcios computacionais pedidos na disciplina C´alculo Num´erico tˆem por objetivo fundamental familiarizar o aluno com problemas pr´aticos que requeiram t´ecnicas num´ericas em sua solu¸c˜ao. Neste segundo programa sua tarefa ser´ a aprender e implementar um m´etodo de interpola¸c˜ao polinomial por partes usando splines c´ ubicos, al´em de aplic´a-lo na solu¸c˜ao de alguns problemas. Seu programa deve ser entregue no Panda at´e o dia 29 de novembro. N˜ao deixe para fazˆe-lo no final do prazo. O programa deve ser escrito em Linguagem C e ser compilado e executado com o compilador dispon´ıvel atrav´es do Panda. Caso vocˆe desenvolva seu programa em outro compilador, confira se ele tamb´em compila e executa no devcpp (na vers˜ao que se encontra no Panda). Programas que n˜ ao compilarem ter˜ ao notas muito baixas. Ao desenvolver seu projeto vocˆe possivelmente trocar´ a id´eias com seus colegas. Esta intera¸c˜ao ´e saud´avel e desej´ avel, vocˆes estar˜ ao aprendendo mais. O seu programa deve no entanto ser desenvolvido por vocˆe individualmente, para que vocˆe realmente saiba fazˆelo. Haver´ a controle de c´ opias e caso estas sejam detectadas, os envolvidos ter˜ao nota zero no programa e o caso ser´a levado `a coordena¸c˜ao do biˆenio. Esperamos sinceramente n˜ ao encontrar nenhum caso deste tipo. Bom trabalho e divirta-se com sua tarefa! Splines c´ ubicos Em alguns problemas de interpola¸c˜ao com muitos pontos, o uso de interpola¸c˜ ao polinomial leva a solu¸c˜oes que oscilam muito. Uma t´ecnica muito usada nestes casos ´e interpola¸c˜ ao polinomial por partes, sendo os splines c´ ubicos muito populares devido a boas propriedades de aproxima¸c˜ao e permitir gerar curvas suaves a partir dos valores tabelados de uma fun¸c˜ao. Considere uma parti¸c˜ ao do intervalo [a, b] a = x0 < x1 < · · · < xn−1 < xn = b em n subintervalos [xi−1 , xi ], 1 ≤ i ≤ n, e sejam yi = f (xi ), 0 ≤ i ≤ n, os valores de uma fun¸c˜ ao f nos pontos da parti¸c˜ao. Um spline c´ ubico interpolador ´e uma fun¸c˜ ao S(x) tal que: a) S(xi ) = yi , 0 ≤ i ≤ n. b) A restri¸c˜ ao de S a cada subintervalo [xi−1 , xi ], 1 ≤ i ≤ n, ´e um polinˆomio de grau menor ou igual a 3. c) S, S 0 e S 00 s˜ ao cont´ınuas em [a, b]. 1 O termo spline foi cunhado pelo matem´atico I. J. Schoenberg em conex˜ao com alguns problemas de ajuste de dados estudados por ele. Spline ´e o nome em inglˆes de uma r´egua fina flex´ıvel usada para desenhar curvas suaves passando por pontos prescritos. Usando teoria da elasticidade linear, pode-se mostrar que estas curvas s˜ ao aproximadamente polinˆomios c´ ubicos por partes com derivadas at´e ordem 2 cont´ınuas. Construindo splines c´ ubicos Os splines c´ ubicos interpoladores podem ser carcterizados pelos valores yi da fun¸c˜ ao e pelos valores mi = S 00 (xi ) da derivada segunda de S nos pontos da parti¸c˜ao. Para isso, denote por x ∈ [xi−1 , xi ] Si (x) = S(x), as restri¸c˜ oes de S aos intervalos [xi−1 , xi ] e por hi = xi − xi−1 os comprimentos destes intervalos, 1 ≤ i ≤ n. Ent˜ao, Si00 (x) = x − xi−1 xi − x mi−1 + mi . hi hi Integrando a express˜ ao acima duas vezes e usando a propriedade de interpola¸c˜ao obtemos Si (x) = xi − x x − xi−1 yi−1 + yi + (1) hi hi (" # " # ) 3  3 xi − x h2i xi − x x − xi−1 x − xi−1 − mi−1 + − mi 6 hi hi hi hi onde a f´ ormula ´e v´ alida para x ∈ [xi−1 , xi ]. Note que ela j´a incorpora as condi¸c˜ oes S e S 00 cont´ınuas (por que?). Para determinarmos as inc´ognitas mi , 0 usamos a continuidade de S 0 , ou seja, Si0 (xi ) = Si+1 (xi ), 1 ≤ i ≤ n − 1. Usando estas rela¸c˜ oes em (1) e ap´os uma manipula¸c˜ao das express˜oes chegamos ao seguinte sistema de equa¸c˜oes hi hi+1 mi−1 + 2mi + mi+1 = di hi + hi+1 hi + hi+1 (2) para 1 ≤ i ≤ n − 1, onde 6 di = hi + hi+1  yi+1 − yi yi − yi−1 − hi+1 hi  . (3) Note que (2) ´e um sistema linear com n − 1 equa¸c˜oes e n + 1 inc´ognitas. Pode-se mostrar que a matriz do sistema tem posto m´aximo, e portanto h´a uma infinidade de splines c´ ubicos interpoladores. Para caracterizar um u ´nico spline, ´e necess´ ario impor condi¸c˜ oes adicionais. Veremos a seguir algumas possibilidades. 2 Caracteriza¸ c˜ oes de splines c´ ubicos Veremos nesta se¸c˜ ao algumas possibilidades para se obter um u ´nico spline c´ ubico interpolador. a) Spline c´ ubico natural: ´e obtido impondo-se que as derivadas segundas de S em x0 e xn sejam nulas, isto ´e, m0 = mn = 0. Este ´e o spline gerado pela r´egua flex´ıvel. b) Spline c´ ubico completo: se conhecermos os valores y00 = f 0 (x0 ) e yn0 = 0 f (xn ) da derivada de f nos extremos do intervalo, acrescentamos duas equa¸c˜ oes ao sistema (2) a partir de S10 (x0 ) = y00 e Sn0 (xn ) = yn0 . Verifique como exerc´ıcio quais s˜ ao estas equa¸c˜oes. c) Condi¸ c˜ ao ”not a knot”: Este spline, proposto por Carl de Boor, ´e obtido impondo-se que nos intervalos [x0 , x2 ] e [xn−2 , xn ], S seja um ´ como se ”deslig´assemos os polinˆ omio de grau menor ou igual a 3. E n´ os”x1 e xn−1 . Estas condi¸c˜oes s˜ao equivalentes a S1000 (x1 ) = S2000 (x1 ) e 000 Sn−1 (xn−1 ) = Sn000 (xn−1 ), gerando o seguinte sistema (n − 1) × (n − 1): a primeira equa¸c˜ ao em (2) ´e modificada para     h1 h1 m1 + 1 − m2 = d1 , 2+ h2 h2 a equa¸c˜ ao n − 1 ´e modificada para     hn hn 1− mn−2 + 2 + mn−1 = dn−1 hn−1 hn−1 e para 2 ≤ i ≤ n − 2 usamos as mesmas equa¸c˜oes de (2). Uma vez calculados m1 , . . . , mn−1 , obtemos m0 e mn por m0 = h1 + h2 h1 hn−1 + hn hn m1 − m2 ; mn = mn−1 − mn−2 . h2 h2 hn−1 hn−1 d) Spline c´ ubico peri´ odico: quando f ´e peri´odica de per´ıodo b − a, temos y0 = yn . Podemos ent˜ ao obter o spline c´ ubico peri´odico impondo-se m0 = mn e S 0 (x0 ) = S 0 (xn ). As equa¸c˜oes para m1 , . . . , mn ficam iguais a: • i = 1: use m0 = mn para obter 2m1 + h2 h1 m2 + mn = d 1 . h1 + h2 h1 + h2 • 2 ≤ i ≤ n − 1: use as equa¸c˜oes dadas por (2). • i = n: Use Sn0 (xn ) = S10 (x0 ) para obter h1 hn m1 + mn−1 + 2mn = dn h1 + hn h1 + hn onde a express˜ ao (3) com i = n deve ser avaliada usando-se hn+1 = h1 e yn+1 = y1 . 3 Nos casos a), b) e c), o sistema linear resultante ´e tridiagonal e pode ser resolvido pelo m´etodo descrito no Exerc´ıcio Programa 1. No caso d), a matriz ´e ”tridiagonal peri´ odica”, e uma maneira de se resolver o sistema linear ´e descrita no Apˆendice. Uma vez calculados os valores mi , 0 ≤ i ≤ n, podemos calcular S(x) para qualquer x ∈ [a, b]. Determine o ´ındice i tal que x ∈ [xi−1 , xi ]. Calcule ent˜ ao A = (xi − x)/hi e B = (x − xi−1 )/hi = 1 − A. De (1) temos S(x) = Ayi−1 + Byi +    h2i  3 A − A mi−1 + B 3 − B mi . 6 Curvas bidimensionais suaves Uma aplica¸c˜ ao de interpola¸c˜ao com splines c´ ubicos ´e a constru¸c˜ao de curvas suaves no plano passando por n + 1 pontos Pk com coordenadas dadas (xk , yk ), 0 ≤ k ≤ n, onde uma representa¸c˜ao geral na forma y = f (x) n˜ao ´e poss´ıvel. Portanto, devemos usar uma representa¸c˜ao param´etrica x = x(t) y = y(t), (4) onde t denota o parˆ ametro. Podemos assumir que os valores t0 , t1 ,. . . ,tn dos parˆ ametros correspondentes aos n + 1 pontos est˜ao em ordem crescente de magnitude. Construimos ent˜ao dois splines c´ ubicos que interpolam as fun¸c˜oes tabeladas (tk , xk ) e (tk , yk ), 0 ≤ k ≤ n, por meio dos quais obtemos uma representa¸c˜ ao param´etrica (4). O comprimento de arco da curva seria o parˆametro t mais apropriado. Como ele n˜ ao ´e conhecido a priori, os valores tk para o parˆametro s˜ao usualmente escolhidos como sendo as distˆancias entre pontos consecutivos: p t0 = 0, tk = tk−1 + (xk − xk−1 )2 + (yk − yk−1 )2 , 1 ≤ k ≤ n. Para gerar a curva entre Pk−1 e Pk , os splines c´ ubicos x(t) e y(t) devem ser avaliados com o parˆ ametro t percorrendo o intervalo [tk−1 , tk ]. Tarefa Parte 1) Implemente um programa para construir o spline c´ ubico interpolador com a condi¸c˜ ao not a knot, dados os pontos xi e os valores yi de uma fun¸c˜ ao nestes pontos, para 0 ≤ i ≤ n. O programa deve calcular e imprimir os valores mi , 0 ≤ i ≤ n, e o valor do spline em um ponto x especificado. Imprima tamb´em o valor de n e os valores de xi e yi . O sistema linear tridiagonal deve ser resolvido pelo m´etodo descrito no Exerc´ıcio Programa 1. Teste o seu programa com o seguinte problema: Um CDB pr´e-fixado com investimento inicial igual a F ´e um dep´osito a T prazo para T dias u ´teis, cujo valor de resgate ´e V = F (1 + yT ) 252 onde yT ´e a taxa pr´e-fixada anualizada para um per´ıodo de T dias u ´teis, obtida por interpola¸c˜ ao da estrutura de taxas de juros vigentes na data de c´alculo. 4 No dia 30/10/2006 a estrutura de taxas de juros consistia dos seguintes valores: ´ Dias Uteis 1 21 42 63 126 252 504 756 Taxas 13,67% 13,5939296874674% 13,5093% 13,4175698997828% 13,1934935685505% 13,1118765655795% 13,3169856504568% 13,449763373259% Calcular, nesta data, o valor de um CDB pr´e-fixado de 3 meses vencendo em 30/01/2007 ( 62 dias u ´teis ) com investimento inicial F = R$100.000, 00. Note que o valor yT obtido da interpola¸c˜ao ´e usado para calcular V , que dever´ a ser impresso tamb´em. Parte 2) Implemente um programa que usa splines c´ ubicos peri´odicos para a constru¸c˜ ao de curvas fechadas no plano, dadas as coordenadas de n + 1 pontos P0 , P1 ,. . . ,Pn , onde Pn = P0 . O programa deve calcular e imprimir os valores tk do parˆametro, x00 (tk ) e y 00 (tk ), 0 ≤ k ≤ n. Imprima tamb´em o valor de n e as coordenadas dos pontos Pk . Os sistemas lineares devem ser resolvidos pelo m´etodo descrito no Apˆendice. Teste o seu programa com os seguintes dados: k xk yk 0 25 5 1 19 7.5 2 13 9.1 3 4 5 6 7 8 9 9 5 2.2 1 3 8 13 9.4 9 7.5 5 2.1 2 3.5 10 18 4.5 11 25 5 Para ver a curva obtida, seria necess´ario calcular (x(t), y(t)) para v´arios valores do parˆ ametro t al´em dos valores tk , 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¸ca todas as contas usando precis˜ ao dupla. Para a impress˜ ao dos resultados, use um formato reduzido, com 5 algarismos significativos. 5 Apˆ endice: sistemas lineares tridiagonais peri´ odicos Considere o sistema linear b1 x1 + c1 x2 + a1 xn ai xi−1 + bi xi + ci xi+1 cn x1 + an xn−1 + bn xn = d1 = di , = dn 2≤i≤n−1 Sistemas lineares deste tipo aparecem na constru¸c˜ao de splines c´ ubicos peri´odicos e em v´ arias outras situa¸c˜ oes envolvendo periodicidade. Eles podem ser resolvidos a partir do m´etodo de elimina¸c˜ao de Gauss para sistemas lineares tridiagonais da seguinte forma. Denote por A˜ a parte tridiagonal da matriz A do sistema linear:   b1 c1  a2 b2  c2     . . . ˜ .. .. .. A=     an−1 bn−1 cn−1  an bn Ent˜ ao, Ax pode ser escrito na forma   ˜ + xn  Ax = Ax      0   ..      + x1  .    0  0 cn a1 0 .. . Logo a solu¸c˜ ao de Ax = d satisfaz x + xn y + x1 z = w (5) ˜ = (a1 , . . . , 0)T , onde y, z e w s˜ ao solu¸c˜ oes dos sistemas lineares tridiagonais Ay T ˜ = (0, . . . , cn ) e Aw ˜ = d, respectivamente. Uma vez calculados y, z e w, Az obtemos x1 e xn a partir das primeira e u ´ltima componentes de (5), o que equivale a resolver o sistema 2 × 2 (1 + z1 )x1 + y1 xn zn x1 + (1 + yn )xn = w1 = wn Finalmente, tendo calculado x1 e xn , obtemos de (5) xi = wi − xn yi − x1 zi , 2 ≤ i ≤ n − 1. Os trˆes sistemas lineares tridiagonais s˜ao resolvidos pelo m´etodo descrito no Exerc´ıcio Programa 1. 6