PROVA 30 – Métodos de Runge-Kutta
Transcrição
PROVA 30 – Métodos de Runge-Kutta
Universidade Federal de Santa Catarina Centro Tecnológico Departamento de Informática e Estatística LIVITEC - Laboratório de Informática para Vigilância Tecnológica CÁLCULO NUMÉRICO EM COMPUTADORES Provas e Projetos Vol.3 Bernardo Gonçalves Riso Mirela Sechi Moretti Annoni Notare Florianópolis SC, Junho 2011. 307 SUMÁRIO Dedicatória ................................................................................................................. 310 Apresentação ................................................................................................................311 PARTE I – PROVAS PROVA 26 - Método da Relaxação ......................................................................... 313 Folha de Questões Respostas PROVA 27- Introdução à Interpolação Polinomial ............................................... 322 Folha de Questões Respostas PROVA 28 – Interpolação com a Spline Cúbica ................................................... 330 Folha de Questões Respostas PROVA 29 - Integração Gaussiana ........................................................................ 340 Folha de Questões Respostas PROVA 30 - Método de Euler ................................................................................. 347 Folha de Questões Respostas PROVA 31 - Métodos de Runge-Kutta ................................................................... 354 Folha de Questões Respostas PROVA 32- Eq. Dif. Ord. de Ordem Superior ....................................................... 362 Folha de Questões Respostas PROVA Proposta (1) ................................................................................................. 372 Folha de Questões Respostas PROVA Proposta (2) ................................................................................................. 373 Folha de Questões Respostas PROVA Proposta (3) ................................................................................................. 374 Folha de Questões Respostas PROVA Proposta (4) ................................................................................................ 375 Folha de Questões Respostas 308 PARTE II – PROJETOS PROJETO 28 – Programa Gregory-Newton ............................................................. 377 PROJETO 29 – Programa Spline .............................................................................. 381 PROJETO 30 – Programa Runge_Kutta_3 ............................................................... 389 PROJETO 31 – Programa Euler ................................................................................ 392 PROJETO 32 – Programa Euler-sup ........................................................................ 395 PROJETO 33 – Programa Runge_Kutta_3-sup ......................................................... 399 PROJETO 34 – Programa Runge_Kutta_4-sup ......................................................... 403 PROJETO 35 – Programa Runge_Kutta_4-3Eq ........................................................ 406 309 DEDICATÓRIA - Dedico este livro aos milhares de estudantes que, ao longo desses 30 anos em que venho atuando como professor de Cálculo Numérico em Computadores, assistiram às minhas aulas e comigo trabalharam, ajudando-me e ensinando-me a mim tanto quanto eu a eles. A todos esses rapazes e moças agradeço muitíssimo e a todos eles desejo imensa felicidade e sucesso. Bernardo Gonçalves Riso DEDICATÓRIA – Inicialmente, dedico este livro aos estudantes que, ao longo desses 10 anos em que venho atuando como professora de Cálculo Numérico, assistiram às minhas aulas, ensinandome a mim tanto quanto eu a eles. Dedico ainda, ao Prof. Bernardo Gonçalves Riso, que muito admiro como professor e pessoa; e ao meu marido e ao meu filho, Itamar e Gianluca, respectivamente. Mirela Sechi Moretti Annoni Notare 310 APRESENTAÇÃO Neste Volume III de Cálculo Numérico em Computadores - Provas e Projetos, completamos e encerramos a coleção iniciada com o Volume I (encadernada) e continuada com o Volume II (gravada em dois CDs). Os dois primeiros volumes já constam do acervo da Biblioteca Central da UFSC e estão disponíveis para consulta e empréstimo à comunidade. Os temas tratados neste Volume III dizem respeito à Resolução de Sistemas de Equações Lineares, à Interpolação Polinomial, à Integração de Funções e à Resolução de Problemas de Valor Inicial. Os autores desejam agradecer ao senhor Itamar Annoni Notare pelo empenho na organização dos capítulos deste segundo volume de Cálculo Numérico em Computadores. Sem sua contribuição o texto ora apresentado não poderia ter o mesmo bom gosto na distribuição das matérias que compõem esta monografia. 311 PARTE I PROVAS 312 PROVA 26 – Método da Relaxação FOLHA DE QUESTÕES: Questão 1 (dissertativa) – Descreva os principais aspectos da resolução de sistemas de equações lineares relacionados com o emprego do Método da Relaxação. Por favor, no seu texto, refira-se às seguintes variantes desse método: a Sub-Relaxação e a SobreRelaxação. Ocupe, pelo menos, uma página para responder a esta pergunta. Questão 2 (numérica) – Considere o seguinte sistema de equações lineares já pronto para a aplicação do Método da Relaxação: –x + 3y – 3z – 7 = 0 2x – y + 2z + 5 = 0 2x – 3y – z + 4 = 0 Por favor, aplique o método referido fazendo duas iterações a partir da estimativa inicial x1 = y1 = z1 = 0. Indique todas as operações efetuadas e organize os valores obtidos em uma tabela com o seguinte cabeçalho: x R1 y R2 z R3 Questão 3 (numérica) – Use o Método da Relaxação para resolver o sistema dado a seguir: – 2x + y – 3z = – 7 x – 4y + z = 4 3x – y – 2z = 2 Faça três iterações a partir da estimativa inicial: x1 = x2 = x3 = 1. Por favor, não deixe de indicar todas as operações que você efetuar. Organize os resultados parciais em uma tabela com o cabeçalho seguinte: x1 R1 x2 R2 x3 R3 Questão 4 (algoritmo) – Construa um algoritmo para automatizar o uso do Método da Relaxação no caso de um sistema de n equações lineares com n incógnitas. ♣ Boa Prova! ♣ 313 RESPOSTAS: Resposta à Questão 1 – A Relaxação, a Sub-Relaxação e a Sobre-Relaxação são métodos de aproximações sucessivas (isto é, métodos iterativos) que permitem resolver sistemas de n equações lineares com n incógnitas de pequeno e médio porte. Pode-se dizer que a Relaxação é o método de referência, enquanto que a SubRelaxação e a Sobre-Relaxação são suas variantes. Dado o sistema AX = C, precisa-se preparar o sistema previamente ao emprego da relaxação. Para ficar adequado, o sistema deve ter os termos independentes situados do lado esquerdo de cada equação e, além disso, ele precisa ter todos os elementos da diagonal principal da matriz A, dos coeficientes, iguais a -1. Assim, a partir de uma estimativa inicial da solução, xi,1, com i = 1, 2, 3,...,n, podem-se obter estimativas mais precisas, substituindo-se as aproximações em cada equação e observando os valores (os resíduos) então obtidos: A primeira equação fornece o resíduo R1; A segunda equação fornece o resíduo R2; .................................................................. A n-ésima equação fornece o resíduo Rn Identifica-se o maior resíduo em valor absoluto. Em seguida, pode-se agir de acordo com uma das três seguintes estratégias: Na Relaxação, o maior resíduo é zerado. Para isso, dá-se à variável correspondente o valor que ela tinha antes acrescido do valor do resíduo. Assim, por exemplo, se o maior resíduo é o R3, dá-se a x3 o valor que já tinha acrescido do resíduo R3; Na Sub-Relaxação, menos agressiva, vamos dizer assim, o maior resíduo não chega a ser zerado, ele é apenas diminuído, mas sem mudar de sinal, agindo-se sobre a variável correspondente; e Na Sobre-Relaxação, estratégia mais agressiva, o maior resíduo troca de sinal. Tal se consegue do mesmo modo que anteriormente, isto é, agindo-se sobre a variável correspondente. Para se proceder do modo organizado, constrói-se uma tabela que tem como cabeçalho indicações para os sucessivos valores das variáveis e dos resíduos. Assim, no caso de se estar resolvendo um sistema com três incógnitas, pode-se ter o seguinte cabeçalho: ITER X RX Y RY Z RZ 314 Em que ITER é um contador de iterações (ou relaxações), X, Y e Z são as três incógnitas do sistema, e RX, RY e RZ representam os resíduos correspondentes. Durante a resolução de um mesmo sistema, pode-se variar a estratégia, caso o utilizador do método perceba que tal variação traz alguma vantagem para o aceleramento do processo iterativo. Desse modo, ele pode a alcançar a precisão desejada mais rapidamente. Resposta à Questão 2 – Na resposta a este item da prova busca-se resolver, por Relaxação, o sistema: –x + 3y – 3z – 7 = 0 2x – y + 2z + 5 = 0 2x – 3y – z + 4 = 0 a partir da estimativa inicial x = y = z = 0. Os valores obtidos ao longo do processo são armazenados na tabela a seguir: x 0 -7 -7 R1 -7 0 30 y 0 0 0 R2 5 -9 -29 z 0 0 -10 R3 4 -10 0 Substituindo as estimativas iniciais nas equações do sistema, obtêm-se os resíduos: R1 = (–1)(0) + (3)(0) + (–3)(0) – 7 = 0 + 0 + 0 – 7 = – 7 R2 = (2)(0) + (-1)(0) + (2)(0) + 5 = 0 + 0 + 0 + 5 = 5 R3 = (2)(0) + (–3)(0) +(–1)(0) + 4 = 0 + 0 + 0 + 4 = 4 O maior resíduo em valor absoluto é R1 = –7. Faz-se então a primeira iteração (relaxação): x toma o valor que tinha antes (0) acrescido do resíduo R1. Isto é, agora, tem-se x = 0 + (–7) = –7. Tem-se então: x = –7; y = 0; e z = 0. Substituindo esses valores nas equações do sistema, obtêm-se os resíduos: R1 = (–1)(-7) + (3)(0) + (–3)(0) – 7 = 7 + 0 + 0 – 7 = 0 R2 = (2)(-7) + (-1)(0) + (2)(0) + 5 = -14 + 0 + 0 + 5 = -9 R3 = (2)(-7) + (–3)(0) +(–1)(0) + 4 = -14 + 0 + 0 + 4 = -10 Agora, o maior resíduo em valor absoluto é R3 = –10. Faz-se então a segunda iteração (relaxação): z toma o valor que tinha antes (0) acrescido do resíduo R3. De modo que z = 0 + (–10) = –10. Tem-se então: x = – 7; y = 0; e z = –10. Substituindo esses valores nas equações do sistema, obtêm-se os resíduos: R1 = (–1)(-7) + (3)(0) + (–3)(-10) – 7 = 7 + 0 + 30 – 7 = 30 315 R2 = (2)(-7) + (-1)(0) + (2)(-10) + 5 = -14 + 0 -20 + 5 = -29 R3 = (2)(-7) + (–3)(0) +(–1)(-10) + 4 = -14 + 0 + 10 + 4 = 0 Observação: os resíduos estão aumentando, progressivamente, em valor absoluto, quando se esperava que eles fossem aos poucos diminuindo. Dever-se-ia, possivelmente, tomar outros valores como estimativas iniciais da solução, ou reescrever o sistema (trocando de ordem as equações) e preparando-o de novo para a aplicação do método. Resposta à Questão 3 – Trata-se de resolver o sistema – 2x + y – 3z = – 7 x – 4y + z = 4 3x – y – 2z = 2 com o emprego do Método da Relaxação, fazendo-se três iterações a partir de x = y = z = 1. Inicialmente, prepara-se o sistema. Trazendo os termos independentes para o lado esquerdo de cada equação, tem-se: – 2x + y – 3z + 7 = 0 x – 4y + z - 4 = 0 3x – y – 2z - 2 = 0 Agora, dividindo-se cada equação pelo recíproco do valor do elemento da diagonal principal, vem: – x + 0,5 y – 1,5z + 3,5 = 0 0,25x – y + 0,25z - 1 = 0 1,5x – 0,5y – z - 1 = 0 Pode-se então aplicar o método. 1ª iteração: Substituindo os valores da estimativa inicial: R1 = [–1](1) + [0,5](1) + [–1,5](1) +3,5 = -1 + 0,5 -1,5 + 3,5 = 4 – 2,5 = 1,5 R2 = [0,25](1) + [-1](1) + [0,25](1) -1 = 0,25 -1 + 0,25 – 1 = 0,5 -2 = -1,5 R3 = [1,5](1) + [–0,5](1) + [–1](1) - 1 = 1,5 – 0,5 – 1 – 1 = 1,5 - 2,5 = -1 316 Soma dos valores absolutos dos resíduos: 1,5 + 1,5 + 1 = 4 2ª iteração: Os resíduos R1 e R2 têm o mesmo valor absoluto: 1,5. Escolhe-se arbitrariamente zerar o valor de R1. Corrigindo-se o valor de x, obtém-se: x = 1 + 1,5 = 2,5. Os valores de y e z permanecem os mesmos: y = 1 e z = 1. Calculam-se os novos resíduos: R1 = [–1](2,5) + [0,5](1) + [–1,5](1) +3,5 = -2,5 + 0,5 -1,5 + 3,5 = 4 – 4 = 0 R2 = [0,25](2,5) + [-1](1) + [0,25](1) -1 = 0,625 -1 + 0,25 – 1 = 0,875 -2 = -1,125 R3 = [1,5](2,5) + [–0,5](1) + [–1](1) – 1 = 3,75 – 0,5 – 1 – 1 = 3,75 – 2,5 = 1,25 Desta vez, o resíduo de maior valor absoluto é R3 = 1,25. Soma dos valores absolutos dos resíduos: 0 + 1,125 + 1,25 = 2,375. 3ª iteração: O valor de z é corrigido: z = 1 + R3 = 1 + 1,25 = 2,25. As outras variáveis mantêm os mesmos valores: x = 2,5; e y = 1. Com esses valores calculam-se os novos resíduos: R1 = [–1](2,5) + [(0,5](1) + [–1,5](2,25) +3,5 = -2,5 + 0,5 -3,375 + 3,5 = 4 – 5,875 = -1,875 R2 = [0,25](2,5) + [-1](1) + [0,25]( 2,25) -1 = 0,625 -1 + 0,5625 – 1 = 1,1875 -2 = 0,8125 R3 = [1,5](2,5) + [–0,5](1) + [–1]( 2,25) - 1 = 3,75 -0,5 – 2,25 – 1 = 3,75 - 3,75 =0 Soma dos valores absolutos dos resíduos: 1,875 + 0,8125 + 0 = 2,6875. Os principais resultados são armazenados em uma tabela: 317 x1 R1 x2 R2 x3 R3 ∑│Ri│ i = 1, 2, 3 1 1 1,5 2,5 0 1 2,5 -1,875 1 -1,5 1 -1 4 -1,125 1 1,25 2,375 -0,8125 2,25 0 2,6875 Observação: A soma dos valores absolutos dos resíduos, ∑│Ri│i = 1, 2, 3, diminui da estimativa inicial (4) para a primeira iteração (2,375), mas cresceu logo a seguir (2,6875). Pode ser necessário efetuar mais iterações para se conseguir convergência mais nítida para a solução do sistema e para se obter resultados finais precisos. Professor: embora não tenha sido solicitado, usei a Regra de Cramer para obter x ≈ 1,41; y ≈ - 0,326; e z ≈ 1,28. Observo que, após três iterações, os valores obtidos pela Relaxação ainda estão consideravelmente distantes daqueles calculados com a Regra de Cramer. Resposta à Questão 4 – Neste caso, constrói-se um algoritmo para implementar, computacionalmente, a aplicação do Método de Relaxação a um sistema de equações lineares com n incógnitas. Considera-se que o sistema dado não está preparado para essa aplicação, de modo que se faz necessário preparar o sistema preliminarmente ao uso do método. Por esse motivo, na Entrada dos Dados manda-se ler o valor de n, os elementos aij (i, j = 1, 2, ... n) da matriz A e os elementos ci do vetor C dos termos independentes. Também se mandam ler xi,1 que constituem as estimativas iniciais da solução do sistema. A quantidade máxima de iterações permitidas, itmax, e um valor pequeno, dmin, associado à precisão requerida na apresentação dos resultados. No Processamento dos Cálculos, prepara-se o sistema para a aplicação do Método da Relaxação. Nessa preparação trazem-se os termos independentes para o primeiro membro de cada equação e faz-se com que, na diagonal principal, todos os elementos sejam iguais a -1. Em seguida, executam-se as iterações, substituindo os valores das incógnitas nas equações e calculando-se os resíduos. O maior resíduo deve ser zerado alterando-se o valor da variável correspondente. Quando se alcançar a precisão desejada, então se interrompe o processo iterativo. Na Saída dos Resultados, manda-se imprimir a resposta: xi,it em que i = 1, 2, 3, ... n. Inicialmente, representa-se o algoritmo por uma caixa preta que recebe a nome de Relaxação: 318 Dados Resultados Relaxação aij, ci, xi,1 i,j = 1,2,...,n itmax, dmin xi,it i = 1,2,...,n Ao esquema gráfico inicial dado pela caixa preta corresponde a um esboço do algoritmo escrito em pseudolinguagem de programação. Tal esquema declara os tipos das variáveis mencionadas: ALGORITMO RELAXAÇÃO REAL A(30,30), C(30), X(30,100) REAL DMIN INTEIRO ITMAX INÍCIO ... ... ... FIM DO ALGORITMO RELAXAÇÃO. Abrindo-se a caixa preta para visualização de sua composição interna, distinguem-se as três caixas que correspondem aos blocos de instruções com as principais funcionalidades de um algoritmo numérico. As caixas pretas são: Entrada dos Dados, Processamento dos Cálculos e Saída dos Resultados. RELAXAÇÃO Dados A(I,J) C(I) X(I,1) I,J=1,2,…N ITMAX DMIN ENTRADA DOS DADOS Resultados PROCESSAMENTO DOS CÁLCULOS SAÍDA DOS RESULTADOS X(I,IT) I=1,2, …N Em seguida, detalhando cada um dos três blocos de instruções, pode-se ter: 319 ALGORITMO RELAXAÇÃO REAL A(30,30), C(30), X(30,100), R(30) REAL DMIN, D, MAIOR INTEIRO ITMAX, IT, I, J, K, N INÍCIO (* ENTRADA DOS DADOS: *) LEIA N, ITMAX, DMIN PARA (I DE 1 ATÉ N) FAÇA PARA (J DE 1 ATÉ N) FAÇA LEIA A(I,J) FIM PARA LEIA C(I), X(I,1) FIM PARA (* FIM DA ENTRADA DOS DADOS. *) (* PROCESSAMENTO DOS CÁLCULOS: *) (* PREPARAÇÃO DO SISTEMA: *) PARA (I DE 1 ATÉ N) FAÇA SE (A(I,I) MAIOR 0) ENTÃO PARA (J DE 1 ATÉ N) FAÇA SE (I NÃO IGUAL J) ENTÃO A(I,J) = A(I,J)/(-A(I,I)) FIM SE FIM PARA C(I) = C(I)/A(I,J) FIM SE SE (A(I,I) MENOR 0) ENTÃO PARA (J DE 1 ATÉ N) FAÇA SE (I NÃO IGUAL J) ENTÃO A(I,J) A(I,J)/A(I,I) FIM SE FIM PARA C(I) = -C(I)/A(I,I) FIM SE A(I,I) = -1 FIM PARA (* FIM DA PREPARAÇÃO DO SISTEMA. *) (* APLICAÇÃO DA RELAXAÇÃO: *) IT = 1; D = 1000.0 ENQUANTO ((IT MENOR ITMAX) E (D MAIOR DMIN)) FAÇA (* CÁLCULO DOS RESÍDUOS: *) PARA (I DE 1 ATÉ N) FAÇA R(I) = C(I) FIM PARA PARA (I DE 1 ATÉ N) FAÇA 320 PARA (J DE 1 ATÉ N) FAÇA R(I) = R(I) + A(I,J)*X(J,IT) FIM PARA FIM PARA (* FIM DO CÁLCULO DOS RESÍDUOS. *) (* DETERMINAÇÃO DO MAIOR RESÍDUO: *) MAIOR = R(1) PARA (I DE 2 ATÉ N) FAÇA SE (ABS(R(I)) MAIOR ABS(MAIOR)) ENTÃO MAIOR = R(I); K = I FIM SE FIM PARA (* FIM DA DETERMINAÇÃO DO MAIOR RESÍDUO. *) (* ATUALIZAÇÃO DA VARIÁVEL: *) X(K,IT+1) = X(K,IT) + R(K) (* FIM DA ATUALIZAÇÃO DA VARIÁVEL. *) (* DETERMINAÇÃO DA PRECISÃO: *) D=0 PARA (I DE 1 ATÉ N) FAÇA D = D + ABS(R(I)) FIM PARA (* FIM DA DETERMINAÇÃO DA PRECISÃO. *) IT = IT + 1 FIM ENQUANTO (* FIM DA APLICAÇÃO DA RELAXAÇÃO. *) (* FIM DO PROCESSAMENTO DOS CÁLCULOS. *) (* SAÍDA DOS RESULTADOS: *) ESCREVA „FORAM REALIZADAS‟, IT,„ITERAÇÕES‟ SE (D MENOR OU IGUAL DMIN) ENTÃO ESCREVA „SOLUÇÃO DO SISTEMA:‟ PARA (I DE 1 ATÉ N) FAÇA ESCREVA „X(„,I,‟) = „,X(I,IT) FIM PARA FIM SE SE (D MAIOR DMIN) ENTÃO ESCREVA „PRECISÃO NÃO ALCANÇADA‟ FIM SE ESCREVA „FIM‟ (* FIM DA SAÍDA DOS RESULTADOS. *) FIM DO ALGORITMO RELAXAÇÃO. 321 PROVA 27 – Introdução à Interpolação Polinomial FOLHA DE QUESTÕES: Questão 1 (dissertativa) – Apresente um resumo de seu estudo sobre a interpolação polinomial. Nesse resumo, descreva o problema da interpolação e como esse problema pode ser resolvido com o emprego de polinômios. Se achar conveniente, construa gráficos e dê exemplos para ilustrar a sua exposição. Por favor, ocupe pelo menos uma página da prova com a sua resposta. Questão 2 (numérica) – Considere a tabela dada a seguir. Usando a interpolação linear, obtenha f(3). Indique todas as operações efetuadas para a obtenção desse resultado. 1,0 2,5 4,7 x y = f(x) 2,2 5,4 3,7 Questão 3 (numérica) – Empregue um polinômio interpolante do segundo grau para obter o valor de f(2,5) a partir dos pares de valores apresentados na tabela dada abaixo. Por favor, não deixe de indicar todas as operações efetuadas. 1,2 2,3 3,6 x y = f(x) 2,0 2,8 1,8 Questão 4 (algoritmo) – Use a metodologia de refinamentos sucessivos para construir um algoritmo que automatize a interpolação linear. Na Entrada dos Dados devem ser lidos os pares de valores [xi; yi = f(xi)] com i = 1, 2, 3,..., n, em que n representa a quantidade de pares de valores, e o valor de x para o qual se deseja obter o correspondente valor de y = f(x). No Processamento dos Cálculos, faça calcular esse valor de y. Na Saída dos Resultados mande imprimir o valor de x e o de seu correspondente y. ♣ Boa Prova! ♣ 322 RESPOSTAS: Resposta à Questão 1 – Na interpolação tem-se um conjunto de n pares de valores: [xi, yi = f(xi)], i = 1, 2, 3, ...n, que podem ser interpretados como pontos do gráfico de uma função f(x). Nessas circunstâncias, deseja-se conhecer o valor yk da função f(x), isto é, yk = f(xk), correspondente a um valor de xk que pertence ao intervalo [x1, xn]. Naturalmente, xk ≠ xi, i = 1, 2, 3, ...n. Para determinar yk = f(xk) pode-se usar uma técnica de interpolação polinomial. Ligando por uma reta, p(x) = ax + b, o ponto que tem abscissa imediatamente menor do que xk e o ponto que tem abscissa imediatamente maior do que x k, obtém-se uma reta. Então, lê-se, sobre a reta assim traçada, ou calcula-se p(xk) ≈ yk = f(xk) Não há, verdadeiramente, necessidade de escolher os pontos com os quais se define a reta de interpolação da maneira como foi descrita acima. Entretanto, esse procedimento é freqüentemente razoável. Além da interpolação linear, pode-se usar uma interpolação quadrática, caso em que se passa uma parábola, isto é, um polinômio do segundo grau: p(x) = ax2 + bx + c por três pontos da tabela, escolhidos convenientemente na área em que se pretende realizar a interpolação. A interpolação polinomial ainda pode ser cúbica, caso em que se usa uma curva do terceiro grau. Pode-se fazer a interpolação com o emprego de polinômios de grau ainda mais alto. Nem sempre é conveniente, contudo, usar polinômios de grau três ou superior, pois o resultado da interpolação pode não ser muito bom. Quanto aos dados, é preciso ficar atento ao fato de que a função y = f(x) deve ser contínua, pelo menos, na área em que se pretende realizar a interpolação. Se os pontos dados [xi, yi = f(xi)], i = 1, 2, 3, ...n, tiverem sido bem escolhidos, tem-se uma boa representação da função f(x), mesmo que eles estejam bem espaçados. O espaçamento: hi = xi+1 – xi , i = 1, 2,..., n-1, não precisa ser constante. Em qualquer caso de interpolação polinomial, em que se deseja ter a expressão analítica do polinômio interpolante, p(x), por exemplo, para fins de derivação, é preciso determinar os coeficientes do polinômio. No caso da reta, resolve-se um sistema de duas 323 equações lineares com duas incógnitas (a e b); no caso da parábola, um sistema de três equações lineares com três incógnitas (a, b e c); e assim por diante. Observação 1: Se xk está fora do intervalo [x1, xn], isto é, xk < x1 ou xk > xn, então o procedimento adotado para a determinação de yk = f(xk) é denominado, algumas vezes, extrapolação. Observação 2: Várias técnicas foram desenvolvidas com a finalidade de facilitar o uso da interpolação. Entre as técnicas mais importantes, é possível citar aquela que emprega os Polinômios de Lagrange e a que usa os Polinômios de Gregory-Newton. Resposta à Questão 2 - Usaremos a interpolação linear para obter f(3) a partir dos dados apresentados na tabela indicada abaixo 1,0 2,5 4,7 x f(x) 2,2 5,4 3,7 Como 2,5 < 3 < 4,7, tomaremos os pontos (2,5; 5,4) e (4,7; 3,7) para definir a reta interpolante que, nesse caso, pode ser escrita como: p(x) = ax + b Determinação dos coeficientes a e b da reta: Para x = 2,5, tem-se a(2,5) + b = 5,4. Para x = 4,7, tem-se a(4,7) + b = 3,7. Da primeira equação: a = [5,4 – b]/(2,5). Substituindo esse resultado na segunda equação, (4,7)[5,4 – b]/(2,5) + b = 3,7. Então, pode-se fazer o cálculo de b: [(4,7)(5,4) – (4,7)b]/2,5 + b = 3,7, ou seja, [25,38 – 4,7 b]/2,5 + b = 3,7. Ou [10,152 – 1,88 b] + b = 3,7 Isto é, -0,88 b = -6,452 ou b = 7,332 Cálculo de a: a = (3,7 – b)/4,7 a = (3,7 – 5,041)/4,7 ou a = -0,773 Conclusão: f(3) ≈ p(3) = -0,773 (3) + 7,332 = 5,013. Tem-se 3,7 < 5,013 < 5,4, indicando um resultado dentro das expectativas. 324 Resposta à Questão 3 – Nesta resposta vamos empregar um polinômio do segundo grau p(x) = ax2 + bx + c para obter o valor de f(2,5) a partir dos pares de valores dados no enunciado da questão. Construiremos um sistema de três equações lineares com três incógnitas para obter os coeficientes da parábola. Indicaremos todas as operações efetuadas. 1,2 2,3 3,6 x f(x) 2,0 2,8 1,8 Para x = 1,2, tem-se: a(1,2)2 + b(1,2) + c = 2,0 Para x = 2,3, tem-se: a(2,3)2 + b(2,3) + c = 2,8 Para x = 3,6, tem-se: a(3,6)2 + b(3,6) + c = 1,8 Tem-se que 1,22 = 1,44; 2,32 = 5,29; 3,62 = 12,96 O sistema de equações lineares pode ser escrito na forma matricial: 1,44 5,29 12,96 1,2 2,3 3,6 1 1 1 a b c = 2,0 2,8 1,8 Esse sistema será resolvido pela Regra de Cramer. Os determinantes serão calculados com a Regra de Sarrus. Cálculo do determinante principal D da matriz dos coeficientes: 1,44 1,2 1 5,29 2,3 1 12,96 3,6 1 D = (1,44*2,3*1) + (1,2*1*12,96) + (1*3,6*5,29) – (1*2,3*12,96) – (1*3,6*1,44) – (1*5,29*1,2) = 3,312 + 15,552 + 19,044 – 29,808 – 5,184 – 6,348 = 37,908 – 41,340 = -3,432 Primeiro determinante característico D1: 2,0 1,2 1 2,8 2,3 1 1,8 3,6 1 D1 = (2,0*2,3*1) + (1,2*1*1,8) + (1*3,6*2,8) - (1*2,3*1,8) – (1*3,6*2,0) – (1*2,8*1,2) 325 = 4,60 + 2,16 + 10,08 – 4,14 – 7,20 – 3,36 = 16,84 – 14,7 = 2,14 Segundo determinante característico D2: 1,44 2,0 1 5,29 2,8 1 12,96 1,8 1 D2 = (1,44*2,8*1) + (2,0*1*12,96) + (1*1,8*5,29) - (1*2,8*12,96) – (1*1,8*1,44) – (1*5,29*2,0) = 4,032 + 25,92 + 9,522 – 36,288 – 2,592 – 10,58 = 39,474 – 49,46 = -9,986 Terceiro determinante característico D3: 2,0 1,2 2,0 2,8 2,3 12,8 1,8 3,6 1,8 D3 = (1,44*2,3*1,8) + (1,2*2,8*12,96) + (2,0*3,6*5,29) – (2,0*2,3*12,96) – (2,8*3,6*1,44) – (1,8*5,29*1,2) = 5,9616 + 43,5456 + 38,088 – 59,616 – 14,5152 – 11,4264 = 87,5952 – 85,5576 = 2,0376 Coeficientes da parábola: a = D1/D = 2,14/-3,432 = -0,6235 b = D2/D = -9,986/-3,432 = 2,91 c = D3/D = 2,0376/-3,432 = -0,594 Então, f(2,5) ≈ p(2,5) = -0,6235(2,5)2 + 2,91(2,5) + (-0,594) f(2,5) ≈ -3,897 + 7,285 – 0,594 = 2,794 que é um resultado coerente com os dados. Resposta à Questão 4 – Nesta questão usaremos a metodologia de refinamentos sucessivos para construir um algoritmo que automatize a interpolação linear. Dados Resultados INTPOLINEAR n, xi, yi ,i = 1,2,...,n xint xint, yint 326 Na Entrada dos Dados devem ser lidos os pares de valores [xi; yi = f(xi)] com i = 1, 2, 3,..., n, em que n representa a quantidade de pares de valores, e o valor de xint para o qual se deseja obter o correspondente valor de yint = f(xint). Na Saída dos Resultados espera-se ter o valor de xint e de seu correspondente yint. Um esboço preliminar do algoritmo, em versão literal, já pode ser apresentado: ALGORITMO INTPOLINEAR REAL X(10), Y(10) REAL XINT, YINT INTEIRO I, N INÍCIO . . . FIM DO ALGORITMO INTPOLINEAR. Agora, abre-se a caixa preta para visualização de três novas caixas pretas: Entrada dos Dados, Processamento dos Cálculos e Saída dos Resultados: INTPOLINEAR Dados ENTRADA DOS DADOS N, X(I),Y(I) I = 1, 2,...,N XINT PROCESSAMENTO DOS CÁLCULOS SAÍDA DOS RESULTADOS Resultados XINT, YINT Detalhamento da Entrada dos Dados: (* ENTRADA DOS DADOS: *) LEIA N, XINT PARA (I DE 1 ATÉ N) FAÇA LEIA X(I), Y(I) FIM PARA (* FIM DA ENTRADA DOS DADOS. *) Detalhamento do Processamento dos Cálculos: (* PROCESSAMENTO DOS CÁLCULOS: *) (* POSIÇÃO DE XINT NA TABELA: *) PARA (I DE 1 ATÉ N-1) FAÇA 327 SE (( X(I) MENOR XINT) E ( XINT MENOR X(I+1))) ENTÃO XA = X(I); YA = Y(I) XB = X(I+1); YB = Y(I+1) FIM SE FIM PARA (* DETERMINANTES DA MATRIZ: *) D = XA*1 – 1*XB D1 = YA*1 – 1*YB D2 = XA*YB – YA*XB (* COEFICIENTES DA RETA: *) A = D1/D; B = D2/D (* INTERPOLAÇÃO: *) YINT = A*XINT + B (* FIM DO PROCESSAMENTO DOS CÁLCULOS. *) Detalhamento da Saída dos Resultados: (* SAÍDA DOS RESULTADOS: *) ESCREVA „PARA X = „, XINT ESCREVA „TEM-SE Y =„, YINT (* FIM DA SAÍDA DOS RESULTADOS. *) Reunindo os três blocos de instruções e definindo os tipos de todas as variáveis utilizadas, tem-se o algoritmo INTPOLINEAR em sua versão completa: ALGORITMO INTPOLINEAR REAL X(10), Y(10), XINT, YINT REAL XA, XB, D, D1, D2, A, B INTEIRO I, N INÍCIO (* ENTRADA DOS DADOS: *) LEIA N, XINT PARA (I DE 1 ATÉ N) FAÇA LEIA X(I), Y(I) FIM PARA (* FIM DA ENTRADA DOS DADOS. *) (* PROCESSAMENTO DOS CÁLCULOS: *) (* POSIÇÃO DE XINT NA TABELA: *) PARA (I DE 1 ATÉ N-1) FAÇA SE (( X(I) MENOR XINT) E ( XINT MENOR X(I+1))) ENTÃO 328 XA = X(I); YA = Y(I) XB = X(I+1); YB = Y(I+1) FIM SE FIM PARA (* DETERMINANTES DA MATRIZ: *) D = XA*1 – 1*XB D1 = YA*1 – 1*YB; D2 = XA*YB – YA*XB (* COEFICIENTES DA RETA: *) A = D1/D; B = D2/D (* INTERPOLAÇÃO: *) YINT = A*XINT + B (* FIM DO PROCESSAMENTO DOS CÁLCULOS. *) (* SAÍDA DOS RESULTADOS: *) ESCREVA „PARA X = „, XINT ESCREVA „TEM-SE Y =„, YINT (* FIM DA SAÍDA DOS RESULTADOS. *) FIM DO ALGORITMO INTPOLINEAR. 329 PROVA 28 – Interpolação com Splines FOLHA DE QUESTÕES: Questão 1 (dissertativa) - escreva um resumo do tópico Interpolação com Splines. Por favor, produza um texto com, no mínimo, uma página. De modo condensado, apresente: (a) as principais definições; (b) as condições que devem ser estabelecidas para garantir que a solução teórica mantenha as características da solução gráfica; e (c) uma breve indicação da dedução das fórmulas. Se achar conveniente, enriqueça a sua apresentação com um gráfico que ilustre a curva spline S3(x) mostrando as partes em que ela é dividida: s1(x), s2(x),..., sn(x). Questão 2 (numérica) – Por favor, use a teoria de interpolação com a Spline Cúbica Natural para obter a expressão algébrica de s1(x) a partir da tabela dada abaixo: i 0 1 2 3 4 0,0 0,1 0,2 0,3 0,4 xi yi = f(xi) 2,0 2,3 2,0 2,1 2,2 Questão 3 (numérica) – Empregue a interpolação com a Spline Cúbica Natural para obter y = f(0,13) a partir da tabela dada abaixo. Se desejar, reutilize os resultados obtidos na resposta à questão anterior. Por favor, indique todas as operações efetuadas. 0,0 0,1 0,2 0,3 0,4 x y = f(x) 2,0 2,3 2,0 2,1 2,2 Questão 4 (algoritmo) – Construa um algoritmo para utilizar, de maneira automática, no computador, uma interpolação para a função y = f(x) com a Spline Cúbica Interpolante Natural. Na Entrada de Dados, faça-o ler as abscissas e as ordenadas [xi, yi] i = 0, 1, 2, ..., n dos pontos que serão empregados na interpolação, assim como um valor para a variável xint, para a qual se deseja obter yint = f(xint). ♣ Boa Prova! ♣ 330 RESPOSTAS: Resposta à Questão 1 – Uma spline é uma régua de material flexível que se adapta bem a uma distribuição de pontos do gráfico de uma função contínua. Quando é empregada, ela permite traçar uma curva que se aproxima do gráfico da função. Desse modo, pode-se fazer uma interpolação de maneira gráfica, buscando, para valores de x não tabelados, os correspondentes valores de y sobre a curva traçada com a régua. Entretanto, os cientistas fizeram um tratamento matemático desse tipo de interpolação. As curvas, nesse caso, são denominadas de splines e podem ser de diferentes graus. As curvas splines de terceiro grau correspondem a polinômios de grau três. Quando, para essas curvas, se estabelecem certas condições, têm-se as Splines Cúbicas Naturais, que são muito empregadas na prática da ciência e da técnica. Por esse motivo, são estudadas em muitos cursos universitários. A spline cúbica pode ser representada por S3(x) Ela é uma função polinomial do terceiro grau por partes, quer dizer, cada uma de suas partes, sk(x), é um polinômio de grau três: sk(x) = Ak(x-xk)3 + Bk(x-xk)2 + Ck(x-xk) + Dk A função sk(x) é uma cúbica no intervalo [xk-1, xk]. O índice k assume os valores: 1, 2,... , n. Apesar de S3(x) ser constituída de vários polinômios concatenados, o seu gráfico tem um aspecto de ondulações suaves, isto é, sem variações bruscas de curvatura. Para garantir esse aspecto, a construção de S3(x) precisa assumir uma série de condições, entre as quais, ter as derivadas de primeira e segunda ordem como funções contínuas. s1(x) Y s2(x) S3(x) X x0 x1 x2 xn 331 Importante: a determinação de S3(x) exige o cálculo de quatro coeficientes para cada k (cada polinômio sk(x)), perfazendo o total de 4n coeficientes. Para s1(x): A1 B1 C1 D1 Para s2(x): A2 B2 C2 D2 ... Para sn(x): An Bn Cn Dn As expressões que permitem calcular os valores desses coeficientes são as seguintes: Ak = [s”k(xk) – s”k-1(xk-1)]/6hk Bk = [s”k(xk)]/2 Ck = {[f(xk) – f(xk-1)]/hk} + [2 hk s”k(xk) + hk s”k-1(xk-1)]/6 Dk = f(xk) Nessas expressões, o símbolo s”k(xk) representa a derivada de segunda ordem da função sk(x) calculada para x = xk. O índice k pode assumir os seguintes valores: 0, 1,..., n. Como, na spline natural, as réguas iniciam e terminam como retas, então s”0(x0) = 0 (no início da régua spline) e s”n(xn) = 0 (no final da régua spline). Já, hk = xk – xk-1 está associado ao espaçamento das abscissas. Esse espaçamento pode ser constante ou variável. Resposta à Questão 2 – Neste caso, têm-se cinco pontos, logo, n = 4. A Spline Cúbica Natural S3 vai ser usada para se obter a expressão algébrica de s1(x) correspondente aos dados. i 0 1 2 3 4 0,0 0,1 0,2 0,3 0,4 xi yi = f(xi) 2,0 2,3 2,0 2,1 2,2 A expressão procurada tem o seguinte formato geral: sk(x) = Ak(x-xk)3 + Bk(x-xk)2 + Ck(x-xk) + Dk 332 Para k = 1, tem-se s1(x) = A1(x-x1)3 + B1(x-x1)2 + C1(x-x1) + D1 O valor de x1 pode ser lido na tabela: x1 = 0,1. É preciso determinar os valores dos coeficientes A1, B1, C1 e D1. Essa determinação envolve o cálculo das derivadas de segunda ordem: s”k(xk), em que k = 0, 1, 2, 3, 4. Para simplificar a notação, faz-se s”k(xk) = zk, k = 0, 1, 2, 3, 4. Como a spline cúbica é do tipo natural, então z0 = z4 = 0 Determinam-se as outras três derivadas de segunda ordem, isto é, z1, z2 e z3, com a resolução do sistema de três equações lineares com três incógnitas: AZ = W, em que a matriz A tem os seguintes elementos: A = 2(h1 + h2) h2 0 h2 2(h2 + h3) h3 0 h3 2(h3 + h4) Em que o espaçamento é constante: h1 = h2 = h3 = h4 = 0,1. De modo que se obtém: A = 0,4 0,1 0,0 0,1 0,4 0,1 0,0 0,1 0,4 O vetor dos termos independentes é W = 6[(y2 – y1)/h2 – (y1 – y0)/h1] 6[(y3 – y2)/h3 – (y2 – y1)/h2] 6[(y4 – y3)/h4 – (y3 – y2)/h3] Substituindo os valores: W = 6[(2,0 – 2,3)/0,1 – (2,3 – 2,0)/ 0,1] 6[(2,1 – 2,0)/ 0,1 – (2,0 – 2,3)/ 0,1] 6[(2,2 – 2,1)/ 0,1 – (2,1 – 2,0)/ 0,1] Efetuando os cálculos: 333 W = -36 24 0 O sistema AW = Z pode ser resolvido pela Regra de Cramer. Cálculo dos determinantes: det = (0,4)(0,4)(0,4) + 0 + 0 – 0 – (0,1)(0,1)(0,4) – (0,4)(0,1)(0,1) = 0,064 – 0,004 – 0,004 = 0,056 det1 = (–36)(0,4)(0,4) + 0 + 0 – 0 – (0,1)(0,1)(36) – (0,4)(24)(0,1) = –5,76 – 0,36 – 0,96 = –7,08 det2 = (0,4)(24)(0,4) + 0 + 0 – 0 – 0 – (0,4)(0,1)( –36) = 3,84 + 1,44 = 5,28 det3 = 0 + 0 + (–36)(0,1)(0,1) – 0 – (24)(0,1)(0,4) – 0 = –0,36 – 0,96 = –1,32 Daí vem a solução do sistema: z1 = det1/det = –7,08/0,056 = –126,4 z2 = det2/det = 5,28/0,056 = 94,29 z3 = det3/det = –1,32/0,056 = –23,57 Agora, pode-se obter cada um dos coeficientes de s1(x), considerando k = 1: A1 = [z1 – z0][(6)(h1)] = [–126,4 – 0]/[(6)(0,1)] = –210,7 B1 = z1/2 = – 126,4/2 = – 63,2 C1 = {[y1 – y0]/h1} + [2 h1 z1 + h1 z0]/6 = {[2,3 – 2,0]/0,1} + [2(0,1)(–126,4) + (0,1)(0)]/6 = –1,213 D1 = y1 = 2,3 Então, s1(x) = –210,7 (x - 0,1)3 – 63,2 (x - 0,1)2 –1,213 (x - 0,1) + 2,3 Resposta à Questão 3 – Neste caso, deseja-se empregar a interpolação com a Spline Cúbica Natural para o cálculo de y = f(0,13) a partir dos dados apresentados na tabela i 0 1 2 3 4 0,0 0,1 0,2 0,3 0,4 xi yi = f(xi) 2,0 2,3 2,0 2,1 2,2 334 Podem-se reutilizar os valores obtidos na resposta à questão anterior. Assim, como 0,13 pertence ao intervalo [0,1; 0,2], utiliza-se o polinômio: s3(x) = A3(x-x3)3 + B3(x-x3)2 + C3(x-x3) + D3 O cálculo de seus coeficientes pode ser realizado com os valores das derivadas de segunda ordem já obtidos na questão anterior: z0 = 0; z1 = –126,4; z2 = 94,29; z3 = –23,57; z4 = 0 A3 = [z3 – z2]/[(6)(h3)] = [–23,57 – 94,29]/[(6)(0,1)] = –117,86/0,6 = –196,43 B3 = [z3]/2 = –23,57/2 = –11,785 C3 = {[y3 – y2]/h3}+ [2 h3 z3 + h3 z2]/6 = {[2,1 – 2,0]/0,1}+ [2(0,1)(–23,57) + (0,1)( 94,29)]/6 = {1} + [–4,714 + 9,429]/6 = 1 + 0,7858 = 1,7858 D3 = y3 = 2,1 Assim, f(0,13) ≈ s3(0,13) = –196,43 (0,13 – 0,3)3 –11,785 (0,13 – 0,3)2 + 1,7858 (0,13 – 0,3) + 2,1 = 0,9651 – 0,3406 – 0,3036 + 2,1 = 2,42 Conclusão: f(0,13) ≈ 2,42 que é um valor dentro das expectativas. Resposta à Questão 4 – Nesta questão, constrói-se um algoritmo para realizar uma interpolação para a função y = f(x) com a Spline Cúbica Interpolante Natural. Considera-se que são fornecidas as coordenadas cartesianas de cinco pontos. Também é dado o valor de xint para o qual se deseja yint. O espaçamento pode ser variável: hi = xi+1 – xi, i = 0, 1, 2, 3. Inicialmente, desenha-se a caixa preta que representa o algoritmo no mais alto nível de abstração: Dados Resultados SPLINES xint, xi, yi , i = 0,1,2,3,4 xint xint, yint 335 Na Entrada dos Dados manda-se ler o valor xint (valor de x para o qual se quer fazer a interpolação). Manda-se ler cada um dos os pares de valores [xi; yi = f(xi)] com i = 0, 1, 2, 3, 4. Na Saída dos Resultados espera-se apresentar o valor de xint e de seu correspondente yint = f(xint). Segue um esboço preliminar do algoritmo, desta vez, em versão literal: ALGORITMO SPLINES REAL X(5), Y(5) REAL XINT, YINT INTEIRO I INÍCIO . . . FIM DO ALGORITMO SPLINES. Em seguida, na segunda etapa de desenvolvimento do algoritmo, abre-se a caixa preta para visualização de seu interior. Surgem três novas caixas pretas: Entrada dos Dados; Processamento dos Cálculos; e Saída dos Resultados. SPLINES Dados ENTRADA DOS DADOS PROCESSAMENTO DOS CÁLCULOS XINT X(I),Y(I) I = 0,1...4 SAÍDA DOS RESULTADOS Resultados XINT, YINT Então, detalham-se os três blocos internos. Os blocos de Entrada dos Dados e de Saída dos Resultados formalizam o comportamento já descrito acima. O bloco de Processamento dos Cálculos, por sua vez, por ter mais complexidade, pode ser repartido em cinco etapas: 1. Construção do sistema (matriz A e vetor W dos termos independentes) 2. Resolução do sistema pela Regra de Cramer (cálculo de determinantes) 3. Localização de xint no intervalo de interpolação 4. Cálculo dos coeficientes Ak, Bk, Ck e Dk do sk(x) a que pertence xint. 5. Cálculo de yint. 336 As segundas derivadas de f(x), isto é, s”k(xk), k = 0, 1, ..., 4 são denotadas no algoritmo por Z(0), Z(1),..., Z(4). Os valores de Z(0) e de Z(4) são nulos porque trabalha-se com a spline cúbica natural. Já, os valores de Z(1), Z(2) e de Z(3) são obtidos através da resolução de um sistema de três equações lineares com essas três incógnitas. ALGORITMO SPLINE (* REALIZA INTERPOLAÇÃO COM SPLINE CÚBICA NATURAL, CONSIDERANDO CINCO PONTOS COM ESPAÇAMENTO VARIÁVEL. *) REAL XINT, YINT, DET, DET1, DET2, DET3 REAL X(5), Y(5), W(3), Z(3) REAL AS(4), BS(4), CS(4), DS(4), H(4) REAL A(3, 3) INTEIRO I, K, N INÍCIO (* ENTRADA DOS DADOS: *) LEIA XINT PARA (I DE 0 ATÉ 4) FAÇA LEIA X(I), Y(I) FIM PARA (* FIM DA ENTRADA DOS DADOS. *) (* PROCESSAMENTO DOS CÁLCULOS: *) (* CÁLCULO DOS ESPAÇAMENTOS: *) PARA (I DE 1 ATÉ 4) FAÇA H(I) = X(I) – X(I–1) FIM PARA (* FIM DO CÁLCULO DOS ESPAÇAMENTOS. *) (* CONSTRUÇÃO DO SISTEMA: *) (* CONSTRUÇÃO DA MATRIZ A: *) A(1,1) = 2*(H(1)+H(2)); A(1,2) = H(2); A(1,3) = 0 A(2,1) = H(2); A(2,2) = 2*(H(2)+H(3)); A(2,3) = H(3) A(3,1) = 0; A(3,2) = H(3); A(3,3) = 2*(H(3)+H(4)) (* FIM DA CONSTRUÇÃO DA MATRIZ A. *) (*VETOR W DOS TERMOS INDEPENDENTES: *) 337 W(1) = 6*((Y(2)-Y(1))/H(2) – (Y(1)-Y(0))/H(1)) W(2) = 6*((Y(3)-Y(2))/H(3) – (Y(2)-Y(1))/H(2)) W(3) = 6*((Y(4)-Y(3))/H(4) – (Y(3)-Y(2))/H(3)) (* FIM DO VETOR W DOS TERMOS INDEPENDENTES. *) (* FIM DA CONSTRUÇÃO DO SISTEMA AZ = W. *) (* RESOLUÇÃO DO SISTEMA POR CRAMER: *) (* DETERMINANTE PRINCIPAL: *) DET= A(1,1)*A(2,2)*A(3,3)+A(1,2)*A(2,3)*A(3,1)+A(1,3)*A(3,2)*A(2,1)A(1,3)*A(2,2)*A(3,1)-A(2,3)*A(3,3)*A(1,1)-A(3,3)*A(2,1)*A(1,2) (* PRIMEIRO DETERMINANTE CARACTERÍSTICO: *) DET1=W(1)*A(2,2)*A(3,3)+A(1,2)*A(2,3)*W(3)+A(1,3)*A(3,2)*W(2) -A(1,3)*A(2,2)*W(3)-A(2,3)*A(3,2)*W(1)-A(3,3)*W(2)*A(1,2) (* SEGUNDO DETERMINANTE CARACTERÍSTICO: *) DET2=A(1,1)*W(2)*A(3,3)+W(1)*A(2,3)*A(3,1)+A(1,3)*W(3)*A(2,1) -A(1,3)*W(2)*A(3,1)-A(2,3)*W(3)*A(1,1)-A(3,3)*A(2,1)*W(1) (* TERCEIRO DETERMINANTE CARACTERÍSTICO: *) DET3=A(1,1)*A(2,2)*W(3)+A(1,2)*W(2)*A(3,1)+W(1)*A(3,2)*A(2,1) -W(1)*A(2,2)*A(3,1)-W(2)*A(3,2)*A(1,1)-W(3)*A(2,1)*A(1,2) (* SOLUÇÃO DO SISTEMA: *) Z(1) = DET1/DET; Z(2) = DET2/DET; Z(3) = DET3/DET (* FIM DA RESOLUÇÃO DO SISTEMA POR CRAMER. *) (* LOCALIZAÇÃO DE XINT: *) I=0 ENQUANTO (I MENOR OU IGUAL 4) FAÇA SE ((XINT MAIOR X(I)) E (XINT MENOR X(I+1))) ENTÃO K = I+1 I=5 FIM SE I=I+1 FIM ENQUANTO (* FIM DA LOCALIZAÇÃO DE XINT. *) (* CÁLCULO DOS COEFICIENTES DE SK(X): *) AS(K) = (Z(K) – Z(K-1))/(6*H(K)) BS(K) = Z(K)/2 338 CS(K) = (Y(K) – Y(K-1))/H(K) + (2*H(K)*Z(K) + Z(K-1)*H(K))/6 DS(K) = Y(K) (* FIM DO CÁLCULO DOS COEFICIENTES DE SK(X). *) (* CÁLCULO DE YINT = SK(XINT): *) YINT = AS(K)*(XINT–X(K))*(XINT–X(K))*(XINT–X(K))+ BS(K)*(XINT–X(K))*(XINT–X(K))+ CS(K)*(XINT – X(K))+ DS(K) (* FIM DO CÁLCULO DE YINT = SK(XINT). *) (* FIM DO PROCESSAMENTO DOS CÁLCULOS. *) (* SAÍDA DOS RESULTADOS: *) ESCREVA „INTERPOLAÇÃO COM SPLINE NATURAL‟ ESCREVA „PARA X = „, XINT, ESCREVA „TEM-SE Y = „, YINT (* FIM DA SAÍDA DOS RESULTADOS. *) FIM DO ALGORITMO SPLINE. Relatório que será produzido na execução do algoritmo: INTERPOLAÇÃO COM SPLINES PARA X = ... TEM-SE Y = ... 339 PROVA 29 – Integração Gaussiana FOLHA DE QUESTÕES: Questão 1 (dissertativa) – Descreva alguns dos aspectos mais importantes da Integração Gaussiana. Se achar conveniente, apresente fórmulas e figuras para ilustrar e enriquecer sua descrição. Por favor, não ocupe menos do que uma página. Questão 2 (numérica) – Use o Método de Gauss-Legendre com Dois Pontos para obter o valor da integral definida: 2,0 I= ∫ ( 4x – 12)dx 4 0,0 Por favor, apresente a indicação de todos os cálculos efetuados. Compare o resultado com o valor exato da integral. Questão 3 (numérica) – Por favor, considere a função f(x) = sen(x) – 3x + 1. Calcule a integral definida de f(x) com os seguintes limites de integração: limite inferior: a = 0,8; limite superior: b = 1,0. Utilize a Integração Gaussiana com dois pontos: I = A0 F(t0) + A1 F(t1) em que F(t) = [(b – a)/2]f{[(b – a)/2]t + [(b + a)/2]}; A0 = A1 = 1; t0 = - 1/ 3 ; e t1 = 1/ 3 . Questão 4 (algoritmo) – Elabore um algoritmo para automatizar a aplicação do Método de Gauss no caso da integração da função f(x) = 3e –x/2. Por favor, na Entrada dos Dados, mande ler a e b, os limites de integração; no Processamento dos Cálculos, faça obter o valor da integral I; e, na Saída dos Resultados, mande escrever o valor de I. ♣ Boa Prova! ♣ 340 RESPOSTAS: Resposta à Questão 1 – A integração gaussiana (Método de Gauss-Legendre) é um poderoso recurso de natureza numérica para o cálculo de integrais definidas. Isto, porque, em vários casos práticos, a aplicação desse método leva a resultados bastante precisos. Entretanto, emprega-se a integração gaussiana quando é difícil realizar a integração por processos analíticos. Diferentemente de outros métodos, tais como os métodos de Newton-Côtes, entretanto, para o emprego do Método de Gauss-Legendre é preciso conhecer a expressão algébrica da função integranda. Quer dizer, para se obter, pelo Método de Gauss-Legendre, o valor da integral b I= f ( x)dx a é preciso que se conheça a expressão algébrica que define f(x), além do valor de a (limite inferior do intervalo de integração) e do valor de b (limite superior desse intervalo). De posse dessas informações, pode-se utilizar a integração gaussiana em diferentes modalidades: No caso de se considerar dois pontos (recurso mais simples), tem-se b I= f ( x)dx ≈ IG2 = A0F(t0) + A1F(t1) a em que F(t) = [(b – a)/2]f{[(b – a)/2]t + (b – a)/2} e A0 = A1 = 1; t0 = –1/ 3 ≈ –0,577350269; e t1 = +1/ 3 ≈ +0,577350269 Já, no caso de se empregar a integração gaussiana com quatro pontos (recurso que permite resultados mais precisos que a abordagem anterior), tem-se 341 b I= f ( x)dx ≈ IG4 = A0F(t0) + A1F(t1) + A2F(t2) + A3F(t3) a em que, por sua vez, A0 = A3 = 0,347854845; A1 = A2 = 0,652145155. t0 = t1 = t2 = t3 = – 0,861136312; – 0,339981044; 0,339981044; e 0,861136312 2, 0 Resposta à Questão 2 – Neste caso, pede-se I = (4 x 4 12)dx , considerando, portanto, 0, 0 os limites de integração: limite inferior: 0,0; e limite superior: 2,0. Isto é, neste caso, tem-se a = 0,0 e b = 2,0. A função a integrar é f(x) = 4x 4 –12. Como se vai usar o Método de Gauss com dois pontos, tem-se: I ≈ IG2 = A0F(t0) + A1F(t1) Em que A0 = A1 = 1; t0 = –1/ 3 ≈ –0,577350269; e t1 = +1/ 3 ≈ +0,577350269 Além disso, F(t) = [(b – a)/2]f{[(b – a)/2]t + (b – a)/2} Isto é, F(t) = [(2 – 0)/2]f{[(2 – 0)/2]t + (2 – 0)/2} F(t) = f(t + 1) F(t) = 4(t + 1)4 – 12 Então, I ≈ IG2 = 1[4(t0 + 1)4 – 12] + 1[4(t1 + 1)4 –12] 342 I ≈ IG2 = [4(–1/√3 + 1)4 – 12] + [4(1/√3 + 1)4 –12] I ≈ IG2 = [4(–0,577350269 + 1)4 – 12] + [4(0,5773502 + 1)4 –12] I ≈ IG2 = 4(0,4226497)4 + 4(1,5773502)4 – 24 I ≈ IG2 = 0,1276387 + 24,761246 – 24 I ≈ IG2 = 0,8888847 Cálculo do valor exato para comparação com o resultado numérico: I = (4/5)x5 – 12x Considerando os limites de integração: I = [(4/5)25 – 12(2)] – [(4/5)05 – 12(0)] I = [(4/5)25 – 12(2)] I = (4/5)(32) – 24 I = 1,6 Conclusão: neste caso particular, existe considerável diferença entre o valor calculado numericamente (IG2 = 0,8888847) e o valor obtido por meio analítico (I = 1,6). Tal se dá, possivelmente, devido à natureza da função integranda (uma quártica). Pode-se tentar obter uma resposta mais precisa com o emprego, por exemplo, da Integração Gaussiana com Quatro Pontos. . Resposta à Questão 3 – Nesta questão calcula-se a integral 1, 0 I= f ( x)dx 0 ,8 isto é, 1, 0 I = [ sen( x) 3x 1]dx 0 ,8 pelo Método de Gauss com dois pontos: IG2 ≈ A0 F(t0) + A1 F(t1) em que a = 0,8; b = 1,0; 343 F(t) = [(b – a)/2]f{[(b – a)/2]t + [(b + a)/2]}; A0 = A1 = 1; t0 = - 1/ 3 ≈ - 0,5773502; e t1 = 1/ 3 ≈ 0,5773502 Ora, [(b – a)/2] = [(1,0 – 0,8)/2] = 0,2/2 = 0,1 [(b + a)/2] = [(1,0 + 0,8)/2] = 1,8/2 = 0,9 Assim, f{[(b – a)/2]t0 + [(b + a)/2]} = f{[0,1](- 0,5773502) + [0,9]} = f{0,842265} = sen(0,842265) – 3(0,842265) + 1 = 0,746153 – 2,526795 + 1 = -0,7806419 f{[(b – a)/2]t1 + [(b + a)/2]} = f{[0,1](0,5773502) + [0,9]} = f{0,957735} = sen(0,957735) – 3(0,957735) + 1 = 0,8178904 – 2,873205 + 1 = -1,0553145 Desse modo, obtém-se I ≈ F(t0) + F(t1) = [(b – a)/2]f{[(b – a)/2]t0 + [(b + a)/2} + [(b – a)/2]f{[(b – a)/2]t1 + [(b + a)/2]} = [0,1](-0,7806419) + [0,1](-1,0553145) = -0,1835955 1, 0 Conclusão: I = [ sen( x) 3x 1]dx ≈ -0,1835955. 0 ,8 Resposta à Questão 4 – Constrói-se a caixa preta inicial: Dados a, b Gauss_2 Resultados f(x) = 3e –x/2. I 344 São dados os limites de integração a e b. O resultado esperado é I, o valor da integral. Agora, pode-se esboçar o algoritmo Gauss_2 em forma literal correspondente ao esquema gráfico dado pela caixa preta: ALGORITMO GAUSS_2 REAL A, B, I, A0, A1, T0, T1 REAL X0, X1, FT0, FT1 F(X) = = 3*EXP(-X/2) INÍCIO ... ... ... FIM DO ALGORITMO GAUSS_2. A caixa preta inicial contém, em sua composição interna, as três caixas que correspondem aos blocos de instruções com as principais funcionalidades do algoritmo. Tais caixas pretas internas são: Entrada dos Dados, Processamento dos Cálculos e Saída dos Resultados. GAUSS_2 Dados A, B ENTRADA DOS DADOS Resultados PROCESSAMENTO DOS CÁLCULOS SAÍDA DOS RESULTADOS I F(X) = = 3*EXP(-X/2) Detalhando cada um dos três blocos de instruções, pode-se ter: ALGORITMO GAUSS_2 (* CALCULA O VALOR DA INTEGRAL DEFINIDA I DE UMA FUNÇÃO F(X) COM O USO DO MÉTODO DE GAUSS-LEGENDRE COM DOIS PONTOS. *) 345 REAL A, B, I, A0, A1, T0, T1 REAL X0, X1, FT0, FT1 F(X) = 3*EXP(-X/2) INÍCIO (* ENTRADA DOS DADOS: *) LEIA A, B (* FIM DA ENTRADA DOS DADOS. *) (* PROCESSAMENTO DOS CÁLCULOS: *) A0 = 1; A1 = 1; T0 = -1/SQRT(3); T1 = 1/SQRT(3) X0 = ((B-A)/2)*T0 + (B+A)/2 X1 = ((B-A)/2)*T1 + (B+A)/2 FT0 = ((B-A)/2)*F(X0) FT1 = ((B-A)/2)*F(X1) I = A0*FT0 + A1*FT1 (* FIM DO PROCESSAMENTO DOS CÁLCULOS. *) (* SAÍDA DOS RESULTADOS: *) ESCREVA „INTEGRAL = „, I (* FIM DA SAÍDA DOS RESULTADOS. *) FIM DO ALGORITMO GAUSS_2. 346 PROVA 30 – Método de Euler FOLHA DE QUESTÕES: Questão 1 (dissertativa) – Escreva um resumo, de pelo menos uma página de extensão, para apresentar os principais aspectos da abordagem numérica aos problemas de valor inicial com o Método de Euler. Por favor, não deixe de referir-se à obtenção da fórmula de Euler. Também procure enriquecer seu resumo com um gráfico que ilustre o fenômeno da propagação de erros quando o valor da solução numérica é comparado com o valor exato da solução do mesmo problema. Questão 2 (numérica) - empregue o Método de Euler para resolver o seguinte problema de valor inicial: y’ = 3 y – 5 x – 2 Para x = 0,5 tem-se y = 1,2. Resolva-o no intervalo de integração [ 0,5; 0,7 ] com passo constante h = 0,1. Indique todas as operações efetuadas. Por favor, apresente os resultados na forma de uma tabela com o seguinte cabeçalho: i xi yi (Euler) y‟i (Eq. Dif.) Questão 3 (numérica) – Use o Método de Euler, e a substituição y‟ = z, para resolver o seguinte problema de valor inicial de segunda ordem: y” = 3xy2 – y‟ – 3, sendo que, para x = 0 tem-se y = 1 e y‟ = -2. O problema deve ser resolvido no intervalo de integração [0,0; 0,6] com passo constante h = 0,2. Por favor, indique todas as operações efetuadas. Preencha uma tabela com o seguinte cabeçalho: i xi yi y‟i = zi y”i = z‟i (Euler) (Euler) (Equação Diferencial) Questão 4 (algoritmo) - Construa um algoritmo para empregar o Método de Euler na resolução de um problema de valor inicial com a equação diferencial de primeira ordem: y’ = 3 y – 5 x – 2 ♣ Boa Prova! ♣ 347 RESPOSTAS: Resposta à Questão 1 – Um problema de valor inicial de ordem n é constituído de uma equação diferencial ordinária de ordem n e de igual número (n) de condições iniciais. Assim, se a equação é de primeira ordem, tem-se apenas uma condição inicial. Por exemplo: y‟ = 4xy2 – 2x -7 (equação diferencial) Para x = 1 tem-se y = -8 (condição inicial) Um problema dessa natureza pode ser resolvido pelo Método de Euler em um pequeno intervalo de integração [x1, xn], digamos de x1 = 1,0 até xn = 1,5, com passo constante h = 0,1. Não convém que o intervalo [x1, xn] seja grande porque pode haver acúmulo de erros de arredondamento e de truncamento, ao longo do processo de integração, levando a resultados muito distantes dos valores exatos. Pelos mesmos motivos, também o valor do passo, h, não deve ser grande. O passo, entretanto, não precisa ser constante. Ele pode variar ao longo do intervalo de integração: hi, com i = 1, 2, ... O Método de Euler é um método direto, isto é, não iterativo e, além disso, é um método de passo simples, quer dizer, para se obter o valor da solução no ponto seguinte é bastante dispor de informações no ponto anterior. Essas informações são o valor da função, y, e o de sua derivada, y‟. A cada passo da resolução de um problema de valor inicial emprega-se a fórmula: yi+1 = yi + hiy‟i com i = 1, 2, ... A fórmula empregada para o cálculo dos valores da função solução do problema de valor inicial pode ser obtida por truncamento da Série de Taylor: yi+1 = yi + hy‟i + (h/2)y‟‟i + ... De modo que, considerando apenas os dois primeiros termos da série obtém-se yi+1 ≈ yi + hy‟i 348 O fato de o valor de yi+1 ser calculado apenas aproximativamente resulta em um erro que pode se propagar ao longo do intervalo de integração. Esse fenômeno pode ser visualizado pela figura apresentada a seguir. Nela, a linha cheia corresponde aos valores exatos da solução, enquanto que a linha tracejada corresponde aos valores obtidos com o emprego do Método de Euler: Y X Resposta à Questão 2 – Aqui se emprega o Método de Euler para resolver o problema de valor inicial de primeira ordem: y’ = 3 y – 5 x – 2 Para x = 0,5 tem-se y = 1,2. no intervalo de integração [ 0,5; 0,7 ] com passo constante h = 0,1. i = 1: x1 = 0,5; y1 = 1,2 (condição inicial) y1‟ = 3 y1 – 5x1 – 2 (equação diferencial) y1‟ = 3 (1,2) – 5 (0,5) – 2 = 3,6 – 2,5 – 2 = 3,6 – 4,5 = -0,9 i = 2: x2 = x1 + h = 0,5 + 0,1 = 0,6 y2 = y1 + hy1‟ (Euler) y2 = 1,2 + (0,1)(-0,9) = 1,2 – 0,09 = 1,11 y2‟ =3y2 – 5x2 – 2 (equação diferencial) y2‟ = 3 (1,11) – 5 (0,6) – 2 = 3,33 – 3,0 – 2 = 3,33 – 5,0 = -1,67 i = 3: x3 = x2 + h = 0,6 + 0,1 = 0,7 y3 = y2 + hy2‟ (Euler) y3 = 1,11 + (0,1)(-1,67) = 1,11 – 0,167 = 0,943 y3‟ =3y3 – 5x3 – 2 (equação diferencial) y3‟ = 3 (0,943) – 5 (0,7) – 2 = 2,829 – 3,5 – 2 = 2,829 – 5,5 = -2,671 349 i y’i (Eq. Dif.) yi (Euler) xi 1 0,5 1,2 (condição inicial) -0,9 2 0,6 1,11 -1,67 3 0,7 0,943 -2,671 Resposta à Questão 3 – Us-se o Método de Euler, e a substituição y‟ = z, para resolver o problema de valor inicial de segunda ordem: y” = 3xy2 – y‟ – 3, com a condição inicial: para x = 0, tem-se y = 1 e y‟ = -2. Considerando a substituição y‟ = z, tem-se o sistema de duas equações diferenciais ordinárias de primeira ordem: y‟ = z z‟ = 3xy – z -3 com a condição inicial: para x = 0, tem-se y = 1 e y‟ = z -2. O problema é resolvido no intervalo de integração [0,0; 0,6] com passo constante h = 0,2. y i’ = zi (Euler) y i” = z i’ (Equação Diferencial) 1 0,0 1 -2 -1 2 0,2 0,6 -2,2 -0,728 3 0,4 0,16 -2,3456 -3,0832 i xi yi (Euler) 4 0,6 -0,30912 -2,96224 -3,6429696 350 i = 1: x1 = 0,0; y1 = 1; y1‟ = z1 = -2 (condição inicial) y1‟‟ = z1‟ = 3y1x12 – y1‟ – 3 (equação diferencial) y1‟‟ = z1‟ = 3(1)(0,0)2 – (-2) – 3 = -1 i = 2: x2 = x1 + h = 0,0 + 0,2 = 0,2 y2 = y1 + hy1‟ (Euler) y2 = 1+ (0,2)(-2) = 1 – 0,4 = 0,6 y2‟ = z2 = y1‟ + hy1” (Euler) y2‟ = z2 = -2 + (0,2)(-1) = -2 – 0,2 = -2,2 y2” = z2‟ = 3y2x22 – y2‟– 3 (equação diferencial) y2” = z2‟ = 3(0,6)(0,2)2 – (-2,2) – 3 = 2,272 - 3 = -0,728 i = 3: x3 = x3 + h = 0,2 + 0,2 = 0,4 y3 = y2 + hy2‟ (Euler) y3 = 0,6 + (0,2)(-2,2) = 0,6 – 0,44 = 0,16 y3‟ = z3 = y2‟ + hy2” (Euler) y3‟ = z3 = -2,2 + (0,2)(-0,728) = -2,2 – 0,1456 = -2,3456 y3”= z3‟ = 3y3x32 – y3 – 3 (equação diferencial) y3” = z3‟ = 3(0,16)(0,4)2 – 0,16 – 3 = 0,0768 - 3,16 = -3,0832 i = 4: x4 = x4+ h = 0,4 + 0,2 = 0,6 y4 = y3+ hy3‟ (Euler) y4 = 0,16 + (0,2)(-2,3456) = 0,16 – 0,46912 = -0,30912 y4‟ = z4 = y3‟ + hy3” (Euler) y4‟ = z4 = -2,3456 + (0,2)(-3,0832) = -2,3456 – 0,61664 = -2,96224 y4” = z4‟ = 3y4x42 – y4 – 3 (equação diferencial) y4” = z4‟ = 3(-0,30912)(0,6)2 – 0,30912 – 3 = -0,3338496 - 3,30912 = -3,6429696 Resposta à Questão 4 – Nesta resposta, constrói-se um algoritmo para aplicar o Método de Euler na resolução de um problema de valor inicial que envolve a equação diferencial de primeira ordem: y’ = f(x, y) = 3 y – 5 x – 2. Inicialmente, fazemos a caixa preta que representa o algoritmo em altíssimo nível de abstração. Associados a essa caixa, representam-se os dados e os resultados pretendidos. Os dados são: a condição inicial x1, y1 e a quantidade de pontos, n, considerados no intervalo de integração, além do passo constante, h. Os resultados esperados são: as abscissas e ordenadas, xi, yi, dos pontos que constituem a solução do problema, mais os valores das derivadas, yli. 351 Dados x1, y1, n, h Resultados Euler f(x, y) = 3 y – 5 x – 2 xi, yi ,yi‟ i = 1,2,...,n Em seguida, esboçamos o algoritmo em forma literal correspondente ao esquema gráfico inicial dado pela caixa preta. Tal esboço declara os tipos das variáveis mencionadas: ALGORITMO EULER REAL X(10), Y(10), YL(10) REAL H INTEIRO I, N F(X, Y) = 3*Y -5*X - 2 INÍCIO ... ... ... FIM DO ALGORITMO EULER. A caixa preta inicial contém, em sua composição interna, as três caixas que correspondem aos blocos de instruções com as principais funcionalidades de um algoritmo numérico simples. Essas caixas pretas internas são: Entrada dos Dados, Processamento dos Cálculos e Saída dos Resultados. EULER Dados X(1),Y(1) N, H ENTRADA DOS DADOS Resultados PROCESSAMENTO DOS CÁLCULOS SAÍDA DOS RESULTADOS X(I), Y(I), YL(I), I=1,2, …N 352 Em seguida, detalhando cada um dos três blocos de instruções, pode-se ter o algoritmo completo: ALGORITMO EULER (* RESOLVE UM PROBLEMA DE VALOR INICIAL DE PRIMEIRA ORDEM PELO MÉTODO DE EULER. *) REAL X(10), Y(10), YL(10) REAL H INTEIRO I, N F(X, Y) = 3*Y -5*X - 2 INÍCIO (* ENTRADA DOS DADOS: *) LEIA N, H, X(1), Y(1) (* FIM DA ENTRADA DOS DADOS. *) (* PROCESSAMENTO DOS CÁLCULOS: *) YL(1) = F(X(1), Y(1)) PARA (I DE 1 ATÉ N-1) FAÇA X(I+1) = X(I) + H Y(I+1) = Y(I) + H*YL(I) YL(I+1) = F(X(I+1), Y(I+1)) FIM PARA (* FIM DO PROCESSAMENTO DOS CÁLCULOS. *) (* SAÍDA DOS RESULTADOS: *) PARA (I DE 1 ATÉ N) FAÇA ESCREVA „I = „,I ESCREVA „X(„,I,‟) =‟,X(I) ESCREVA „Y(„,I,‟) =‟,Y(I) ESCREVA „YL(„,I,‟) =‟,YL(I) FIM PARA ESCREVA „FIM‟ (* FIM DA SAÍDA DOS RESULTADOS. *) FIM DO ALGORITMO EULER. 353 PROVA 31 – Métodos de Runge-Kutta FOLHA DE QUESTÕES: Questão 1 (dissertativa) – Apresente um estudo dos Métodos de Runge-Kutta. Em especial, descreva os métodos de 3ª e de 4ª ordens. Por favor, ocupe pelo menos uma página. Questão 2 (numérica) – Use o Método de Runge-Kutta de 3ª Ordem para resolver o seguinte problema de valor inicial: y‟ = 3x2 – y Para x = 0,0, tem-se y = 1,0. Intervalo de integração: [0,0; 0,1], a ser percorrido com passo constante h = 0,1. Apresente indicações de todos os cálculos que você realizar. Por favor, preencha uma tabela com os resultados. Atenção: observe que a tabela só tem duas linhas, pois apenas um passo é dado. Calculam-se os valores de K1, K2 e K3 apenas uma vez. Questão 3 (numérica) – Por favor, use o Método de Runge-Kutta de 4ª Ordem para obter o valor de y correspondente a x = 1,1, em um único passo, sabendo que y‟ = 5xy - 7 e que para x = 1,0 tem-se y = 9. Questão 4 (algoritmo) – Construa um algoritmo para resolver um problema de valor inicial pelo Método de Runge-Kutta de 3ª Ordem que envolve o sistema de duas equações diferenciais de primeira ordem y‟ = f(x, y, z)= -xy z‟ = g(x, y, z) = y2 Por favor, após declarar os tipos das variáveis, defina as funções f e g. Depois, na Entrada dos Dados, mande ler a quantidade n de pontos considerada na solução do problema, os limites do intervalo de integração [x1, xn] e a condição inicial (x1, y1, z1). No Processamento dos Cálculos, mande calcular o passo h e os valores das derivadas y1‟ e z1‟. Logo após, crie uma estrutura de repetição PARA-FAÇA para calcular K1i, L1i, K2i, L2i, K3i, L3i, nessa ordem, e depois, calcular xi, yi , zi. Os valores de y‟i e z‟i são calculados do segundo ponto do intervalo de integração em diante. Na Saída dos Resultados, mande imprimir uma tabela com os valores das seguintes variáveis i, xi, yi, zi, yi‟, zi‟, K1i, L1i, K2i, L2i, K3i, L3i. ♣ Boa Prova! ♣ 354 RESPOSTAS: Resposta à Questão 1 – Do mesmo modo que o Método de Euler, podem-se obter os Métodos de Runge-Kutta a partir da Série de Taylor. No caso do Método de Euler consideram-se apenas os dois primeiros termos da série. Já, nos Métodos de RungeKutta, considera-se uma quantidade maior de termos da série. Por esse motivo, quando aplicados, estes últimos levam a resultados mais precisos, em geral. A Série de Taylor pode assim ser representada: yi+1 = yi + hyi‟ + (h2/2!)yi‟‟ + (h3/3!)yi‟‟‟ + ... Por considerarem maior quantidade de termos da Série de Taylor, os Métodos de Runge-Kutta precisam aproximar os valores de derivadas de ordem superior. Tal se dá diferentemente do Método de Euler, que leva em consideração apenas os valores das primeiras derivadas. Os Métodos de Runge-Kutta são, assim como o Método de Euler, métodos diretos, isto é, não iterativos. E são, além disso, de passo simples, quer dizer, para calcular o ponto seguinte no intervalo de integração bastam as informações relacionadas ao ponto anterior. Dado um problema de valor inicial de primeira ordem: y‟ = f(x, y) Para x = x1 tem-se y = y1. pode-se adotar, para sua resolução, um Método de Runge-Kutta. No caso de adoção do Método de Runge-Kutta de Terceira Ordem, tem-se: K1 = f[xi, yi] K2 = f[xi + (1/2)h, yi + (1/2)hK1] K3 = f[xi + h, yi + 2hK2 – hK1] E então: yi+1 = yi + (h/6)[K1 + 4K2 + K3] em que i = 1, 2, 3, ... , n-1, se [x1, xn] é o intervalo de integração e h é o passo de valor constante utilizado para percorrer esse intervalo. Já, no caso de adoção do Método de Runge-Kutta de Quarta Ordem, tem-se: 355 K1 = f[xi, yi] K2 = f[xi + (1/2)h, yi + (1/2)hK1] K3 = f[xi + (1/2)h, yi + (1/2)hK2] K4 = f[xi + h, yi + hK3] E então: yi+1 = yi + (h/6)[K1 + 2K2 + 2K3 + K4] tendo-se, igualmente, i = 1, 2, 3, ... , n-1 para o intervalo de integração [x1, xn] e passo constante h. Resposta à Questão 2 – Aqui, usa-se o Método de Runge-Kutta de 3ª Ordem para resolver: y‟ f(x,y) = 3x2 – y Para x = 0,0, tem-se y = 1,0. no intervalo de integração: [0,0; 0,1], com passo h = 0,1. i xi yi K1 K2 K3 1,0 -1,0 -0,9425 -0,8815 1 0,0 0,1 0,9058 2 i =1: x1 = 0,0; y1 = 1,0 (dados) K1 = f[x1, y1] = f[0,0; 1,0] = 3(0,0)2 – 1,0 = -1,0 K2 = f[x1+(1/2)h; y1+(1/2)hK1] = f[0,0+(1/2)(0,1); 1,0+(1/2)(0,1)(-1,0)] = f[0,05; 0,95] = 3(0,05)2 – 0,95 = -0,9425 K3 = f[x1+h; y1+2hK2 – hK1] = f[0,0+0,1; 1,0+2(0,1)(-0,9425) – (0,1)(-1,0)] = f[0,1; 0,9115] = 3(0,1)2 – 0,9115 = -0,8815 Então, 356 y2 = y1 + (h/6)[K1 + 4K2 + K3] = 1,0 + (0,1/6)[-1,0 + 4(-0,9425) + (-0,8815)] = 1,0 + (0,1/6)[-1,0 – 3,77 – 0,8815] = 1,0 + (-0,09419) = 0,9058. Resposta à Questão 3 – Nesta questão usa-se o Método de Runge-Kutta de 4ª Ordem para calcular o valor de y correspondente a x = 1,1, em um único passo, sabendo que y‟ = f(x,y) = 5xy – 7. Tem-se que a x = 1,0 corresponde y = 9. Por outro lado, h = 1,1 – 1,0 = 0,1. i xi yi K1 K2 K3 K4 38 50,225 53,434062 71,888734 1 1,0 9 2 1,1 14,286759 i = 1: x1 = 1,0; y1 = 9 (dados) K1 = f(x1, y1) = f(1,0; 9) = 5(1,0)(9) – 7 = 38 K2 = f[x1 + (1/2)h, y1 + (1/2)hK1] = f{[1,0 + (1/2)(0,1)]; [9 + (1/2)(0,1)(38)]} = f(1,05; 10,9) = 5(1,05)(10,9) – 7 = 57,225 – 7 = 50,225 K3 = f[x1 + (1/2)h; y1 + (1/2)hK2] = f{[1,0 + (1/2)(0,1)]; [9 + (1/2)(0,1)(50,225)]} = f(1,05; 11,51125) = 5(1,05)(11,51125) – 7 = 60,434062 – 7 = 53,434062 K4 = f[x1 + h, y1 + hK3] = f{[1,0 + 0,1]; [9 + (0,1)(53,434062)]} = f(1,1; 14,3434062) = 5(1,1)(14,3434062) – 7 = 78,888734 – 7 = 71,888734 357 E então: x2 = x1 + h = 1,0 + 0,1 = 1,1 y2 = y1 + (h/6)[K1 + 2K2 + 2K3 + K4] = 9 + (0,1/6)[38 + 2(50,225)+ 2(53,434062) + 71,888734] = 9 + (0,0166666)[38 + 100,45 + 106,86812 + 71,888734] = 9 + (0,0166666)[317,20685] = 9 + 5,2867598 = 14,286759 Resposta à Questão 4 – Agora, constrói-se um algoritmo estruturado para aplicar automaticamente o Método de Runge-Kutta de Ordem 3 na resolução de um problema de valor inicial que envolve um sistema de equações diferenciais ordinárias de primeira ordem: y‟ = f(x, y, z)= -xy z‟ = g(x, y, z) = y2 Inicialmente, uma caixa preta representa o algoritmo em altíssimo nível de abstração. Na entrada, representam-se os dados; na saída, os resultados pretendidos. Os dados são: a condição inicial x1, y1, z1; e a quantidade de pontos, n; além do intervalo de integração [x1, xn] (para posterior cálculo do valor do passo constante, h). Os resultados esperados são: as abscissas e ordenadas, xi, yi, zi dos pontos que constituem a solução do problema, mais os valores das derivadas, yli, zli. Dados n, x1, xn, y1, z1 RK3_SIST F(X, Y, Z) = -X*Z G(X, Y, Z) = Y*Y Resultados xi, yi ,zi, yli, zli‟ i = 1,2,...,n Em seguida, delineia-se o algoritmo (agora, em forma literal correspondente ao esquema gráfico inicialmente representado pela caixa preta). Tal delineamento declara os tipos das variáveis mencionadas: 358 ALGORITMO RK3_SIST REAL X(10), Y(10), Z(10), YL(10), ZL(10) REAL H INTEIRO N, I F(X, Y, Z) = -X*Z G(X, Y, Z) = Y*Y INÍCIO ... ... ... FIM DO ALGORITMO RK3_SIST. A caixa preta inicial é decomposta em três caixas. Estas correspondem diretamente aos blocos de instruções com as principais funcionalidades de um algoritmo numérico simples. As caixas pretas internas são: Entrada dos Dados, Processamento dos Cálculos e Saída dos Resultados. RK3_SIST Dados N, X(1), X(N), Y(1), Z(1), ENTRADA DOS DADOS Resultados PROCESSAMENTO DOS CÁLCULOS SAÍDA DOS RESULTADOS X(I), Y(I), Z(I), YL(I), ZL(I), I=1,2, …N Em seguida, detalhando cada um dos três blocos de instruções, e incluindo-se a declaração dos tipos de novas variáveis, tem-se o algoritmo completo, pronto para ser codificado em uma linguagem de programação: 359 ALGORITMO RK3_SIST (* Resolve um problema de valor inicial que envolve um sistema com duas equações diferenciais ordinárias de primeira ordem pelo Método de Runge-Kutta de Terceira Ordem. *) REAL X(10), Y(10), Z(10), YL(10), ZL(10) REAL K1(10), L1(10), K2(10), L2(10), K3(10), L3(10) REAL H INTEIRO N, I F(X, Y, Z) = -X*Z G(X, Y, Z) = Y*Y INÍCIO (* ENTRADA DOS DADOS: *) LEIA N, X(1), X(N) LEIA Y(1), Z(1) (* FIM DA ENTRADA DOS DADOS. *) (* PROCESSAMENTO DOS CÁLCULOS: *) H = (X(N) – X(1))/(N – 1) YL(1) = F(X(1), Y(1), Z(1)) ZL(1) = G(X(1), Y(1), Z(1)) PARA (I DE 1 ATÉ N - 1) FAÇA K1(I) = F(X(I), Y(I), Z(I)) L1(I) = G(X(I), Y(I), Z(I)) K2(I) = F(X(I) + H/2, Y(I) + H*K1(I)/2, Z(I) + H*L1(I)/2) L2(I) = G(X(I) + H/2, Y(I) + H*K1(I)/2, Z(I) + H*L1(I)/2) K3(I) = F(X(I)+H, Y(I)+2*H*K2(I)–H*K1(I), Z(I)+2*H*L2(I)-H*L1(I)) L3(I) = G(X(I)+H, Y(I)+2*H*K2(I)–H*K1(I), Z(I)+2*H*L2(I)-H*L1(I)) X(I + 1) = X(I) + H Y(I + 1) = Y(I) + (H/6)*(K1(I) + 4*K2(I) + K3(I)) Z(I + 1) = Z(I) + (H/6)*(L1(I) + 4*L2(I) + L3(I)) YL(I + 1) = F(X(I+1), Y(I+1), Z(I+1)) ZL(I + 1) = G(X(I+1), Y(I+1), Z(I+1)) FIM PARA (* FIM DO PROCESSAMENTO DOS CÁLCULOS. *) (* SAÍDA DOS RESULTADOS: *) PARA (I DE 1 ATÉ N) FAÇA ESCREVA I, X(I), Y(I), Z(I) ESCREVA YL(I), ZL(I) FIM PARA 360 PARA (I DE 1 ATÉ N - 1) FAÇA ESCREVA I, K1(I), L1(I), K2(I), L2(I), K3(I), L3(I) FIM PARA ESCREVA „FIM‟ (* FIM DA SAÍDA DOS RESULTADOS. *) FIM DO ALGORITMO RK3_SIST. 361 PROVA 32 – Equações Diferenciais de Ordem Superior FOLHA DE QUESTÕES: Questão 1 (dissertativa) – Escreva um resumo de seus estudos no âmbito da resolução numérica de equações diferenciais ordinárias de ordem superior. Refira-se à apresentação de problemas nessa área e à redução de uma equação dessas a um sistema de equações diferenciais ordinárias de primeira ordem. Por favor, dê um exemplo desse tipo de redução para uma equação de terceira ordem. Questão 2 (numérica) – Usando as variáveis auxiliares z, w e t, reduza a equação diferencial ordinária de quarta ordem dada abaixo por um sistema de quatro equações diferenciais ordinárias de primeira ordem. Por favor, indique claramente as transformações realizadas. yiv = f(x, y, y‟, y‟‟, y‟‟‟) = 17 x2 - 5 y2 + y‟ – 17y‟‟ +yy‟‟‟ + 4 Questão 3 (numérica) – Para reduzir a equação diferencial ordinária de segunda ordem dada abaixo use a variável auxiliar z. y‟‟ = f(x, y, y‟) = 12 x2 + 3 y2 + y‟ - 17 Após essa redução, empregue o Método de Euler para resolver o sistema obtido no intervalo de integração [1,5; 1,8] com passo constante h = 0,1. As condições iniciais são: para x = 1,5 tem-se y = z = 2. Por favor, indique todas as operações efetuadas. Disponha os resultados em uma tabela com o seguinte cabeçalho: i xi yi zi = yi‟ zi‟ = yi‟‟ . Questão 4 (algoritmo) – Construa um algoritmo estruturado para implementar o uso do Método de Runge-Kutta de 4ª Ordem no caso da resolução de um problema de valor inicial que envolva um sistema de equações diferenciais ordinárias de primeira ordem resultante da redução de uma equação diferencial ordinária de segunda ordem. ♣ Boa Prova! ♣ 362 RESPOSTAS: Resposta à Questão 1 – As equações diferenciais ordinárias de ordem superior, isto é, de segunda ordem, de terceira, e assim por diante, surgem freqüentemente nos ambientes de pesquisa e de aplicação das ciências exatas e das engenharias. Por esse motivo seu estudo reveste-se de grande importância. Uma equação diferencial ordinária de ordem n pode ser denotada como: y(n) = f(x, y, y‟, y‟‟, ..., y(n-1)) Exemplo: y‟‟ = f(x, y, y‟) = 5x2y -34 xy‟ -12 Quando uma dessas equações está acompanhada de condições iniciais, constituise, então, o que se denomina um problema de valor inicial de ordem superior: y(n) = f(x, y, y‟, y‟‟, ..., y(n-1)) Para x = x1, tem-se: y = y1, y‟ = y‟1, y‟‟ = y‟‟1, ..., y(n-1) = y(n-1)1 Exemplo: y‟‟ = f(y, x, y‟) = -16 x y‟ + 5y – 2 Para x = x1 = 4,5, tem-se: y = y1 = 16,2 e y‟= y‟1 = -3,3 Um problema desse tipo pode ser resolvido em um intervalo de integração [x1, xk]. Esse intervalo pode ser percorrido com um passo hi = (xi+1 – xi), i = 1, 2,..., k-1, variável, ou com um passo h constante. Para resolvê-lo, pode-se empregar um método numérico como o Método de Euler, ou de Runge-Kutta, ou outro. Com um emprego de um desses métodos obtém-se uma seqüência de valores de x e de seus correspondentes valores de y = f(x), além dos valores das derivadas y‟, y‟‟,..., y(n). Tais valores podem ficar bem dispostos em uma tabela com o cabeçalho: i xi yi y‟i y‟‟i ... y(n)i 363 Pode-se reduzir uma equação diferencial ordinária de ordem n a um sistema de n equações diferenciais de primeira ordem. Portanto, um problema de valor inicial de ordem superior é passível, ele também, de ser reescrito como um problema que envolve um conjunto de equações diferenciais ordinárias de primeira ordem. Para realizar essa redução introduzem-se variáveis auxiliares. Exemplo: Reduza a equação diferencial ordinária de terceira ordem (n = 3) dada a seguir: y‟‟‟ = f(x, y, y‟, y‟‟) = 9yy‟- 13x + 6 Solução: Fazendo y‟ = z, tem-se o sistema: y‟ = z z‟‟ = 9yy‟ – 13x + 6 Em seguida, fazendo z‟ = t, tem-se y‟ = z z‟ = t t‟ = 9yz – 13x + 6 que constitui um sistema de três equações diferenciais ordinárias de primeira ordem. Resposta à Questão 2 – Aqui se utiliza um conjunto de variáveis auxiliares, z, w e t, para reduzir a equação diferencial ordinária de quarta ordem dada abaixo yiv = f(x, y, y‟, y‟‟, y‟‟‟) = 17 x2 - 5 y2 + y‟ – 17y‟‟ +yy‟‟‟ + 4 a um sistema de quatro equações diferenciais ordinárias de primeira ordem. Fazendo y‟ = z, tem-se o sistema: 364 y‟ = z z‟‟‟ = 17 x2 - 5 y2 + y‟ – 17y‟‟ +yy‟‟‟ + 4 Agora, fazendo z‟ = w, tem-se o sistema: z‟ = w y‟ = z w‟‟ = 17 x2 - 5 y2 + y‟ – 17y‟‟ +yy‟‟‟ + 4 Finalmente, fazendo w‟ = t, tem-se z‟ = w y‟ = z w‟ = t t‟ = 17 x2 - 5 y2 + z – 17w + yt + 4 Resposta à Questão 3 – Neste problema tem-se a equação diferencial ordinária de segunda ordem y‟‟ = f(x, y, y‟) = 12 x2 + 3 y2 + y‟ - 17 e as condições iniciais: para x = x1 = 1,5 tem-se y1 = z1 = 2. Após reduzir-se a equação dada a um sistema de duas equações diferenciais ordinárias de primeira ordem, resolve-se o problema com a fórmula do Método de Euler: yi+1 = yi + hy‟i no intervalo de integração [1,5; 1,8] com passo constante h = 0,1. Ora, a equação dada pode ser reduzida a y‟ = z z‟ = 12x2 + 3y2 + z -17 i = 1: x1 = 1,5; y1 = 2; y‟1 = z1 = 2 (condições iniciais) 365 Com o emprego da segunda equação do sistema, z‟1 = 12x12 + 3y12 + z1 – 17 = 12(1,5)2 + 3(2)2 + 2 – 17 = 24 x2 = x1 + h = 1,5 + 0,1 = 1,6 y2 = y1 + hy‟1 (Euler) = 2 + (0,1)(2) = 2,2 z2 = y‟2 = z1 + hz‟1 (Euler) = 2 + (0,1)(24) = 4,4 z‟2 = y‟‟2 = 12x22 + 3y22 + z2 -17 = 12(1,6)2 + 3(2,2)2 + 4,4 -17 = 32,64 i = 2: x3 = x2 + h = 1,6 + 0,1 = 1,7 y3 = y2 + hy‟2 (Euler) = 2,2 + (0,1)(4,4) = 2,64 z3 = y‟3 = z2 + hz‟2 (Euler) = 4,4 + (0,1)(32,64) = 7,664 z3‟ = y‟‟3 = 12x32 + 3y32 + z3 -17 = 12(1,7)2 + 3(2,64)2 + 7,664 -17 = 46,2528 366 i = 3: x4 = x3 + h = 1,7 + 0,1 = 1,8 y4 = y3 + hy‟3 (Euler) = 2,64 + (0,1)(7,664) = 3,4064 z4 = y‟4 = z3 + hz‟3 (Euler) = 7,664 + (0,1)(46,2528) = 12,28928 z4‟ = y‟‟4 = 12x42 + 3y42 + z4 -17 = 12(1,8)2 + 3(3,4064)2 + 12,28928 -17 = 68,979962 i xi 1 2 3 4 1,5 1,6 1,7 1,8 yi (Euler) 2 (dado) 2,2 2,64 3,4064 zi = y’i (Euler) 2 (dado) 4,4 7,664 12,28928 zi’ = y’’i (Eq. Dif.) 24 32,64 46,2528 68,979962 Resposta à Questão 4 – Segue a construção de um algoritmo estruturado que realiza o emprego automático do Método de Runge-Kutta de 4ª Ordem. Considera-se o caso da resolução de um problema de valor inicial que envolve um sistema de duas equações diferenciais ordinárias de primeira ordem provenientes da redução de: y‟‟ = f(x, y, y‟) = 3xyy‟ -15x -6 Fazendo y‟ = z, tem-se o sistema: y‟ = z z‟ = 3xyz – 15x - 6 367 Caixa preta inicial: Dados RK4_SIST f(x,y,z) = z g(x,y,z) = 3xyz-15x-6 n, x1, xn, y1, z1 Resultados xi, yi ,zi, yli, zli‟ i = 1,2,...,n Esboço inicial em linguagem algorítmica: ALGORITMO RK4_SIST REAL X(10), Y(10), Z(10), YL(10), ZL(10) REAL H INTEIRO N, I F(X, Y, Z) = Z G(X, Y, Z) = 3*X*Y*Z -15*X - 6 INÍCIO ... ... ... FIM DO ALGORITMO RK4_SIST. As caixas pretas internas à caixa preta inicial são: Entrada dos Dados, Processamento dos Cálculos e Saída dos Resultados. 368 RK4_SIST Dados ENTRADA DOS DADOS N, X(1), X(N), Y(1), Z(1), Resultados PROCESSAMENTO DOS CÁLCULOS SAÍDA DOS RESULTADOS X(I), Y(I), Z(I), YL(I), ZL(I), I=1,2, …N Detalham-se as caixas interiores em que, no caso do Método de Runge-Kutta de Quarta Ordem, tem-se: K1 = f[xi, yi] K2 = f[xi + (1/2)h, yi + (1/2)hK1] K3 = f[xi + (1/2)h, yi + (1/2)hK2] K4 = f[xi + h, yi + hK3] yi+1 = yi + (h/6)[K1 + 2K2 + 2K3 + K4] que, empregado na resolução de um sistema de duas equações diferenciais ordinárias, y‟ = f(x,y,z) = z z‟ = g(x,y,z) = 3xyz – 15x - 6 assume a forma: K1 = f[xi, yi]; L1 = g[xi, yi] K2 = f[xi + (1/2)h, yi + (1/2)hK1, zi + (1/2)hL1 ]; L2 = g[xi + (1/2)h, yi + (1/2)hK1, zi + (1/2)hL1] K3 = f[xi + (1/2)h, yi + (1/2)hK2, zi + (1/2)hL2]; L3 = g[xi + (1/2)h, yi + (1/2)hK2, zi + (1/2)hL2] K4 = f[xi + h, yi + hK3, zi + hL3]; L4 = G[xi + h, yi + hL3, zi + hL3] yi+1 = yi + (h/6)[K1 + 2K2 + 2K3 + K4]; zi+1 = zi + (h/6)[L1 + 2L2 + 2L3 + L4] 369 ALGORITMO RK4_SIST (* Resolve um problema de valor inicial que envolve um sistema com duas equações diferenciais ordinárias de primeira ordem pelo Método de Runge-Kutta de Quarta Ordem. *) REAL X(10), Y(10), Z(10), YL(10), ZL(10) REAL K1(10), K2(10), K3(10), K4(10) REAL L1(10), L2(10), L3(10), L4(10) REAL H INTEIRO N, I F(X, Y, Z) = -X*Z G(X, Y, Z) = Y*Y INÍCIO (* ENTRADA DOS DADOS: *) LEIA N, X(1), X(N) LEIA Y(1), Z(1) (* FIM DA ENTRADA DOS DADOS. *) (* PROCESSAMENTO DOS CÁLCULOS: *) H = (X(N) – X(1))/(N – 1) YL(1) = F(X(1), Y(1), Z(1)) ZL(1) = G(X(1), Y(1), Z(1)) PARA (I DE 1 ATÉ N - 1) FAÇA K1(I) = F(X(I), Y(I), Z(I)) L1(I) = G(X(I), Y(I), Z(I)) K2(I) = F(X(I) + H/2, Y(I) + H*K1(I)/2, Z(I) + H*L1(I)/2) L2(I) = G(X(I) + H/2, Y(I) + H*K1(I)/2, Z(I) + H*L1(I)/2) K3(I) = F(X(I)+H/2, Y(I)+H*K2(I)/2, Z(I)+H*L2(I)/2) L3(I) = G(X(I)+H/2, Y(I)+H*K2(I)/2, Z(I)+H*L2(I)/2) K4(I) = F(X(I)+H, Y(I)+H*K3, Z(I)+H*L3) L4(I) = G(X(I)+H, Y(I)+H*K3, Z(I)+H*L3) X(I + 1) = X(I) + H Y(I + 1) = Y(I) + (H/6)*(K1(I) + 2*K2(I) + 2*K3(I) + K4(I)) Z(I + 1) = Z(I) + (H/6)*(L1(I) + 2*L2(I) + 2*L3(I) + L4(I)) YL(I + 1) = F(X(I+1), Y(I+1), Z(I+1)) ZL(I + 1) = G(X(I+1), Y(I+1), Z(I+1)) FIM PARA (* FIM DO PROCESSAMENTO DOS CÁLCULOS. *) 370 (* SAÍDA DOS RESULTADOS: *) PARA (I DE 1 ATÉ N) FAÇA ESCREVA I, X(I), Y(I), Z(I) ESCREVA YL(I), ZL(I) FIM PARA PARA (I DE 1 ATÉ N - 1) FAÇA ESCREVA I, K1(I), L1(I), K2(I), L2(I), K3(I), L3(I), K4(I), L4(I) FIM PARA ESCREVA „FIM.‟ (* FIM DA SAÍDA DOS RESULTADOS. *) FIM DO ALGORITMO RK4_SIST. 371 PROVA PROPOSTA Nº 1 Referente aos temas: Sistemas de numeração; Ponto flutuante; Erros; Equações algébricas e transcendentes. Com consulta ao material individual do aluno. Cada questão vale 2,5 pontos. Questão 1 (dissertativa) – Escreva um resumo de seu estudo sobre o Método da Bisseção e o Método de Newton-Raphson. Por favor, procure escrever com originalidade: não copie diretamente os textos de consulta. Escreva com clareza e correção. Não deixe de ocupar pelo menos uma página da prova. Questão 2 (numérica) – Por favor, realize as mudanças de base indicadas abaixo. Não deixe de apresentar todas as operações efetuadas. (1000,111)2 → (???)10 (7,777)10 → (???)2 Questão 3 (numérica) – Use o Método da Falsa Posição para obter uma raiz real da equação f(x) = 3x3 + 6x – 8,5 = 0. no intervalo [0; 1]. Faça duas partições, isto é, aplique duas vezes a fórmula. No final, comente a evolução do processo de cálculo. Seria conveniente fazer mais partições? Por favor, indique todas as operações efetuadas e preencha completamente uma tabela com duas linhas de resultados e o seguinte cabeçalho: i a xfp b f (a) f(xfp) f(b) b–a Questão 4 (algoritmo) – Por favor, construa um algoritmo para obter uma raiz real da equação f(x) = 5x3 + sen(x2) – 22 = 0 pelo Método da Bisseção. Use uma metodologia de refinamentos sucessivos, a partir de uma caixa preta inicial que represente o algoritmo no mais alto nível de abstração. Use letras maiúsculas, pelo menos, na versão final do algoritmo. Observe que essa versão precisa ser completa, isto é, ela deve incluir os blocos de Entrada dos Dados, de Processamento dos Cálculos e de Saída dos Resultados, além da declaração dos tipos das variáveis e outras informações. ♣ Boa Prova! ♣ 372 PROVA PROPOSTA Nº 2 Referente aos tópicos: Método da Secante; Equações Polinomiais e Eliminação Gaussiana. Com consulta a material individual do aluno. Cada questão vale 2,5 pontos. Questão 1 (dissertativa) – Por favor, estabeleça comparações entre as características dos seguintes métodos numéricos: Secante; Birge-Vieta; e Müller. Você pode considerar as classes de equações às quais esses métodos se aplicam, assim como os diferentes tipos de raízes que eles permitem obter, a quantidade de estimativas iniciais que necessitam para ser inicializados, e assim por diante. Procure ser criativo: não se limite a copiar outros autores; e não deixe de ocupar pelo menos uma página com o seu texto. Questão 2 (numérica) – Por favor, use o Método de Müller para tentar obter uma raiz real da equação P(x) = 2x3 + 3x2 – 3 = 0. Por favor, adote as estimativas iniciais: x1 = –1; x2 = 0; x3 = 1. Faça duas iterações, isto é, calcule x4 e x5, sempre indicando as operações efetuadas. Organize os resultados em uma tabela como aquela dada a seguir. No final, estabeleça uma avaliação do processo iterativo. Observação: no caso de obter números complexos, interrompa os cálculos e escreva um comentário mencionando o fato. i xi-2 xi-1 xi xi+1 P(xi-2) P(xi-1) P(xi) P(xi+1) P(xi+1) - P(xi) 3 -1 0 1 4 Questão 3 (numérica) - Empregue a Eliminação Gaussiana na resolução do seguinte sistema: 3 x1 – 4 x2 = 1 2 x1 – 3 x2 = 2 Questão 4 (algoritmo) – Por favor, construa um algoritmo para implementar computacionalmente o Método da Secante no caso da equação: f(x) = 7x5 – 8x2 –78x –125 = 0 Sugestões: logo após a declaração dos tipos das variáveis, faça a definição da função f(x); na Entrada dos Dados, mande ler as estimativas iniciais da raiz e outras informações necessárias; no Processamento dos Cálculos, mande realizar as iterações; e, na Saída dos Resultados, mande imprimir o valor da raiz, caso a precisão exigida tenha sido alcançada. ♣ Boa Prova! ♣ 373 PROVA PROPOSTA Nº 3 Referente aos temas: Sistemas Lineares (Fatoração LU, Gauss-Seidel e Relaxação); Sistemas Não Lineares (Newton, Quase Newton); e Ajustamento (Polinomial e Não Polinomial). Com consulta ao material individual do aluno. Cada questão vale dois pontos e meio. Questão 1 (dissertativa) - Escreva sobre a resolução de sistemas de equações não lineares, tanto pelo (a) Método de Newton, quanto pelo (b) Método Quase Newton estudado. Por favor, ocupe, no mínimo, uma página. Questão 2 (numérica) - Use o Método de Gauss-Seidel para tentar obter a solução do sistema de equações lineares dado a seguir: 8 x + 3y = 30 3 x – 7 y = 20 Inicie o processo iterativo com x1 = y1 = 0,5. Faça duas iterações, isto é, obtenha (x2, y2) e (x3, y3), indicando todas as operações efetuadas. Por favor, escreva um comentário sobre a seqüência de valores obtidos. Há convergência? Apresente os resultados organizados na forma de uma tabela com o cabeçalho: i xi yi desvioi = │xi+1 – xi│ + │yi+1 – yi│ Questão 3 (numérica) – Ajuste Y = AeBx (em que e ≈ 2,71828 é a base dos logaritmos neperianos) aos pontos: (2; 2), (3; 5), (4; 15), (5; 77). Use o Método dos Mínimos Quadrados. Por favor, indique todas as operações efetuadas. Armazene os resultados parciais em uma tabela com o seguinte cabeçalho: i xi yi ln(yi) xiln(yi) xi2 Yi Questão 4 (algoritmo) – Por favor, elabore um algoritmo para ajustar a curva exponencial Y = ABx a um conjunto de n pontos dados por suas coordenadas (xi, yi), i = 1, 2, 3, ..., n. A Saída dos Resultados deve apresentar o valor de A e o de B. ♣ Boa Prova! ♣ 374 PROVA PROPOSTA Nº 4 Referente aos assuntos: Sistemas Não Lineares (Newton e Quase Newton); Ajustamento; e Equações Diferenciais (Euler e Runge-Kutta). Com consulta ao material do aluno. Cada questão vale 2,5 pontos. Questão 1 (descritiva) – Escreva um resumo do seu estudo sobre a resolução numérica de sistemas de equações não lineares. Por favor, em sua exposição refira-se aos métodos de Newton e Quase Newton. Não deixe de ocupar pelo menos uma página com a sua resposta, mas não se prolongue muito além disso. Questão 2 (numérica) – Use o Método dos Mínimos Quadrados para ajustar uma reta p(x) = a1 + a2 x aos dados apresentados a seguir. Por favor, construa uma tabela para obter todos os somatórios. x y 1,0 – 2,0 2,0 1,0 3,0 2,0 5,0 – 1,0 Questão 3 (numérica) - Use o Método de Runge-Kutta de Terceira Ordem para resolver o problema de valor inicial: y‟ = 3 x2 – y Para x = 0, y = 1. Por favor, considere o intervalo de integração [0,0; 0,1]. Adote o passo h = 0,1. Indique todos os cálculos efetuados e preencha uma tabela com o cabeçalho: i xi yi K1 K2 K3 Atenção: Observe que a tabela só terá duas linhas, pois apenas um passo será dado. Os valores de K1, K2 e K3 serão calculados apenas uma vez. Questão 4 (algoritmo) – Por favor, elabore um algoritmo estruturado em três blocos (Entrada dos Dados, Processamento dos Cálculos e Saída dos Resultados) para automatizar a aplicação do Método de Runge-Kutta de Quarta Ordem a um problema de valor inicial com a equação y‟ = f(x, y) = 3 x2 – y. ♣ Boa Prova! ♣ 375 PARTE II PROJETOS 376 PROJETO 28 (Programa Gregory_Newton) – Automatize a aplicação da Interpolação Polinomial com o Método de Gregory-Newton e Diferenças Divididas. Solução: Neste caso implementa-se o seguinte algoritmo estruturado: ALGORITMO GREGNEWTON REAL XINT, YINT REAL X(5), Y(5), PROD(10) REAL D(10, 10) INTEIRO I, K, N INÍCIO (* ENTRADA DOS DADOS: *) LEIA N, XINT PARA (I DE 0 ATÉ N) FAÇA LEIA X(I), Y(I) FIM PARA (* FIM DA ENTRADA DOS DADOS. *) (* PROCESSAMENTO DOS CÁLCULOS: *) (* CÁLCULO DAS DIFERENÇAS DIVIDIDAS: *) PARA (I DE 0 ATÉ N) FAÇA D(0, I) = Y(I) FIM PARA PARA (K DE 1 ATÉ N) FAÇA PARA (I DE 0 ATÉ N-K ) FAÇA D(K,I) = (D(K–1, I+1) – D(K–1, I)) / (X(I+K) – X(I)) FIM PARA FIM PARA (* FIM DO CÁLCULO DAS DIFERENÇAS DIVIDIDAS. *) (* CÁLCULO DOS PRODUTÓRIOS: *) PROD(0) = 1 PARA (K DE 1 ATÉ N) FAÇA PROD(K) = PROD(K–1)*(XINT – X(K–1)) FIM PARA (* FIM DO CÁLCULO DOS PRODUTÓRIOS. *) (* CÁLCULO DO VALOR DO POLINÔMIO INTERPOLANTE: *) YINT = 0 PARA (K DE 0 ATÉ N) FAÇA YINT = YINT + D(K,0)*PROD(K) FIM PARA (* FIM DO CÁLCULO DO VALOR DO POLINÔMIO INTERPOLANTE. *) (* FIM DO PROCESSAMENTO DOS CÁLCULOS. *) 377 (* SAÍDA DOS RESULTADOS: *) (* SAÍDA DO VALOR DO POLINÔMIO DE INTERPOLAÇÃO: *) ESCREVA „PARA X = „, XINT ESCREVA „TEM-SE Y = „, YINT (* FIM DA SAÍDA DO VALOR DO POLINÔMIO DE INTERPOLAÇÃO. *) (* FIM DA SAÍDA DOS RESULTADOS. *) FIM DO ALGORITMO GREGNEWTON. Implementação Pascal do algoritmo GREGNEWTON: program gregnewton; (* Implementa a interpolação com o polinômio de Gregory-Newton e Diferenças Divididas. *) uses crt; var i, k, n: integer; xint, yint: real; x, y: array[0..5] of real; prod: array[0..10] of real; d: array[0..10,0..10] of real; begin clrscr; (* ENTRADA DOS DADOS: *) writeln('Digite n ='); readln(n); for i:=0 to n do begin writeln('Digite x(',i,') ='); readln(x[i]); writeln('Digite y(',i,') ='); readln(y[i]); end;{for} writeln('Digite xint ='); readln(xint); (* FIM DA ENTRADA DOS DADOS. *) (* PROCESSAMENTO DOS CÁLCULOS: *) (* CÁLCULO DAS DIFERENÇAS DIVIDIDAS: *) for i:= 0 to n do begin d[0,i]:= y[i]; end;{for} for k:= 1 to n do begin for i:= 0 to n-k do begin d[k,i]:= (d[k-1,i+1]-d[k-1,i])/(x[i+k]-x[i]); end;{for} 378 end;{for} (* FIM DO CÁLCULO DAS DIFERENÇAS DIVIDIDAS. *) (* CÁLCULO DOS PRODUTÓRIOS: *) prod[0]:= 1; for k:= 1 to n do begin prod[k]:= 1; for i:= 0 to k-1 do begin prod[k]:= prod[k]*(xint-x[i]); end;{for} end;{for} (* FIM DO CÁLCULO DOS PRODUTÓRIOS. *) (* CÁLCULO DO VALOR DO POLINÔMIO INTERPOLANTE: *) yint:= 0; for k:= 0 to n do begin yint:= yint + d[k,0]*prod[k]; end;{for} (* FIM DO CÁLCULO DO VALOR DO POLINÔMIO INTERPOLANTE. *) (* FIM DO PROCESSAMENTO DOS CÁLCULOS. *) (* SAÍDA DOS RESULTADOS: *) writeln('Interpolação de Gregory-Newton.'); writeln('Valores das Diferenças Divididas:'); for k:= 0 to n do begin for i:= 0 to n-k do begin writeln('d(',k,',',i,') = ',d[k,i]); end;{for} end;{for} writeln('Valores dos Produtórios:'); for k:= 0 to n do begin writeln('prod(',k,') = ',prod[k]); end;{for} writeln('Resultado da Interpolação:'); writeln('para x = ',xint,' tem-se y = ',yint); writeln('FIM'); readkey; (* FIM DA SAÍDA DOS RESULTADOS. *) end. Execução do programa GREGNEWTON para dados particulares: Digite n = 3 Digite x(0) = 1 Digite y(0) = 0 379 Digite x(1) = 5 Digite y(1) = 4 Digite x(2) = 7 Digite y(2) = 8 Digite x(3) = 9 Digite y(3) = 6 Digite xint = 3 Interpolação de Gregory-Newton. Valores das Diferenças Divididas: d(0,0) = 0.0000000000E+00 d(0,1) = 4.0000000000E+00 d(0,2) = 8.0000000000E+00 d(0,3) = 6.0000000000E+00 d(1,0) = 1.0000000000E+00 d(1,1) = 2.0000000000E+00 d(1,2) = -1.0000000000E+00 d(2,0) = 1.6666666667E-01 d(2,1) = -7.5000000000E-01 d(3,0) = -1.1458333333E-01 Valores dos Produtórios: prod(0) = 1.0000000000E+00 prod(1) = 2.0000000000E+00 prod(2) = -4.0000000000E+00 prod(3) = 1.6000000000E+01 Resultado da Interpolação: para x = 3.0000000000E+00 tem-se y = -5.0000000000E-01 FIM 380 PROJETO 29 (Programa Spline) – Implemente um programa de computador para realizar a interpolação com Spline Cúbica Natural. Ele deve calcular o valor de yint correspondente a xint. Para simplificar a tarefa, considere o caso simples de um conjunto de cinco pontos [xi, yi = f(xi)], i = 0, 1, 2, 3, 4. O programa deve admitir a possibilidade de espaçamento variável: hi = xi – xi-1, i = 1, 2, 3, 4; isto é, os pontos não precisam estar igualmente espaçados. Solução. Neste caso, implementa-se em Pascal o seguinte algoritmo estruturado: ALGORITMO SPLINE (* REALIZA INTERPOLAÇÃO COM SPLINE CÚBICA NATURAL, CONSIDERANDO CINCO PONTOS COM ESPAÇAMENTO VARIÁVEL. *) REAL XINT, YINT, DET, DET1, DET2, DET3 REAL X(5), Y(5), W(3), Z(3) REAL AS(4), BS(4), CS(4), DS(4), H(4) REAL A(3, 3) INTEIRO I, K, N INÍCIO (* ENTRADA DOS DADOS: *) LEIA XINT PARA (I DE 0 ATÉ 4) FAÇA LEIA X(I), Y(I) FIM PARA (* FIM DA ENTRADA DOS DADOS. *) (* PROCESSAMENTO DOS CÁLCULOS: *) (* CÁLCULO DOS ESPAÇAMENTOS: *) PARA (I DE 1 ATÉ 4) FAÇA H(I) = X(I) – X(I–1) FIM PARA (* FIM DO CÁLCULO DOS ESPAÇAMENTOS. *) (* CONSTRUÇÃO DO SISTEMA: *) (* CONSTRUÇÃO DA MATRIZ A: *) A(1,1) = 2*(H(1)+H(2)); A(1,2) = H(2); A(1,3) = 0 A(2,1) = H(2); A(2,2) = 2*(H(2)+H(3)); A(2,3) = H(3) A(3,1) = 0; A(3,2) = H(3); A(3,3) = 2*(H(3)+H(4)) (* FIM DA CONSTRUÇÃO DA MATRIZ A. *) 381 (*VETOR W DOS TERMOS INDEPENDENTES: *) W(1) = 6*((Y(2)-Y(1))/H(2) – (Y(1)-Y(0))/H(1)) W(2) = 6*((Y(3)-Y(2))/H(3) – (Y(2)-Y(1))/H(2)) W(3) = 6*((Y(4)-Y(3))/H(4) – (Y(3)-Y(2))/H(3)) (* FIM DO VETOR W DOS TERMOS INDEPENDENTES. *) (* FIM DA CONSTRUÇÃO DO SISTEMA AZ = W. *) (* RESOLUÇÃO DO SISTEMA POR CRAMER: *) (* DETERMINANTE PRINCIPAL: *) DET= A(1,1)*A(2,2)*A(3,3)+A(1,2)*A(2,3)*A(3,1)+A(1,3)*A(3,2)*A(2,1)A(1,3)*A(2,2)*A(3,1)-A(2,3)*A(3,3)*A(1,1)-A(3,3)*A(2,1)*A(1,2) (* PRIMEIRO DETERMINANTE CARACTERÍSTICO: *) DET1=W(1)*A(2,2)*A(3,3)+A(1,2)*A(2,3)*W(3)+A(1,3)*A(3,2)*W(2) -A(1,3)*A(2,2)*W(3)-A(2,3)*A(3,2)*W(1)-A(3,3)*W(2)*A(1,2) (* SEGUNDO DETERMINANTE CARACTERÍSTICO: *) DET2=A(1,1)*W(2)*A(3,3)+W(1)*A(2,3)*A(3,1)+A(1,3)*W(3)*A(2,1) -A(1,3)*W(2)*A(3,1)-A(2,3)*W(3)*A(1,1)-A(3,3)*A(2,1)*W(1) (* TERCEIRO DETERMINANTE CARACTERÍSTICO: *) DET3=A(1,1)*A(2,2)*W(3)+A(1,2)*W(2)*A(3,1)+W(1)*A(3,2)*A(2,1) -W(1)*A(2,2)*A(3,1)-W(2)*A(3,2)*A(1,1)-W(3)*A(2,1)*A(1,2) (* SOLUÇÃO DO SISTEMA: *) Z(1) = DET1/DET; Z(2) = DET2/DET; Z(3) = DET3/DET (* FIM DA RESOLUÇÃO DO SISTEMA POR CRAMER. *) (* LOCALIZAÇÃO DE XINT: *) I=0 ENQUANTO (I MENOR OU IGUAL 4) FAÇA SE ((XINT MAIOR X(I)) E (XINT MENOR X(I+1))) ENTÃO K = I+1 I=5 FIM SE I=I+1 FIM ENQUANTO (* FIM DA LOCALIZAÇÃO DE XINT. *) (* CÁLCULO DOS COEFICIENTES DE SK(X): *) 382 AS(K) = (Z(K) – Z(K-1))/(6*H(K)) BS(K) = Z(K)/2 CS(K) = (Y(K) – Y(K-1))/H(K) + (2*H(K)*Z(K) + Z(K-1)*H(K))/6 DS(K) = Y(K) (* FIM DO CÁLCULO DOS COEFICIENTES DE SK(X). *) (* CÁLCULO DE YINT = SK(XINT): *) YINT = AS(K)*(XINT–X(K))*(XINT–X(K))*(XINT–X(K))+ BS(K)*(XINT–X(K))*(XINT–X(K))+ CS(K)*(XINT – X(K))+ DS(K) (* FIM DO CÁLCULO DE YINT = SK(XINT). *) (* FIM DO PROCESSAMENTO DOS CÁLCULOS. *) (* SAÍDA DOS RESULTADOS: *) ESCREVA „INTERPOLAÇÃO COM SPLINE CÚBICA NATURAL‟ ESCREVA „PARA X = „, XINT, ESCREVA „TEM-SE Y = „, YINT (* FIM DA SAÍDA DOS RESULTADOS. *) FIM DO ALGORITMO SPLINE. 383 Implementação Pascal do Algoritmo Spline: program spline; (* Implementa a interpolação com spline cúbica natural. Considera cinco pontos que podem ter espaçamento variável. *) uses crt; var xint, yint, det, det1, det2, det3: real; x, y, z: array[0..4] of real; as, bs, cs, ds, h: array[1..4] of real; w: array[0..4] of real; a: array[1..3,1..3] of real; i, j, k, n: integer; begin clrscr; (* ENTRADA DOS DADOS: *) writeln('Digite xint ='); readln(xint); for i:= 0 to 4 do begin writeln('Digite x(',i,') ='); readln(x[i]); writeln('Digite y(',i,') ='); readln(y[i]); end;{for} (* FIM DA ENTRADA DOS DADOS. *) (* PROCESSAMENTO DOS CÁLCULOS: *) (* CÁLCULO DOS ESPAÇAMENTOS: *) for i:= 1 to 4 do begin h[i]:= x[i] - x[i-1]; end;{for} (* FIM DO CÁLCULO DOS ESPAÇAMENTOS. *) (* CONSTRUÇÃO DO SISTEMA aw = z: *) (* CONSTRUÇÃO DA MATRIZ a: *) a[1,1]:= 2*(h[1]+h[2]); a[1,2]:= h[2]; a[1,3]:= 0; a[2,1]:= h[2]; a[2,2]:=2*(h[2]+h[3]); a[2,3]:= h[3]; a[3,1]:= 0; a[3,2]:= h[3]; a[3,3]:= 2*(h[3]+h[4]); (* FIM DA CONSTRUÇÃO DA MATRIZ a. *) (* VETOR w DOS TERMOS INDEPENDENTES: *) w[1]:= 6*((y[2]-y[1])/h[2] - (y[1]-y[0])/h[1]); w[2]:= 6*((y[3]-y[2])/h[3] - (y[2]-y[1])/h[2]); w[3]:= 6*((y[4]-y[3])/h[4] - (y[3]-y[2])/h[3]); (* FIM DO VETOR w DOS TERMOS INDEPENDENTES. *) (* FIM DA CONSTRUÇÃO DO SISTEMA aw = z. *) (* RESOLUÇÃO DO SISTEMA POR CRAMER: *) z[0]:=0; z[4]:=0; (* DETERMINANTE PRINCIPAL: *) 384 det:= a[1,1]*a[2,2]*a[3,3]+a[1,2]*a[2,3]*a[3,1]+a[1,3]*a[3,2]*a[2,1] -a[1,3]*a[2,2]*a[3,1]-a[2,3]*a[3,2]*a[1,1]-a[3,3]*a[2,1]*a[1,2]; (* PRIMEIRO DETERMINANTE CARACTERÍSTICO: *) det1:= w[1]*a[2,2]*a[3,3]+a[1,2]*a[2,3]*w[3]+a[1,3]*a[3,2]*w[2] -a[1,3]*a[2,2]*w[3]-a[2,3]*a[3,2]*w[1]-a[3,3]*w[2]*a[1,2]; (* SEGUNDO DETERMINANTE CARACTERÍSTICO: *) det2:= a[1,1]*w[2]*a[3,3]+w[1]*a[2,3]*a[3,1]+a[1,3]*w[3]*a[2,1] -a[1,3]*w[2]*a[3,1]-a[2,3]*w[3]*a[1,1]-a[3,3]*a[2,1]*w[1]; (* TERCEIRO DETERMINANTE CARACTERÍSTICO: *) det3:= a[1,1]*a[2,2]*w[3]+a[1,2]*w[2]*a[3,1]+w[1]*a[3,2]*a[2,1] -w[1]*a[2,2]*a[3,1]-w[2]*a[3,2]*a[1,1]-w[3]*a[2,1]*a[1,2]; (* SOLUÇÃO DO SISTEMA: *) z[1]:= det1/det; z[2]:= det2/det; z[3]:= det3/det; (* FIM DA RESOLUÇÃO DO SISTEMA POR CRAMER. *) (* LOCALIZAÇÃO DE xint: *) i:= 0; while (i <= 4) do begin if ((xint>x[i])and(xint<x[i+1])) then begin k:= i+1; i:= 5; end;{if} end;{while} (* FIM DA LOCALIZAÇÃO DE xint. *) (* CÁLCULO DOS COEFICIENTES DE Sk(x): *) as[k]:= (z[k]-z[k-1])/(6*h[k]); bs[k]:= z[k]/2; cs[k]:= (y[k]-y[k-1])/h[k]+(2*h[k]*z[k]+z[k-1]*h[k])/6; ds[k]:= y[k]; (* FIM DO CÁLCULO DOS COEFICIENTES DE Sk(x). *) (* CÁLCULO DE yint = Sk(xint): *) yint:= as[k]*(xint-x[k])*(xint-x[k])*(xint-x[k])+ bs[k]*(xint-x[k])*(xint-x[k])+ cs[k]*(xint-x[k])+ ds[k]; (* FIM DO CÁLCULO DE yint = Sk(xint). *) (* FIM DO PROCESSAMENTO DOS CÁLCULOS. *) (* SAÍDA DOS RESULTADOS: *) readkey; writeln('Interpolação com Spline Cúbica Natural'); readkey; writeln('Pontos Lidos:'); readkey; for i:= 0 to 4 do begin 385 writeln('x(',i,') =',x[i],' y(',i,') =',y[i]); readkey; end;{for} writeln('Espaçamentos:'); for i:= 1 to 4 do begin writeln('h(',i,') = ',h[i]); readkey; end;{for} writeln('Sistema de Equações Lineares: '); writeln('Matriz a(3X3):'); for i:= 1 to 3 do begin for j:= 1 to 3 do begin writeln('a(',i,',',j,') = ',a[i,j]); readkey; end;{for} end;{for} writeln('Vetor dos Termos Independentes: '); for i:= 1 to 3 do begin writeln('w(',i,') = ',w[i]); readkey; end;{for} writeln('Determinantes:'); writeln('det = ',det); writeln('det1 = ',det1); writeln('det2 = ',det2); writeln('det3 = ',det3); readkey; writeln('Derivadas de Segunda Ordem:'); for i:= 0 to 4 do begin writeln('z(',i,') = ',z[i]); readkey; end;{for} writeln('Coeficientes do Polinômio Sk(x):'); readkey; writeln('as(',k,') = ',as[k]); writeln('bs(',k,') = ',bs[k]); writeln('cs(',k,') = ',cs[k]); writeln('ds(',k,') = ',ds[k]); readkey; writeln('Para x = ',xint,' tem-se y = ',yint); writeln('FIM.'); readkey; (* FIM DA SAÍDA DOS RESULTADOS. *) end.{ FIM DO PROGRAMA SPLINE.} 386 Resultados obtidos com a execução do Programa Spline para um conjunto particular de dados: Digite xint = 1.33 Digite x(0) = 1.0 Digite y(0) = 1.55 Digite x(1) = 1.7 Digite y(1) = 2.1 Digite x(2) = 2.2 Digite y(2) = 1.3 Digite x(3) = 2.5 Digite y(3) = 1.7 Digite x(4) = 2.6 Digite y(4) = 2.9 Interpolação com Spline Cúbica Natural Pontos Lidos: x(0) = 1.0000000000E+00 y(0) = 1.5500000000E+00 x(1) = 1.7000000000E+00 y(1) = 2.1000000000E+00 x(2) = 2.2000000000E+00 y(2) = 1.3000000000E+00 x(3) = 2.5000000000E+00 y(3) = 1.7000000000E+00 x(4) = 2.6000000000E+00 y(4) = 2.9000000000E+00 Espaçamentos: h(1) = 7.0000000000E-01 h(2) = 5.0000000000E-01 h(3) = 3.0000000000E-01 h(4) = 9.9999999999E-02 Sistema de Equações Lineares: Matriz a(3X3): a(1,1) = 2.4000000000E+00 a(1,2) = 5.0000000000E-01 a(1,3) = 0.0000000000E+00 a(2,1) = 5.0000000000E-01 a(2,2) = 1.6000000000E+00 a(2,3) = 3.0000000000E-01 a(3,1) = 0.0000000000E+00 387 a(3,2) = 3.0000000000E-01 a(3,3) = 8.0000000000E-01 Vetor dos Termos Independentes: w(1) = -1.4314285714E+01 w(2) = 1.7600000000E+01 w(3) = 6.4000000001E+01 Determinantes: det = 2.6560000000E+00 det1 = -1.4474000000E+01 det2 = -6.5622857150E+00 det3 = 2.1494085715E+02 Derivadas de Segunda Ordem: z(0) = 0.0000000000E+00 z(1) = -5.4495481927E+00 z(2) = -2.4707401036E+00 z(3) = 8.0926527541E+01 z(4) = 0.0000000000E+00 Coeficientes do Polinômio Sk(x): as(1) = -1.2975114745E+00 bs(1) = -2.7247740964E+00 cs(1) = -4.8584695925E-01 ds(1) = 2.1000000000E+00 Para x = 1.3300000000E+00 tem-se y = 1.9724646498E+00 FIM. 388 PROJETO 30 (Programa Runge_Kutta_3) – Desenvolva um programa Pascal para realizar uma aplicação do Método de Runge-Kutta de Quarta Ordem. Considere o caso da resolução de um Problema de Valor Inicial de Primeira Ordem. Solução: utiliza-se o programa RUNGE_KUTTA_3 para resolver um problema de valor inicial de primeira ordem com a equação: y‟ = 3x2 – y no intervalo de integração [x1; xn], a ser percorrido com passo constante, h. Neste caso, implementa-se computacionalmente o algoritmo seguinte: ALGORITMO RUNGE_KUTTA_3 (* RESOLVE UM PROBLEMA DE VALOR INICIAL DE PRIMEIRA ORDEM PELO MÉTODO DE RUNGE_KUTTA DE TERCEIRA ORDEM. *) REAL X(10), Y(10), YL(10) REAL K1(10), K2(10), K3(10) REAL H INTEIRO N, I F(X, Y) = 3*X*X - Y INÍCIO (* ENTRADA DOS DADOS: *) LEIA N, X(1), X(N), Y(1) (* FIM DA ENTRADA DOS DADOS. *) (* PROCESSAMENTO DOS CÁLCULOS: *) H = (X(N) – X(1))/(N – 1) YL(1) = F(X(1), Y(1)) PARA (I DE 1 ATÉ N - 1) FAÇA K1(I) = F(X(I), Y(I)) K2(I) = F(X(I)+H/2, Y(I)+H*K1(I)/2) K3(I) = F(X(I)+H, Y(I)+2*H*K2(I)–H*K1(I)) X(I + 1) = X(I) + H Y(I + 1) = Y(I) + (H/6)*(K1(I)+4*K2(I)+K3(I)) YL(I + 1) = F(X(I+1), Y(I+1)) FIM PARA (* FIM DO PROCESSAMENTO DOS CÁLCULOS. *) (* SAÍDA DOS RESULTADOS: *) PARA (I DE 1 ATÉ N - 1) FAÇA ESCREVA I, K1(I), K2(I), K3(I) FIM PARA 389 PARA (I DE 1 ATÉ N) FAÇA ESCREVA I, X(I), Y(I), YL(I) FIM PARA ESCREVA „FIM‟ (* FIM DA SAÍDA DOS RESULTADOS. *) FIM DO ALGORITMO RUNGE_KUTTA_3. Segue uma implementação Pascal do algoritmo RUNGE_KUTTA_3: program rkutta3; (* Resolve um problema de valor inicial de primeira ordem pelo Método de Runge-Kutta de Terceira Ordem. *) uses crt; var x, y, yl: array[1..10] of real; k1, k2, k3: array[1..10] of real; h: real; i, n: integer; function f(x,y: real): real; begin f:=3*x*x-y; end;{function} begin clrscr; {* ENTRADA DOS DADOS: *} writeln('Digite o valor de n = ');readln(n); writeln('Digite o valor de x(1) = ');readln(x[1]); writeln('Digite o valor de x(n) = ');readln(x[n]); writeln('Digite o valor de y(1) = ');readln(y[1]); {* FIM DA ENTRADA DOS DADOS. *} {* PROCESSAMENTO DOS CÁLCULOS: *} h:= (x[n]-x[1])/(n-1); yl[1]:= f(x[1], y[1]); for i:= 1 to n-1 do begin k1[i]:= f(x[i], y[i]); k2[i]:= f(x[i]+h/2, y[i]+h*k1[i]/2); k3[i]:= f(x[i]+h, y[i]+2*h*k2[i]-h*k1[i]); x[i+1]:= x[i]+h; y[i+1]:= y[i]+(h/6)*(k1[i]+4*k2[i]+k3[i]); yl[i+1]:= f(x[i+1], y[i+1]); end;{for} {* FIM DO PROCESSAMENTO DOS CÁLCULOS. *} {* SAÍDA DOS RESULTADOS: *} 390 writeln('----------------------'); writeln('Programa Runge-Kutta-3.'); writeln('............................'); for i:= 1 to n do begin writeln('i=',i,' k1=',k1[i],' k2=',k2[i],' k3=',k3[i]); end;{for} readkey; writeln('............................'); for i:= 1 to n do begin writeln('i=',i,' x=',x[i],' y=',y[i],' yl=',yl[i]); end;{for} readkey; writeln('FIM.'); readkey; {* FIM DA SAÍDA DOS RESULTADOS. *} end.{* FIM DO PROGRAMA RKUTTA-3. *} Relatório produzido por uma execução do programa RKUTTA-3: Digite o valor de n = 2 Digite o valor de x(1) = 0.0 Digite o valor de x(n) = 0.1 Digite o valor de y(1) = 1.0 ---------------------Programa Runge-Kutta-3. ............................ i=1 k1=-1.0000000000E+00 k2=-9.4250000000E-01 k3=-8.8150000000E-01 i=2 k1= 0.0000000000E+00 k2= 0.0000000000E+00 k3= 0.0000000000E+00 ............................ i=1 x= 0.0000000000E+00 y= 1.0000000000E+00 yl=-1.0000000000E+00 i=2 x= 1.0000000000E-01 y= 9.0580833333E-01 yl=-8.7580833333E-01 FIM. 391 PROJETO 31 (Programa Euler) – Programe computacionalmente um caso de resolução de um Problema de Valor Inicial de Primeira Ordem com o Método de Euler. Solução: Pode-se considerar a realização computacional do seguinte algoritmo, no qual se resolve um problema de valor inicial de primeira ordem com o Método de Euler: ALGORITMO EULER (* RESOLVE UM PROBLEMA DE VALOR INICIAL DE PRIMEIRA ORDEM PELO MÉTODO DE EULER. *) REAL X(10), Y(10), YL(10) REAL H INTEIRO I, N F(X, Y) = 3*Y - 5*X - 2 INÍCIO (* ENTRADA DOS DADOS: *) LEIA N, H, X(1), Y(1) (* FIM DA ENTRADA DOS DADOS. *) (* PROCESSAMENTO DOS CÁLCULOS: *) YL(1) = F(X(1), Y(1)) PARA (I DE 1 ATÉ N-1) FAÇA X(I+1) = X(I) + H Y(I+1) = Y(I) + H*YL(I) YL(I+1) = F(X(I+1), Y(I+1)) FIM PARA (* FIM DO PROCESSAMENTO DOS CÁLCULOS. *) (* SAÍDA DOS RESULTADOS: *) PARA (I DE 1 ATÉ N) FAÇA ESCREVA „I = „,I ESCREVA „X(„,I,‟) =‟,X(I) ESCREVA „Y(„,I,‟) =‟,Y(I) ESCREVA „YL(„,I,‟) =‟,YL(I) FIM PARA ESCREVA „FIM‟ (* FIM DA SAÍDA DOS RESULTADOS. *) FIM DO ALGORITMO EULER. 392 Implementação do algoritmo Euler em Pascal: program euler; (* Resolve um problema de valor inicial de primeira ordem pelo Método de Euler. *) uses crt; var x, y, yl: array[1..20] of real; h: real; i, n: integer; function f(x,y: real): real; begin f:=3*y-5*x-2; end;{function} begin clrscr; {* ENTRADA DOS DADOS: *} writeln('Digite o valor de n = ');readln(n); writeln('Digite o valor de h = ');readln(h); writeln('Digite o valor de x(1) = ');readln(x[1]); writeln('Digite o valor de y(1) = ');readln(y[1]); {* FIM DA ENTRADA DOS DADOS. *} {* PROCESSAMENTO DOS CÁLCULOS: *} yl[1]:= f(x[1], y[1]); for i:=1 to n-1 do begin x[i+1]:= x[i]+h; y[i+1]:= y[i]+h*yl[i]; yl[i+1]:= f(x[i+1], y[i+1]); end;{for} {* FIM DO PROCESSAMENTO DOS CÁLCULOS. *} {* SAÍDA DOS RESULTADOS: *} writeln('----------------------'); writeln('Programa Euler.'); for i:= 1 to n do begin writeln('i=',i,' x=',x[i],' y=',y[i],' yl=',yl[i]); end;{for} readkey; writeln('FIM.'); readkey; {* FIM DA SAÍDA DOS RESULTADOS. *} end.{* FIM DO PROGRAMA EULER. *} 393 O seguinte relatório apresenta o resultado de uma execução do programa EULER correspondente a um conjunto de dados: Digite o valor de n = 5 Digite o valor de h = 0.5 Digite o valor de x(1) = 0.0 Digite o valor de y(1) = 1.0 ---------------------Programa Euler. i=1 x= 0.0000000000E+00 y= 1.0000000000E+00 yl= 1.0000000000E+00 i=2 x= 5.0000000000E-01 y= 1.5000000000E+00 yl= 0.0000000000E+00 i=3 x= 1.0000000000E+00 y= 1.5000000000E+00 yl=-2.5000000000E+00 i=4 x= 1.5000000000E+00 y= 2.5000000000E-01 yl=-8.7500000000E+00 i=5 x= 2.0000000000E+00 y=-4.1250000000E+00 yl=-2.4375000000E+01 FIM. 394 PROJETO 32 - (Programa Euler-sup) – Desenvolva um programa Pascal para realizar uma aplicação do Método de Euler na resolução de um Problema de Valor Inicial de Ordem Superior. Solução: tem-se a equação diferencial ordinária de ordem superior (segunda ordem): y‟‟ = f(x, y, y‟) = 12 x2 + 3 y2 + y‟ - 17 e as condições iniciais: para x = x1 = 1,5 tem-se y1 = 2. Após reduzir-se a equação dada a um sistema de duas equações diferenciais ordinárias de primeira ordem, resolve-se o problema com a utilização do Método de Euler no intervalo de integração [1,5; 1,8]. Passo constante h = 0,1. Ora, a equação dada pode ser reduzida a y‟ = z z‟ = 12x2 + 3y2 + z -17 Fórmula de Euler: yi+1 = yi + hy‟i Pretende-se que o programa calcule os valores correspondentes a uma tabela com o seguinte cabeçalho: i xi yi zi = yi‟ zi‟ = yi‟‟ Resultados esperados: i xi 1 2 3 4 1,5 1,6 1,7 1,8 yi (Euler) 2 (dado) 2,2 2,64 3,4064 zi = y’i (Euler) 2 (dado) 4,4 7,664 12,28928 zi’ = y’’i (Eq. Dif.) 24 32,64 46,2528 68,979962 Algoritmo que é implementado: ALGORITMO EULER_SUP (*RESOLVE UM PROBLEMA DE VALOR INICIAL DE SEGUNDA ORDEM PELO MÉTODO DE EULER. CONSIDERA QUE A EQUAÇÃO JÁ FOI DESDOBRADA EM UM SISTEMA. *) REAL X(10), Y(10), YL(10), Y2L(10), H INTEIRO I, N 395 G(X, Y, Z) = 12*X*X+3*Y*Y+Z-17 INÍCIO (* ENTRADA DOS DADOS: *) LEIA N, X(1), X(N), Y(1), YL(1) (* FIM DA ENTRADA DOS DADOS. *) (* PROCESSAMENTO DOS CÁLCULOS: *) H = (X(N) – X(1))/(N – 1) Z(1) = YL(1) Y2L(1) = G(X(1), Y(1), Z(1)) PARA (I DE 1 ATÉ N-1) FAÇA X(I+1) = X(I) + H Y(I+1) = Y(I) +H*YL(I) YL(I+1) = YL(I) + H*Y2L(I) Z(I+1) = YL(I+1) Y2L(I+1) = G(X(I+1), Y(I+1), Z(I+1)) FIM PARA (* FIM DO PROCESSAMENTO DOS CÁLCULOS. *) (* SAÍDA DOS RESULTADOS: *) ESCREVA „APLICAÇÃO DO MÉTODO DE EULER‟ ESCREVA „A UM PROBLEMA DE VALOR INICIAL‟ ESCREVA „DE SEGUNDA ORDEM‟ PARA (I DE 1 ATÉ N) FAÇA ESCREVA I, X(I), Y(I), YL(I), Y2L(I) FIM PARA ESCREVA „FIM.‟ (* FIM DA SAÍDA DOS RESULTADOS. *) FIM DO ALGORITMO EULER_SUP. Implementação do algoritmo EULER_SUP: program euler_sup; (* Resolve um problema de valor inicial de segunda ordem pelo Método de Euler. Considera que a equação já foi desdobrada em um sistema. *) uses crt; var x, y, yl, z, y2l: array[1..10] of real; h: real; i, n: integer; 396 function g(x,y,z: real): real; begin g:= 12*x*x+3*y*y+z-17; end;{function} begin clrscr; {* ENTRADA DOS DADOS: *} writeln('Digite o valor de n = ');readln(n); writeln('Digite o valor de x(1) = ');readln(x[1]); writeln('Digite o valor de x(n) = ');readln(x[n]); writeln('Digite o valor de y(1) = ');readln(y[1]); writeln('Digite o valor de yl(1) = ');readln(yl[1]); {* FIM DA ENTRADA DOS DADOS. *} {* PROCESSAMENTO DOS CÁLCULOS: *} h:= (x[n]-x[1])/(n-1); z[1]:= yl[1]; y2l[1]:= g(x[1], y[1], z[1]); for i:= 1 to n-1 do begin x[i+1]:= x[i]+h; y[i+1]:= y[i]+h*yl[i]; yl[i+1]:= yl[i]+h*y2l[i]; z[i+1]:= yl[i+1]; y2l[i+1]:= g(x[i+1], y[i+1], z[i+1]); end;{for} {* FIM DO PROCESSAMENTO DOS CÁLCULOS. *} {* SAÍDA DOS RESULTADOS: *} writeln('----------------------'); { writeln('Aplicação do Método de Euler.'); writeln('a um problema de valor inicial'); writeln('de segunda ordem');} for i:= 1 to n do begin writeln('i=',i,' x =',x[i],' y =',y[i]); writeln('yl =',yl[i],' y2l = ',y2l[i]); writeln('----------------------'); end;{for} readkey; writeln('FIM.'); readkey; {* FIM DA SAÍDA DOS RESULTADOS. *} end.{* FIM DO PROGRAMA EULER_SUP. *} 397 Resultado de uma execução do programa EULER_SUP: Digite o valor de n = 4 Digite o valor de x(1) = 1.5 Digite o valor de x(n) = 1.8 Digite o valor de y(1) = 2 Digite o valor de yl(1) = 2 ---------------------i=1 x = 1.5000000000E+00 y = 2.0000000000E+00 yl = 2.0000000000E+00 y2l = 2.4000000000E+01 ---------------------i=2 x = 1.6000000000E+00 y = 2.2000000000E+00 yl = 4.4000000000E+00 y2l = 3.2640000000E+01 ---------------------i=3 x = 1.7000000000E+00 y = 2.6400000000E+00 yl = 7.6640000000E+00 y2l = 4.6252800000E+01 ---------------------i=4 x = 1.8000000000E+00 y = 3.4064000000E+00 yl = 1.2289280000E+01 y2l = 6.8979962880E+01 ---------------------FIM. 398 PROJETO 33 (Programa Runge_Kutta_3_Sup) – Construa um programa de computador em linguagem Pascal para resolver um problema de valor inicial que envolva uma equação diferencial ordinária de segunda ordem. Esse problema deve ser resolvido pelo Método de Runge-Kutta de Terceira Ordem. Solução: a equação y‟‟ = 12x2 + 3y2 + y‟ -17 pode ser desdobrada em um sistema de duas equações diferenciais ordinárias de primeira ordem: y‟ = f(x,y,z) = z z‟ = g(x,y,z) = 12x2 + 3y2 + y -17 Para resolver esse problema, pode-se adotar o algoritmo seguinte: ALGORITMO RK3_SUP REAL X(50), Y(50), Z(50), ZLINHA(50), H REAL K1(50), K2(50), K3(50), L1(50), L2(50), L3(50) INTEIRO I, QPONTOS F(X,Y,Z) = Z G(X,Y,Z) = 12*X*X + 3*Y*Y + Z - 17 INÍCIO (* ENTRADA DOS DADOS: *) LEIA X(1), Y(1), Z(1), QPONTOS, H (* FIM DA ENTRADA DOS DADOS. *) (* PROCESSAMENTO DOS CÁLCULOS: *) ZLINHA(1) = G(X(1), Y(1), Z(1)) PARA (I DE 1 ATÉ QPONTOS-1) FAÇA K1(I) = F(X(I),Y(I),Z(I)) L1(I) = G(X(I),Y(I),Z(I)) K2(I) = F(X(I)+H/2,Y(I)+H*K1(I)/2, Z(I)+H*L1/2) L2(I) = G(X(I)+H/2,Y(I)+H*K1(I)/2, Z(I)+H*L1/2) K3(I) = F(X(I)+H, Y(I)+2*H*K2(I)-H*K1(I), Z(I)+2*H*L2(I)-H*L1(I)) L3(I) = G(X(I)+H, Y(I)+2*H*K2(I)-H*K1(I), Z(I)+2*H*L2(I)-H*L1(I)) X(I+1) = X(I) + H Y(I+1) = Y(I) + (H/6)*(K1(I)+4*K2(I)+K3(I)) Z(I+1) = Z(I) + (H/6)*(L1(I)+4*L2(I)+L3(I)) ZLINHA(I+1) = G(X(I+1), Y(I+1), Z(I+1)) FIM PARA (* FIM DO PROCESSAMENTO DOS CÁLCULOS. *) (* SAÍDA DOS RESULTADOS: *) ESCREVA „APLICAÇÃO DO MÉTODO DE„ ESCREVA „RUNGE-KUTTA DE TERCEIRA ORDEM‟ ESCREVA ‟APLICADO A UM PROBLEMA DE ‟ 399 ESCREVA ‟VALOR INICIAL DE SEGUNDA ORDEM‟ PARA (I DE 1 ATÉ QPONTOS) FAÇA ESCREVA I, X(I), Y(I), Z(I), ZLINHA(I) ESCREVA K1(I), K2(I),K3(I),L1(I),L2(I),L3(I) FIM PARA ESCREVA „FIM.‟ (* FIM DA SAÍDA DOS RESULTADOS. *) FIM DO ALGORITMO RK3-SUP. Implementação, em linguagem Pascal, do algoritmo RK3-SUP: program rk3_sup; (* Resolve um problema de valor inicial de segunda ordem pelo Método de Runge-Kutta de Terceira Ordem. Considera o problema já desdobrado em um sistema.*) uses crt; var x, y, z, zlinha: array[1..10] of real; k1,k2,k3, l1,l2,l3: array[1..10] of real; h: real; i, qpontos: integer; function f(x,y,z: real): real; begin f:= z; end;{function f} function g(x,y,z: real): real; begin g:= 12*x*x+3*y*y+z-17; end;{function g} begin clrscr; {* ENTRADA DOS DADOS: *} writeln('Digite o valor de x(1) = ');readln(x[1]); writeln('Digite o valor de y(1) = ');readln(y[1]); writeln('Digite o valor de z(1) = ');readln(z[1]); writeln('Digite o valor de qpontos = ');readln(qpontos); writeln('Digite o valor de h = ');readln(h); {* FIM DA ENTRADA DOS DADOS. *} {* PROCESSAMENTO DOS CÁLCULOS: *} zlinha[1]:= g(x[1], y[1], z[1]); for i:= 1 to qpontos-1 do begin k1[i]:= f(x[i], y[i], z[i]); 400 l1[i]:= g(x[i], y[i], z[i]); k2[i]:= f(x[i]+h/2, y[i]+h*k1[i]/2, z[i]+h*l1[i]/2); l2[i]:= g(x[i]+h/2, y[i]+h*k1[i]/2, z[i]+h*l1[i]/2); k3[i]:= f(x[i]+h, y[i]+2*h*k2[i]-h*k1[i], z[i]+2*h*l2[i]-h*l1[i]); l3[i]:= g(x[i]+h, y[i]+2*h*k2[i]-h*k1[i], z[i]+2*h*l2[i]-h*l1[i]); x[i+1]:= x[i]+h; y[i+1]:= y[i]+(h/6)*(k1[i]+4*k2[i]+k3[i]); z[i+1]:= z[i]+(h/6)*(l1[i]+4*l2[i]+l3[i]); zlinha[i+1]:= g(x[i+1], y[i+1], z[i+1]); end;{for} {* FIM DO PROCESSAMENTO DOS CÁLCULOS. *} {* SAÍDA DOS RESULTADOS: *} writeln('----------------------'); writeln('Método de Runge-Kutta-3 aplicado'); writeln('a um problema de segunda ordem.'); writeln('............................'); for i:= 1 to qpontos do begin writeln('i=',i,':'); writeln('k1=',k1[i],' k2=',k2[i],' k3=',k3[i]); end;{for} readkey; writeln('............................'); for i:= 1 to qpontos do begin writeln('i=',i,':'); writeln('l1=',l1[i],' l2=',l2[i],' l3=',l3[i]); end;{for} readkey; writeln('............................'); for i:= 1 to qpontos do begin writeln('i=',i,' x=',x[i],' y=',y[i]); writeln('z=',z[i],' zlinha=',zlinha[i]); end;{for} readkey; writeln('FIM.'); readkey; {* FIM DA SAÍDA DOS RESULTADOS. *} end.{* FIM DO PROGRAMA RKUTTA-3. *} 401 Resultado de uma execução do programa RK3_sup: Digite o valor de x(1) = 1.5 Digite o valor de y(1) = 2 Digite o valor de z(1) = 2 Digite o valor de qpontos = 4 Digite o valor de h = 0.1 ---------------------Método de Runge-Kutta-3 aplicado a um problema de segunda ordem. ............................ i=1: k1= 2.0000000000E+00 k2= 3.2000000000E+00 k3= 5.2520000000E+00 i=2: k1= 4.8978800000E+00 k2= 6.6460474460E+00 k3= 9.8557901137E+00 i=3: k1= 9.2612076536E+00 k2= 1.1979196423E+01 k3= 1.7463327055E+01 i=4: k1= 0.0000000000E+00 k2= 0.0000000000E+00 k3= 0.0000000000E+00 ............................ i=1: l1= 2.4000000000E+01 l2= 2.8260000000E+01 l3= 3.6832800000E+01 i=2: l1= 3.4963348920E+01 l2= 4.2271225029E+01 l3= 5.7751410184E+01 i=3: l1= 5.4359775382E+01 l2= 6.8190484699E+01 l3= 9.9901315989E+01 i=4: l1= 0.0000000000E+00 l2= 0.0000000000E+00 l3= 0.0000000000E+00 ............................ i=1 x= 1.5000000000E+00 y= 2.0000000000E+00 z= 2.0000000000E+00 zlinha= 2.4000000000E+01 i=2 x= 1.6000000000E+00 y= 2.3342000000E+00 z= 4.8978800000E+00 zlinha= 3.4963348920E+01 i=3 x= 1.7000000000E+00 y= 3.0231643316E+00 z= 9.2612076536E+00 zlinha= 5.4359775382E+01 i=4 x= 1.8000000000E+00 y= 4.2671863383E+00 z= 1.6378258156E+01 zlinha= 9.2884895894E+01 FIM. 402 PROJETO 34 (Programa Runge_Kutta_4_Sup) – Construa um programa de computador em linguagem Pascal, de modo estruturado, para resolver um problema de valor inicial que envolva uma equação diferencial ordinária de segunda ordem. Esse problema deve ser resolvido pelo Método de Runge-Kutta de Quarta Ordem. Solução: Pode-se considerar a equação diferencial ordinária de segunda ordem: y‟‟ = 12x2 + 3y2 + y‟ -17. Essa equação é reduzida a um sistema de duas equações diferenciais ordinárias de primeira ordem, com a introdução da variável auxiliar z: y‟ = f(x,y,z) = z z‟ = g(x,y,z) = 12x2 + 3y2 + z -17 Para resolver esse problema, pode-se adotar o programa rungekutta4_sup: program rungekutta4_sup; uses crt;var x,y,z,zlinha:array[0..50]of real; k1,k2,k3,k4: array[0..50]of real; l1,l2,l3,l4: array[0..50]of real; h: real; i,qpassos:integer; function f(x,y,z:real):real; begin f:= z;end;{function f} function g(x,y,z:real):real; begin g:= 12*x*x+3*y*y+z-17; end;{function g} begin clrscr; {ENTRADA DOS DADOS:} writeln('Digite o valor de x1:'); readln(x[1]); writeln('Digite o valor de y1:'); readln(y[1]); writeln('Digite o valor de z1:'); readln(z[1]); writeln('Digite o valor de h:'); readln(h); writeln('Digite o valor de qpassos:'); readln(qpassos); {FIM DA ENTRADA DOS DADOS.} {PROCESSAMENTO DOS CÁLCULOS:} zlinha[1]:= g(x[1],y[1],z[1]); for i:=1 to qpassos-1 do begin k1[i]:=f(x[i],y[i],z[i]); l1[i]:=g(x[i],y[i],z[i]); 403 k2[i]:=f(x[i]+h/2,y[i]+h*k1[i]/2+h*l1[i]/2); l2[i]:=g(x[i]+h/2,y[i]+h*k1[i]/2+h*l1[i]/2); k3[i]:=f(x[i]+h/2,y[i]+h*k2[i]/2,+h*l2[i]/2); l3[i]:=g(x[i]+h/2,y[i]+h*k2[i]/2,+h*l2[i]/2); k4[i]:= f(x[i]+h,y[i]+h*k3[i]+h*l3[i]); l4[i]:= g(x[i]+h,y[i]+h*k3[i]+h*l3[i]); x[i+1]:=x[i]+h; y[i+1]:=y[i]+(h/6)*(k1[i]+2*k2[i]+2*k3[i]+k4[i]); z[i+1]:= z[i]+(h/6)*(l1[i]+2*l2[i]+2*l3[i]+l4[i]); zlinha[i]:= g(x[i],y[i],z[i]); end;{for} {FIM DO PROCESSAMENTO DOS CÁLCULOS.} {SAÍDA DOS RESULTADOS:} for i:=1 to qpassos do begin writeln('i=',i,' x(',i,')=',x[i],' y(',i,')=',y[i]); end;{for} {FIM DA SAÍDA DOS RESULTADOS.} readkey; end. Resultado de uma execução do programa Runge_Kutta_4_sup: Digite o valor de n = 4 Digite o valor de x1 = 1.5 Digite o valor de xn = 1.8 Digite o valor de y1 = 2 Digite o valor de z1 = 2 i=1 x= 1.5000000000E+00 y= 2.0000000000E+00 z= 2.0000000000E+00 zlinha=-1.7000000000E+01 i=2 x= 1.6000000000E+00 y= 2.3358330000E+00 z= 4.9014772845E+00 zlinha= 3.4989824696E+01 i=3 x= 1.7000000000E+00 y= 3.0282165618E+00 z= 9.2741214556E+00 zlinha= 5.4464408091E+01 i=4 x= 1.8000000000E+00 y= 4.2801650592E+00 z= 1.6419551930E+01 zlinha= 9.3258990732E+01 404 i=1 k1= 2.0000000000E+00 4.9239800000E +00 l1= 2.4000000000E+01 3.5089037070E +01 i=2 k1= 4.9014772845E+00 9.3062238895E +00 l1= 3.4989824696E+01 5.4665474983E +01 i=3 k1= 9.2741214556E+00 1.6467070468E +01 l1= 5.4464408091E+01 9.3746614270E +01 FIM. k2= 3.2000000000E+00 k3= 3.4130000000E+00 k4= l2= 2.8260000000E+01 l3= 2.9239800000E+01 l4= k2= 6.6509685193E+00 k3= 7.0166877467E+00 k4= l2= 4.2304209245E+01 l3= 4.4047466050E+01 l4= k2= 1.1997341860E+01 k3= 1.2690517101E+01 k4= l2= 6.8327912917E+01 l3= 7.1929490120E+01 l4= 405 PROJETO 35 (Programa Runge-Kutta_4_3Eq) – Elabore um programa para aplicar automaticamente o Método de Runge-Kutta de Quarta ordem a um sistema de três equações diferenciais ordinárias de primeira ordem. Solução: Neste caso, considera-se o seguinte problema de valor inicial definido pelo sistema de três equações diferenciais ordinárias, proposto e resolvido em “Computational Mathematics – worked examples and problems with elements of theory”, de N. V. Kopchenova e I. A. Maron, Moscou, Mir Publishers, traduzido para o inglês em 1975, pag. 227. (O livro não apresenta programas computacionais.): x‟ = dx/dt = f1(t,x,y,z) = -2x + 5z y‟ = dy/dt = f2(t,x,y,z) = -(1-sen t)x –y + 3z z‟ = dz/dt = f3(t,x,y,z) = -x + 2z Com as condições iniciais: para t = 0, tem-se x = 2; y = 1; e z = 1. A ser resolvido no intervalo de integração [0,0; 0,3] com passo constante h = 0,1. Listagem do programa computacional RK4_3EQ: program RK4_3EQ; {Resolve um sistema de três equações diferenciais ordinárias de primeira ordem pelo Método de Runge-Kutta 4.} uses crt; var t,x,y,z:array[1..20] of real; k1,k2,k3,k4:array[1..20] of real; l1,l2,l3,l4:array[1..20] of real; m1,m2,m3,m4:array[1..20] of real; h:real; i,n:integer; function f1(t,x,y,z:real):real; begin f1:= -2*x+5*z; end;{function f1} function f2(t,x,y,z:real):real; begin f2:= -(1-sin(t))*x-y+3*z; end;{function f2} function f3(t,x,y,z:real):real; begin f3:= -x+2*z; end;{function f3} 406 begin clrscr; {* ENTRADA DOS DADOS: *} writeln('Digite o valor de n = ');readln(n); writeln('Digite o valor de h = ');readln(h); writeln('Digite o valor de t1 = ');readln(t[1]); writeln('Digite o valor de x1 = ');readln(x[1]); writeln('Digite o valor de y1 = ');readln(y[1]); writeln('Digite o valor de z1 = ');readln(z[1]); {* FIM DA ENTRADA DOS DADOS. *} {* PROCESSAMENTO DOS CÁLCULOS: *} for i:=1 to n-1 do begin k1[i]:=f1(t[i],x[i],y[i],z[i]); l1[i]:=f2(t[i],x[i],y[i],z[i]); m1[i]:=f3(t[i],x[i],y[i],z[i]); k2[i]:=f1(t[i]+h/2,x[i]+h*k1[i]/2,y[i]+h*l1[i]/2,z[i]+h*m1[i]/2); l2[i]:=f2(t[i]+h/2,x[i]+h*k1[i]/2,y[i]+h*l1[i]/2,z[i]+h*m1[i]/2); m2[i]:=f3(t[i]+h/2,x[i]+h*k1[i]/2,y[i]+h*l1[i]/2,z[i]+h*m1[i]/2); k3[i]:=f1(t[i]+h/2,x[i]+h*k2[i]/2,y[i]+h*l2[i]/2,z[i]+h*m2[i]/2); l3[i]:=f2(t[i]+h/2,x[i]+h*k2[i]/2,y[i]+h*l2[i]/2,z[i]+h*m2[i]/2); m3[i]:=f3(t[i]+h/2,x[i]+h*k2[i]/2,y[i]+h*l2[i]/2,z[i]+h*m2[i]/2); k4[i]:=f1(t[i]+h,x[i]+h*k3[i],y[i]+h*l3[i],z[i]+h*m3[i]); l4[i]:=f2(t[i]+h,x[i]+h*k3[i],y[i]+h*l3[i],z[i]+h*m3[i]); m4[i]:=f3(t[i]+h,x[i]+h*k3[i],y[i]+h*l3[i],z[i]+h*m3[i]); t[i+1]:=t[i]+h; x[i+1]:=x[i]+(h/6)*(k1[i]+2*k2[i]+2*k3[i]+k4[i]); y[i+1]:=y[i]+(h/6)*(l1[i]+2*l2[i]+2*l3[i]+l4[i]); z[i+1]:=z[i]+(h/6)*(m1[i]+2*m2[i]+2*m3[i]+m4[i]); end;{for} {* FIM DO PROCESSAMENTO DOS CÁLCULOS. *} {* SAÍDA DOS RESULTADOS: *} writeln('-----------------------'); writeln('-----------------------'); for i:=1 to n do begin writeln('i = ',i,':'); writeln('t = ',t[i],' x = ',x[i]); writeln('y = ',y[i],' z = ',z[i]); writeln('.......................'); end;{for} writeln('---------------------------'); readkey; 407 for i:=1 to n-1 do begin writeln('i = ',i);readkey; writeln('k1=',k1[i],' k2=',k2[i]); writeln('k3=',k3[i],' k4=',k4[i]); writeln('.......................'); readkey; writeln('l1=',l1[i],' l2=',l2[i]); writeln('l3=',l3[i],' l4=',l4[i]); writeln('.......................'); readkey; writeln('m1=',m1[i],' m2=',m2[i]); writeln('m3=',m3[i],' m4=',m4[i]); writeln('.......................'); readkey; end;{for} writeln('FIM.'); readkey; {* FIM DA SAÍDA DOS RESULTADOS. *} end.{* FIM DO PROGRAMA RK4_3EQ. *} Relatório produzido pela execução do programa RK4_3EQ: Digite o valor de n = 4 Digite o valor de h = 0.1 Digite o valor de t1 = 0.0 Digite o valor de x1 = 2.0 Digite o valor de y1 = 1.0 Digite o valor de z1 = 1.0 --------------------------------------------i = 1: t = 0.0000000000E+00 x = 2.0000000000E+00 y = 1.0000000000E+00 z = 1.0000000000E+00 ....................... i = 2: t = 1.0000000000E-01 x = 2.0898416667E+00 y = 1.0054583683E+00 z = 9.9500416667E-01 ....................... i = 3: t = 2.0000000000E-01 x = 2.1588023598E+00 408 y = 1.0233360819E+00 z = 9.8006659724E-01 ....................... i = 4: t = 3.0000000000E-01 x = 2.2061930483E+00 y = 1.0551563071E+00 z = 9.5533654286E-01 ....................... --------------------------i=1 k1= 1.0000000000E+00 k2= 9.0000000000E-01 k3= 8.9750000000E-01 k4= 7.9550000000E-01 ....................... l1= 0.0000000000E+00 l2= 5.2457297006E-02 l3= 4.7084536305E-02 l4= 9.9168428809E-02 ....................... m1= 0.0000000000E+00 m2=-4.9999999999E-02 m3=-5.0000000001E-02 m4=-9.9749999999E-02 ....................... i=2 k1= 7.9533750000E-01 k2= 6.9084541666E-01 k3= 6.8885707291E-01 k4= 5.8289910624E-01 ....................... l1= 9.8835998910E-02 l2= 1.4876101350E-01 l3= 1.4324608060E-01 l4= 1.9106238498E-01 ....................... m1=-9.9833333334E-02 m2=-1.4958354167E-01 m3=-1.4933395833E-01 m4=-1.9858583229E-01 ....................... i=3 k1= 5.8272826669E-01 k2= 4.7478814870E-01 k3= 4.7333132803E-01 k4= 3.6447408997E-01 ....................... l1= 1.9074917430E-01 l2= 2.3469182240E-01 l3= 2.2920595579E-01 l4= 2.6941249581E-01 ....................... m1=-1.9866916528E-01 m2=-2.4767249514E-01 m3=-2.4717582223E-01 m4=-2.9543746253E-01 ....................... FIM. 409