Buscar

RUNGE E KUTTA DE 4ª ORDEM E MÉTODO DE ADAMS-BASHFORTH-MOULTON DE 4ª ORDEM

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 25 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 25 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 25 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Universidade Federal do Maranhão - UFMA 
Bacharelado Interdisciplinar em Ciência e Tecnologia 
 
Camila Ferreira dos Santos 
Mariana Andressa Luna Pinheiro 
 
Professor Dr Kênio 
Cálculo Numérico 
Terceiro Trabalho Prático 
 
 
São Luís - MA 
2016 
 
1 
 
SUMÁRIO 
1. INTRODUÇÃO..............................................................................................................2 
2. FUNDAMENTAÇÃO TEÓRICA .................................................................................2 
3. PROBLEMA DE VALOR INICIAL..............................................................................4 
3.1 RUNGE E KUTTA DE 4ª ORDEM ..............................................................................5 
3.1.1 Resolução e implementação .............................................................................5 
3.2 MÉTODO DE ADAMS-BASHFORTH-MOULTON DE 4ª ORDEM ..........................7 
 3.2.1. Resolução e implementação .............................................................................7 
4. PROBLEMA DE VALOR DE CONTORNO (PVC) LINEAR .......................................11 
4.1 EQUAÇÃO DE LEGENDRE .........................................................................................11 
4.2 MÉTODO DE DIFERENÇAS FINITAS........................................................................12 
4.2.1. Resolução e implementação ...........................................................................14 
5. DISCURSÃO DOS RESULTADOS ...............................................................................17 
4. CONCLUSÃO ..................................................................................................................17 
5. BIBLIOGRAFIA...............................................................................................................18 
ANEXOS ( Algorítmos) .......................................................................................................19 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2 
 
 
 
1. INTRODUÇÃO 
Equações diferenciais ordinárias em problemas de valor inicial (PVI) ou de contorno 
(PVC) são frequentes em modelos de diversos campos de estudo, como economia, biologia, 
mecânica dos fluidos etc. [1] Entretanto, encontrar a solução analítica para estes problemas, 
por mais que haja garantia teórica de sua existência e unicidade, pode ser demasiado 
complicado. Assim, aproximar a solução numericamente se torna conveniente. [1] 
Modelos constituem-se de abstrações, relações matemáticas que caracterizam o 
fenômeno em estudo. Visam entender ou explicar o problema em questão. Sua formulação é 
realizada seguindo passos bem definidos: selecionar as variáveis que influenciam no 
fenômeno; passar o problema para a linguagem matemática; resolução; verificar a 
consistência da solução com o problema; modificar o modelo, caso a aproximação não seja 
satisfatória; e finalmente, aplicar a solução encontrada, ou seja, ser capaz de entender o 
fenômeno por meio do modelo desenvolvido.[2] 
Este trabalho se encaixa em solucionar o modelo, que já foi fornecido em linguagem 
matemática. As soluções aproximadas primeiramente foram verificadas existentes e únicas. 
Em seguida, foram encontradas e comparadas com as soluções analíticas calculadas. 
2. FUNDAMENTAÇÃO TEÓRICA 
Dentre os diversos métodos de aproximação numérica para solução de PVC’s e 
PVI’s, foram empregados o de Runge-Kutta de 4ª ordem e Adams-Bashforth-Moulton para 
o PVI; e o de diferenças finitas para o PVC. 
Os métodos de Runge-Kutta buscam aproveitar os de Taylor, mas eliminando a 
necessidade de calcular derivadas, que é a maior desvantagem destes. Assim, visa tornar-se 
computacionalmente mais viável. Em contraste, é preciso calcular f (x , y) em diversos pontos 
[1], da seguinte forma: 
3 
 
