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

Documentos relacionados