{
 
 
 
 
 
 
 
 
𝑘1 = ℎ𝑓(𝑥𝑛0, 𝑦𝑛)
𝑘2 = ℎ𝑓 (𝑥𝑛 +
ℎ
2
, 𝑦𝑛 +
𝑘1
2
)
𝑘3 = ℎ𝑓 (𝑥𝑛 +
ℎ
2
, 𝑦𝑛 +
𝑘2
2
)
𝑘4 = ℎ𝑓(𝑥𝑛 + ℎ, 𝑦𝑛 + 𝑘3)
𝑦𝑛+1 = 𝑦𝑛 +
1
6
(𝑘1 + 2𝑘2 + 2𝑘3 + 𝑘4)
 (2.1) 
Já Adams-Bashforth-Moulton é um método de previsão-correção. Portanto, as 
primeiras aproximações de y são realizadas por um método explícito (no caso, o de Adams-
Bashforth), e posteriormente, f (x , y) é aproximada por um método implícito (Adams-
Moulton, no caso) [1] da seguinte forma: 
yn+1
(0)=yn+h/24(55 f n−59 f n−1+37 f n−2−9 f n−3) , para n=3,4,..., N 
f (n0+)1= f (xn+1, y(n0+)1) 
y(nk+)1=yn+h/24[9 f (xn+1, y(nk+−11))+19 f n−5 f n−1+ f n−2] , para k=1,2,... 
até k atingir um valor máximo pré-estabelecido ou até 
−ε<(y(nk+)1−y(nk+−11))/ y(nk+)1<ε 
 
 
 
 
4 
 
3. PROBLEMA DE VALOR INICIAL (PVI) 
𝑦′(𝑥) = 𝑦2 cos(𝑥) ∀ 𝑥 ∈ [𝜋,
3𝜋
2
] 
𝑦(𝜋) = 1 
Solução: 
Primeiramente, é necessário verificar a existência e unicidade da solução. 
Pelo Teorema de Existência e Unicidade (TEU), é preciso que as funções f (x)=y'(x) 
e ∂ f /∂ y sejam contínuas num intervalo que contenha x0 e y0 . [1] 
(i) f (x) é um produto de funções contínuas no intervalo, logo, também o é. 
(ii) f y=2 y y' cos(x) , da mesma forma produto de funções contínuas no intervalo 
de interesse, configurando-se como tal. 
Assim, estão garantidas a existência e unicidade da solução deste PVI, de forma que 
pode-se aplicar métodos, sejam analíticos ou numéricos, para encontrá-la. Resolvendo a 
equação analiticamente tem-se: 
{
 
 
 
 
 
 
 
 
 
 
 
 
 
 
𝑦′
𝑦2
= cos(𝑥)
∫
𝑦′𝑑𝑦
𝑦2
= ∫cos(𝑥) 𝑑𝑥
−
1
𝑦
= 𝑠𝑒𝑛(𝑥) + 𝑐
𝑦(𝑥) = −
1
𝑠𝑒𝑛(𝑥) + 𝑐
𝑦(𝜋) = 1 = −
1
𝑠𝑒𝑛(𝜋) + 𝑐
1 = −
1
𝑐
𝑐 = −1
 (3.1) 
Assim, a solução analítica para o PVI é 𝑦(𝑥) = −
1
𝑠𝑒𝑛(𝑥)+𝑐
 ou, de outra forma, 𝑦(𝑥) =
1
𝑠𝑒𝑛(𝑥)+𝑐
. 
5 
 
 
Figura 1. Solução analítica. 
 
 
3.1 RUNGE E KUTTA DE 4ª ORDEM 
 
3.1.1 Resolução e implementação 
 
 O algorítmo do método de Runge e Kutta baseado na referência [4] e modificado de 
acordo com o problema em questão. Inicialmente é feito apenas o cálculo do número de passos 
de acordo com o intervalo de x e o espaçamento inserido. Em seguida é obtida as soluções de 
acordo com as fórmulas para o método. Por fim é feita a plotagem da tabela e do gráfico com 
base nos valores de x e y a cada passo. 
 Foram obtidos os seguintes resultados para o espaçamento de 10-1, 10-2 e 10-3. 
6 
 
 
Figura 2. Plotagem dos valores obtidos para o passo de 0.1. 
 
Figura 3. Plotagem dos valores obtidos para o passo de 0.01. 
7 
 
 
Figura 4. Plotagem dos valores obtidos para o passo de 0.001. 
 
3.2 MÉTODO DE ADAMS-BASHFORTH-MOULTON DE 4ª ORDEM 
 
Adams-Bashforth-Moulton é um método de previsão-correção. Portanto, as primeiras 
aproximações de y são realizadas por um método explícito (no caso, o de Adams-
Bashforth), e posteriormente, f (x , y) é aproximada por um método implícito (Adams-
Moulton, no caso) [1] da seguinte forma: 
y(n
0
+
)
1=yn+h/24(55 f n−59 f n−1+37 f n−2−9 f n−3) , para n=3,4,..., N 
f(0) n+1= f (xn+1, y
(0)
(n+1)) 
y(nk+)1=yn+h/24[9 f (xn+1, y
k-1
(n+1)+19 f n−5 f n−1+ f n−2] , para k=1,2,... 
até katingir um valor máximo pré-estabelecido ou até 
−ε<(yn+1k−yk-1n+1))/ ykn+1<ε 
 
3.2.1 Resolução e implementação 
 
8 
 
Adams-Bashforth-Moulton (ABM), que é um método de previsão-correção, a ideia é 
a já mencionada: utilizar um método explícito para determinar as primeiras aproximações da 
função, pois ABM não é autoiniciável, e de posse destes valores, calcular os seguintes.Para a questão foi escolhido o método de Runge-Kutta de 4ª ordem para a 
aproximação dos primeiros valores. 
De posse destes valores, os seguintes são obtidos por previsão (método explícito de 
Adams-Bashforth) e para cada valor encontrado é feita uma correção, pelo método implícito 
de Adams-Moulton, cujas iterações devem continuar quando uma das seguintes condições 
for verdade: o erro relativo entre os valores de correção for maior que a tolerância ou a 
quantidade de iterações de correção for menor que um máximo escolhido (no caso, 10). 
Antes da aplicação do método, é necessário garantir sua convergência. As exigências 
são as seguintes: 
(i) f (x , y) e ∂ f /∂ y contínuas no intervalo; 
(ii) h escolhido de tal forma que −2<h(𝜕 f /𝜕y)<2 
(i) é verificado para a questão, como já apontado anteriormente. (ii) também é satisfeito, pois 
os h 's escolhidos são 0.1 , 0.01 , 0.001 , que satisfazem a proposição. 
9 
 
 
Figura 5. Solução Numérica com espaçamento h = 0.1, método ABM 
 
 
Figura 6. Solução Numérica com espaçamento h = 0.01, método ABM 
10 
 
 
Figura 6. Solução Numérica com espaçamento h = 0.001, método ABM 
 
11 
 
4. PROBLEMA DE VALOR DE CONTORNO (PVC) LINEAR 
 
[x(1−x)y ']'+σ(1+σ) y=0∀ x 𝜖 [0.1,0.5] 
y(0.1)=1 
y(0.5)=0 
Antes de aplicarmos qualquer método para encontrar ou aproximar a solução, da 
mesma forma que no PVC, é preciso garantir a existência e unicidade desta. O TEU 
neste caso também tem duas exigências: 
Para o problema na forma y' '= p(x) y'+q(x) y+r(x) exige-se: 
(i) p(x) limitada no intervalo. Para o 
 caso em questão tem-se p(x)=(2x−1)/(x−x2) , que 
no intervalo trabalhado é limitada por 0 
(ii) q(x) positiva em todo o intervalo. No problema trabalhado, q(x)=2/[ x(x−1)] , que é 
positiva no intervalo [−1,2] , em particular, é positiva no intervalo trabalhado. 
 
4.1 EQUAÇÃO DE LEGENDRE 
 
A equação de Legendre é dada pela expressão: 
(1 − 𝑥2)
𝑑²𝛩
𝑑𝑥²
− 2𝑥
𝑑𝛩
𝑑𝑥
+ [𝑙(𝑙 + 1) −
𝑚2
1 − 𝑥2
] 𝛩 = 0 (3.1.1) 
quando m=0. A equações aparece quando resolvida a equação de Laplace em coordeanadas 
esféricas. Esta associada à variável 𝜃, já que x = cos𝜃. Como 0 ≤ 𝜃 ≤ 𝜋, o intervalo para x é -1≤ 
x ≤ 1. 
 A equação pode ser reescrita como: 
𝑑²𝛩
𝑑𝑥²
−
2𝑥
(1 − 𝑥2)
𝑑𝛩
𝑑𝑥
+
𝑙(𝑙 + 1)
(1 − 𝑥2)
𝛩 = 0 (3.1.2) 
12 
 
 Esta equação precisa ser resolvida mediante o método de sérias. Ela tem pontos singulares 
em x = ∓1, pois estes dois valores são zeros do denominador. Isto significa que, se quisermos 
encontrar a solução em torno desses valores, precisamos utilizar algum método. No entanto, 
podemos obter a solução em torno de outro ponto, como x = 0, e, neste caso, como se trata de 
um ponto ordinário ( não é raiz do denominador, devemos utilizar o método normal de séries, 
que consiste em supor que a solução da equação diferencial é a série de potencias [5] 
𝛩(𝑥) = 𝑂(𝑥) = ∑𝑎𝑛𝑥
𝑛
∞
𝑛=0
 (3.1.3) 
 
4.2 MÉTODO DAS DIFERENÇAS FINITAS 
 
Seja a equação da forma: 
 
{
𝑦′′(𝑥) + 𝑝(𝑥)𝑦′(𝑥) + 𝑞(𝑥)𝑦(𝑥) = 𝑟(𝑥)
𝑦(𝑥0) = 𝛼
𝑦(𝑥𝑛+1) = 𝛽
 (3.2.1) 
 
onde 𝑝(𝑥) = 
𝑄(𝑥)
𝑃(𝑥)
, 𝑞(𝑥) = 
𝑅(𝑥)
𝑃(𝑥)
 e 𝑟(𝑥) = 
𝑆(𝑥)
𝑃(𝑥)
, em n partes iguais de comprimento ℎ = 
𝛽−𝛼
𝑛
, 
cada. 
Assim, 
𝑥𝑘 = 𝑥0 + 𝑘ℎ, 𝑘 = 0,1, … , (𝑛 − 1) 𝑒 𝑦𝑘 ≅ 𝑦(𝑥𝑘) = 𝑦(𝑥0 + 𝑘ℎ), 𝑘 = 0,1,2, … , 𝑛. 
Considerando a aproximação numérica para a primeira derivada utilizando a regra da 
diferença centrada: 
𝑦′(𝑥) =
𝑦𝑖+1 + 𝑦𝑖−1
ℎ
 (3.2.2) 
A segunda derivada: 
𝑦′′ =
𝑦𝑖+1 − 2𝑦𝑖 + 𝑦𝑖−1
ℎ²
 (3.2.3) 
Substituindo na equação (3.2.1), temos: 
 
(
𝑦𝑖+1 − 2𝑦𝑖 + 𝑦𝑖−1
ℎ²
) + 𝑝(𝑥𝑖)
𝑦𝑖+1 + 𝑦𝑖−1
ℎ
+ 𝑞(𝑥𝑖)𝑦𝑖 = 𝑟(𝑥𝑖) (3.2.4) 
 Para cada i, a equação discretizada fica: 
13 
 
(1 +
ℎ
2
𝑝(𝑥𝑖)) 𝑦𝑖+1 + (𝑞(𝑥𝑖)ℎ
2 − 2)𝑦𝑖 + (1 −
ℎ
2
𝑝(𝑥𝑖)) 𝑦𝑖−1 = 𝑟(𝑥𝑖)ℎ
2 (3.2.5) 
Para i=1: 
(1 +
ℎ
2
𝑝(𝑥1)) 𝑦2 + (𝑞(𝑥0)ℎ
2 − 2)𝑦1 = 𝑟(𝑥0)ℎ
2 − (1 −
ℎ
2
𝑝(𝑥1))𝛼 (3.2.6) 
Para i = n-1: 
(𝑞(𝑥𝑛−1)ℎ
2 − 2)𝑦𝑛−1 + (1 −
ℎ
2
𝑝(𝑥𝑛−1)) 𝑦𝑛−2 = 𝑟(𝑥𝑛−1)ℎ
2 − (1 +
ℎ
2
𝑝(𝑥𝑛−1))𝛽 (3.2.7) 
Assim, para determinar os pontos de 2≤ i ≤ (n-2), segue a relação descrita na equação 
(3.2.5). Logo, para resolver o sistema de equações algébricas lineares, que é um sistema de ordem 
(n-1) com matriz A tridiagonal, dada por: 
𝐴 =
[
 
 
 
 
 
 
𝑑1 𝑐1
𝑎2 𝑑2 𝑐2
𝑎3 𝑑3 𝑐3
⋱ ⋱ ⋱
𝑎𝑛−2 𝑑𝑛−2 𝑐𝑛−2
𝑎𝑛−1 𝑑𝑛−1]
 
 
 
 
 
 
 (3.2.8) 
onde 
{
 
 
 
 
𝑑𝑖 = (𝑞(𝑥𝑖)ℎ
2 − 2), 1 ≤ 𝑖 ≤ (𝑛 − 1)
𝑐𝑖 = (1 +
ℎ
2
𝑝(𝑥𝑖)) , 1 ≤ 𝑖 ≤ (𝑛 − 2)
𝑎𝑖 = (1 −
ℎ
2
𝑝(𝑥𝑖)) , 2 ≤ 𝑖 ≤ (𝑛 − 1)
 (3.2.9) 
O sistema matricial é da forma: 
A Y = B (3.2.10) 
 O vetor Y é: 
[
 
 
 
 
 
𝑦1
𝑦2
𝑦3
⋮
𝑦𝑛−2
𝑦𝑛−1]
 
 
 
 
 
 (3.2.11) 
 E por fim, o vetor B é o vetor direita da equação , na forma: 
14 
 
[
 
 
 
 
 
 
 
 
 𝑟(𝑥1)ℎ
2 − (1 −
ℎ
2
𝑝(𝑥1))𝛼
ℎ²𝑟(𝑥2)
ℎ2𝑟(𝑥3)
⋮
ℎ²𝑟(𝑥𝑛−2)
𝑟(𝑥𝑛−1)ℎ
2 − (1 +
ℎ
2
𝑝(𝑥𝑛−1))𝛽 
]
 
 
 
 
 
 
 
 
 
 (3.2.12) 
 
4.2.1. Resolução e implementação 
 
No algorítmo (Anexo III), baseado na referência [5] e modificado de acordo com o 
problema em questão, inicialmente é feita apenas o cálculo do número de passos e o 
preenchimento dos vetores x e y nos extremos. Para a avaliação dos valores durante o 
intervalo, é empregado o comando inline próprio do MATLAB R2015a. Em seguida é feito 
o preenchimento dos vetores correspondentes às três diagonais da matriz, juntamente com o 
vetor d, que é o vetor à direita da Eq.(3.2.9). Nas linhas restantes, é feita a chamada da função 
TDMAsolver (Anexo IV), algorítmo de Thomas de acordo com a referência [6], que resolve 
sistemas tridiagonais recebendo os quatros vetores do sistema. O vetor z, o qual recebe o 
resultado da função TDMAsolver. O vetor y irá auxiliar na construção da tabela e na 
plotagem do gráfico. 
O algorítmo é feito com objetivo de solucionar a Equação de Legendre deslocada: 
[𝑥(1 − 𝑥)𝑦′]′ + 𝜎(1 + 𝜎)𝑦 = 0, 𝜎 = 0.5 (3.2.1.1) 
Com base na equação (3.2.1) encontramos: 
{
 
 
 
 𝑝(𝑥) =
1 − 2𝑥
𝑥 − 𝑥²
𝑞(𝑥) =
0,75
𝑥 − 𝑥²
𝑟(𝑥) = 0
 (3.2.1.2) 
15 
 
Para o problema na forma y' '= p( x) y'+q( x) y+r (x) exige-se: 
(i) p(x) limitada no intervalo. Para o caso em questão tem-se p(x)= (2x-1)/(x-
x²), que no intervalo trabalhado é limitada por 0 
(ii) q(x) positiva em todo o intervalo. No problema trabalhado, 
q(x)=(0.75/(x(x-1)), que é positiva no intervalo [−1,1.75] , em particular, é positiva 
no intervalo trabalhado. 
 Foram obtidos os seguintes resultados para o espaçamento de 10-1, 10-2 e 10-3. 
 
Figura 8. Plotagem dos valores obtidos para o passo de 0.1. 
16 
 
 
Figura 9. Plotagem dos valores obtidos para o passo0.01. 
 
Figura 10. Plotagem dos valores obtidos para o passo 0.001. 
 
 
 
 
 
17 
 
5. DISCURSÃO DOS RESULTADOS 
Percebe-se que a solução numérica se aproxima com grande precisão da solução 
analítica, mesmo com h=0.1 , que foi o maior espaçamento empregado, tanto para Runge-
Kutta quanto para Adams-Bashforth-Moulton. Assim, todos os métodos foram convergentes 
e eficientes. Para o método ABM, os erros foram da ordem de 10−4 para h=0.1 , da ordem de 
10−8 para h=0.01 e da ordem de 10−12 para h=0.001 . Por outro lado, o tempo de execução do 
algoritmo foi perceptivelmente superior quando da diminuição do tamanho do espaçamento, 
o que pode ter sido por conta das correções. 
 
6. CONCLUSÃO 
Os métodos aplicados se mostrarm eficientes e úteis para o cálculo da aproximação 
da solução. Os erros foram pequenos, apesar de o custo computacional em termos de tempo 
de execução ter sido relativamente lento. 
 
 
 
 
 
 
 
 
 
 
 
18 
 
7. BIBLIOGRAFIA 
 
[1] RUGGIERO, M. A. G. LOPES, V. L. da R., Cálculo Numérico: aspectos teóricos e 
computacionais, 2ª edição, São Paulo: Pearson, 1997. 
 
[2] BASSANEZI, R. C. Equações Diferenciais Ordinárias: Um Curso Introdutório. 
Disponível em <http://gradmat.ufabc.edu.br/disciplinas/listas/iedo/notasdeaulas/equacoes-
diferenciais-ordinriasrodney.pdf>. Acesso em 8 de abril de 2016. 
 
[3] Código em MatLab. Disponível em 
<http://www.cfm.brown.edu/people/dobrush/am33/files/exmatlab.txt>. Acesso em 7 de 
abril de 2016. 
 
[4] Disponível em <https://marleson.wordpress.com/2010/11/03/algoritmos-em-matlab/>. 
Acesso em 04 de Abril de 2016. 
[5] MACHADO, K. D. Eletromagnetismo. Ponta Grossa, PR, Ed. TODAPALAVRA, 
2012, vol.1. 
[6] Disponível em <http://www.rc.unesp.br/igce/demac/balthazar/analise/cap9.pdf>. 
Acesso em 03 de Abril de 2016. 
[7] Disponível em < https://pt.wikipedia.org/wiki/Algoritmo_de_Thomas>. Acesso em 06 
de Abril de 2016. 
 
 
 
 
 
 
19 
 
ANEXOS (Algoritmos) 
ANEXO I 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%MÉTODO DE RUNGE-KUTTA DE ORDEM 4 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
 
%Algoritmo para calcular a solução de PVIs de ordem 1 
%Exemplo: Para calcular a solução de y'(t)= y(x)²cos(x), y(pi)=1, pi <= t <= 3pi/2. 
% f =(x,y) y(x)²cos(x) := ED a ser calculada 
% a = 0 := x inicial 
% y_inicial=1 := condição inicial 
% n = número de iterações 
% h = passo ou incremento 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%% 
 
function[sol]=RK4(f,x0,y_inicial,h,n) 
 
clc 
 
f = inline ('y^2*cos(x)', 'x','y'); 
%f = ('y^2*cosx'); 
h = input('Informe o espacamento: '); 
a = input('Informe o valor inicial de x: '); 
y_inicial = input ('informe o valor inicial de y: '); 
n = ((3*pi/2)-a)/h; 
x(1)=a; 
vi= y_inicial; 
 
%Fórmulas para método de Runge-Kutta de 4a ordens 
 
for i=1:n-1, 
 
k1=h*f(a,y_inicial); 
k2=h*f(a+(1/2)*h,y_inicial+(1/2)*k1); 
k3=h*f(a+0.5*h,y_inicial+(1/2)*k2); 
k4=h*f(a+h,y_inicial+k3); 
y=y_inicial+(1/6)*(k1+2*k2+2*k3+k4); 
y_inicial=y; 
x(i+1) = x(i) + h; 
sol(i)=y_inicial; 
 
end 
 
 
% Plotagem da tabela de valores de x e y a cada passo. 
 
fprintf('\n A tabela de valores de x e y é: \n'); 
20 
 
fprintf(' k x y \n'); 
for i=1:n-1 
fprintf('%i %.3f %.4f \n', i, x(i), sol(i)); 
end 
 
sol=[vi;sol']; 
 
% Plotagem no gráfico. 
plot(x,sol,'r--'); 
legend('Solução Númerica'); 
xlabel('x'); 
ylabel('sol'); 
end 
 
 
ANEXO II 
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%MÉTODO DE ADAMS-BASHFORTH-MOULTON 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
 
function y = ABM (f, x0, y0, xn, h, er) 
 
%As entradas f, x0 e y0 compõem o PVI na forma y'(x0) = f(x,y) e y(x0) = 
y0 
%y é a aproximação da função procurada no intervalo de x0 a xn, com 
o tamanho do espaçamento h 
%er é a tolerância para a correção de Adams-Moulton 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%% 
 
x(1) = x0; %primeiro valor de x, fornecido pelo usuário 
y(1) = y0; %primeiro valor de y, fornecido pelo usuário 
n = (xn-x0)/h; %quantidade de pontos nos quais y será aproximada 
 
for i = 1:3 %Runge-Kutta para determinar as primeiras 3 aproximações 
%de y, já que Adams-Bashforth-Moulton não é autoiniciável 
 
 k1 = f(x(i), y(i)); 
 k2 = f(x(i) + h/2, y(i) + h/2*k1); 
 k3 = f(x(i) + h/2, y(i) + h/2*k2); 
 k4 = f(x(i) + h, y(i) + h*k3); 
 y(i+1) = y(i) + h/6*(k1 + 2*k2 + 2*k3 + k4); 
 x(i+1) = x(i) + h; 
endfor 
 
for i = 4:n %método Adams-Bashforth: previsor 
 y(i+1) = y(i) + h/24*(55*f(x(i), y(i)) - 59*f(x(i-1),y(i-1)) + 
37*f(x(i-2),y(i-2)) - 9*f(x(i-3),y(i-3))); 
 x(i+1) = x(i) + h; 
 k = 0; %relativo à quantidade de iterações de correção 
 e = 1; %relativo ao erro nas iterações de correção 
 aux = y(i+1); %auxiliar para a correção 
21 
 
 
 while(k < 10 || e > er) %verificação da correção: segue enquanto as 
iterações forem 
 
 %menores que o máximo estabelecido (10) ou a tolerância for maior que 
a mÃ-nima estabelecida pelo usuário 
w = y(i) + h/24*(9*f(x(i+1),aux) + 19*f(x(i),y(i)) - 5*f(x(i-1),y(i-1)) + 
f(x(i-2),y(i-2))); %Adams-Moulton: corretor 
e = abs((w - aux)/aux); %cálculo do erro entre as iterações de 
correção 
aux = w; %auxiliar para a próxima iteração de correção 
k = k+1; %incremento das iterações 
 
 endwhile 
 
 endfor 
 
 endfunction 
 
 
ANEXO III 
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%MÉTODO DE DIFERENÇAS FINITAS 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
 
function [x,y] = EDO2DiferencaFinita(p, q, r, a, b, h,y_inicial, y_final) 
 
% A função calcula a EDO de Legendre deslocada de segunda ordem com valores de 
%contorno a serem inseridos utilizando o método das 
%diferenças finitas. 
% Considerando a EDO da forma: y'' + p(x)y' + q(x)y = r(x). 
% Equação de Legendre [x(1-x²)y']'+a(1+a)y = 0, p/ a = 0,5 
% As variáveis de entrada são: 
% * p = O coeficiente p(x) da equação. 
% * q = O coeficiente q(x) da equação. 
% * r = O coeficiente r(x) da equação. 
% * a = O valor inicial de x. 
% * b = O valor final de x. 
% * h = O tamanho do passo ou interações. 
% * y_inicial = O valor inicial da função y(x). 
% * y_final = O valor final da função y(x). 
% As variáveis de saída são os vetores x e y. 
% Determinação da quantidade de segmentação. 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%% 
 
h = input('Informe o espacamento: '); 
a = input('Informe o valor inicial de x: '); 
b = input('Informe o valor final de x: '); 
22 
 
y_inicial = input ('informe o valor inicial de y: '); 
y_final = input ('informe o valor inicial de y: '); 
n = (b-a)/h; 
 
% Determinação dos vetores x e y. 
 
x(1) = a; 
x(n+1) = b; 
y(1) = y_inicial; 
y(n+1) = y_final; 
 
% Determinação das funções p, q e r pelo comando inline em funcao de x. 
 
px = inline('(1-2*x)/(x-x^2)','x'); 
qx = inline('1.75/(x-x^2)','x'); 
rx = inline('0','x'); 
 
% Determinação dos vetores diagonais da matriz tridiagonal A de coeficientes. 
% Subdiagonal 
 
a = zeros(1,n-1); 
 
% Diagonal principal 
 
b = zeros(1,n-1); 
 
% Superdiagonal 
 
c = zeros(1,n-1); 
 
% Determinação do vetor d do sistema Ay = d. 
 
d = zeros(1,n-1); 
 
% Discretização do intervalo x. 
 
for i=1:n 
x(i+1) = x(i) + h; 
end 
 
% Processo de preenchimento da subdiagonal. 
 
for j=1:n-2 
a(j+1) = 1 - (h/2)*px(x(j+2)); 
end% Processo de preenchimento da diagonal principal. 
 
23 
 
for j = 1:n-1 
b(j) = h^2*qx(x(j+1)) - 2; 
end 
 
% Processo de preenchimento da superdiagonal. 
 
for j=1:n-2 
c(j) = 1 + (h/2)*px( x(j+1)); 
end 
 
% Processo de preenchimento do vetor d. 
 
for j=1:n-1 
d(j) = rx(x(j+1))*h^2 ; 
end 
 
% Preenchimento manual dos extremos do vetor d 
 
d(1) = rx(x(2))*h^2 +((h/2)*px(x(2)) - 1)*y(1); 
d(n-1) = rx(x(n))*h^2 -((h/2)*px(x(n)) + 1)*y(n+1); 
 
% Chamada da função TDMAsolver que resolve o sistema tridiagonal. 
% Z é a solução nos pontos intermediários. 
 
z = TDMAsolver(a,b,c,d); 
 
y = [y_inicial, z(1:n-1),y_final]; 
 
% Plotagem da tabela de valores de x e y a cada passo. 
 
fprintf('\n A tabela de valores de x e y é: \n'); 
fprintf(' k x y \n'); 
for i=1:n-1 
fprintf(' %i | %.3f | %.4f \n', i, x(i), y(i)); 
end 
 
% Plotagem no gráfico. 
 
plot(x,y,'r-*'); 
legend('Solução Númerica'); 
xlabel('x'); 
ylabel('y'); 
end 
 
ANEXO IV 
 
24 
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%Algoritimo de Matriz Tridiagonal 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
 
% O algorítmo de Thomas ( ou algorítmo de matriz diagonal) é um método 
% algébrico que consiste numa simplificação deeleminação gaussiana para 
% resolução de sistemas de equação tridiagonal. 
%a, b, c são os vetores colunas para a compressão da matriz tridiagonal, d é o vetor à 
direita 
% N é o número de linhas 
 
function x = TDMAsolver(a,b,c,d) 
 
N = length(d); 
 
% Modifica o primeiro coeficiente de cada linha 
c(1) = c(1) / b(1); % Risco de divisão por zero. 
d(1) = d(1) / b(1); 
 
for n = 2:1:N 
 temp = b(n) - a(n) * c(n - 1); 
 c(n) = c(n) / temp; 
 d(n) = (d(n) - a(n) * d(n - 1)) / temp; 
end 
 
% Agora voltando a substituição. 
x(N) = d(N); 
for n = (N - 1):-1:1 
 x(n) = d(n) - c(n) * x(n + 1); 
end 
end

Continue navegando