O documento apresenta os resultados de três problemas resolvidos utilizando o método numérico de Runge-Kutta de 4a ordem para sistemas de equações diferenciais ordinárias. Os problemas tratam da validação do método, da resolução de um circuito elétrico RLC e de outro sistema de equações. As soluções numéricas são comparadas com as soluções exatas quando fornecidas e os resultados são apresentados em tabelas e gráficos.
TRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docx
Relatorio - Algoritmos
1. UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO
CENTRO TECNOLÓGICO
ENGENHARIA ELÉTRICA
ANA LUIZA CÔRTE E MAURO LUIZ PEDRONI JUNIOR
TRABALHO COMPUTACIONAL DE
ALGORITMOS NUMÉRICOS – RELATÓRIO
Vitória
Dezembro de 2016
2. UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO
ANA LUIZA CÔRTE E MAURO LUIZ PEDRONI JUNIOR
TRABALHO COMPUTACIONAL DE
ALGORITMOS NUMÉRICOS – RELATÓRIO
Vitória
Dezembro de 2016
Relatório apresentado à
professora Cláudia Galarda
Varassin como parte integrante do
trabalho computacional da
disciplina de algoritmos numéricos
do curso de Engenharia Elétrica
3. SUMÁRIO
INTRODUÇÃO........................................................................................... 4
MÉTODO NUMÉRICO............................................................................... 5
PROBLEMAS TRATADOS ....................................................................... 6
PROBLEMA 1......................................................................................... 6
PROBLEMA 2......................................................................................... 6
PROBLEMA 3......................................................................................... 6
RESULTADOS .......................................................................................... 8
PROBLEMA 1......................................................................................... 8
PROBLEMA 2....................................................................................... 10
PROBLEMA 3....................................................................................... 12
CÓDIGO .................................................................................................. 17
ANEXO I – CÓDIGO MATLAB PARA PROBLEMA 1 ............................ 20
ANEXO II – CÓDIGO MATLAB PARA PROBLEMA 2 ........................... 21
ANEXO III – CÓDIGO MATLAB PARA PROBLEMA 3 .......................... 22
BIBLIOGRAFIA....................................................................................... 23
4. LISTA DE FIGURAS
Figura 1: circuito elétrico proposto............................................................. 7
Figura 2: Gráfico comparativo entre y1 exata e y1 calculada .................... 9
Figura 3: Gráfico comparativo entre y2 exata e y2 calculada .................. 10
Figura 4: Gráfico da solução y1 e y2 para m=20 ..................................... 12
Figura 5: Gráfico da solução numérica para m=100 ................................ 16
LISTA DE TABELAS
Tabela 1: Solução para m=5...................................................................... 8
Tabela 2: Solução para m=5...................................................................... 9
Tabela 3: Solução para m=5.................................................................... 11
Tabela 4: Solução para m=20.................................................................. 11
Tabela 5: Solução para m=30.................................................................. 13
Tabela 6: Solução para m=100................................................................ 15
5. 4
INTRODUÇÃO
Equações diferenciais ordinárias (EDO) são muito utilizadas na
modelagem de modelos matemáticos. Há vários métodos que resolvem
analiticamente uma EDO, entretanto nem sempre é possível obter uma solução
analítica. Neste caso, os métodos numéricos são uma saída para se encontrar
uma solução aproximada.
O trabalho tem como objetivo a resolução de um conjunto de equações
diferenciais ordinárias, chamada de sistema de equações. O método aplicado
aqui foi o de Rungue Kutta de 4ª ordem em que a partir de valores inicias foi
obtido o resultado aproximado de um sistema de EDOs de primeira ordem.
Para isso desenvolveu-se um programa em linguagem C que resolve 3
exercícios (sistemas) diferentes.
6. 5
MÉTODO NUMÉRICO
O método utilizado nesse trabalho é bem simples. Basta estender o
método de Runge Kutta de 4ª ordem utilizado para solução de EDOs. Com
esse método calculam-se as aproximações para os valores de y1(x) e y2(x) de
forma sincronizada a partir de valores iniciais quaisquer de y1 e y2. A cada
discretização novos valores de y1(i+1) e y2(i+1) a partir de valores anteriores
de y1 (y1(i)) e y2 (y1(i)). Abaixo estão as equações utilizadas para o cálculo da
solução aproximada do sistema de equações.
𝑦1(𝑖 + 1) = 𝑦1(𝑖) +
ℎ
6
∗ (𝑘11 + 2𝑘21 + 2𝑘31 + 𝑘41)
𝑦2(𝑖 + 1) = 𝑦2(𝑖) +
ℎ
6
∗ (𝑘12 + 2𝑘22 + 2𝑘32 + 𝑘42)
Os valores de k11, k21, k31, k41 e k12, k22, k32, k42 representam as
declividades de y1 e y2, respectivamente.
𝑘11 = 𝑓1(𝑥(𝑖), 𝑦1(𝑖), 𝑦2(𝑖))
𝑘21 = 𝑓1(𝑥(𝑖) +
ℎ
2
, 𝑦1(𝑖) + ℎ(𝑘11)/2, 𝑦2(𝑖) + ℎ(𝑘12)/2)
𝑘31 = 𝑓1(𝑥(𝑖) +
ℎ
2
, 𝑦1(𝑖) + ℎ(𝑘21)/2, 𝑦2(𝑖) + ℎ(𝑘22)/2)
𝑘41 = 𝑓1(𝑥(𝑖) + ℎ, 𝑦1(𝑖) + ℎ𝑘31, 𝑦2(𝑖) + ℎ𝑘32)
𝑘12 = 𝑓2(𝑥(𝑖), 𝑦1(𝑖), 𝑦2(𝑖))
𝑘22 = 𝑓2(𝑥(𝑖) +
ℎ
2
, 𝑦1(𝑖) + ℎ(𝑘11)/2, 𝑦2(𝑖) + ℎ(𝑘12)/2)
𝑘32 = 𝑓2(𝑥(𝑖) +
ℎ
2
, 𝑦1(𝑖) + ℎ(𝑘21)/2, 𝑦2(𝑖) + ℎ(𝑘22)/2)
𝑘42 = 𝑓2(𝑥(𝑖) + ℎ, 𝑦1(𝑖) + ℎ𝑘31, 𝑦2(𝑖) + ℎ𝑘32)
7. 6
PROBLEMAS TRATADOS
PROBLEMA 1
O problema 1 é chamado “problema da validação” pois as
equações exatas foram fornecidas para a comparação dos
resultados obtidos. O exercício fornece o seguinte sistema de
equações diferenciais e valores iniciais para Y.
{
𝑦′
1
= 𝑓1(𝑥, 𝑦1, 𝑦2) = 𝑦2
𝑦′
2
= 𝑓2(𝑥, 𝑦1, 𝑦2) = 2𝑦1 + 𝑦2 − 𝑥2
𝑦1(0.0) = 1.0
𝑦2(0.0) = 0.0
O domínio no qual o sistema será calculado é 𝐷 = [0.0, 1.0], com
𝑚 = 5 e 𝑚 = 20.
A questão solicita ainda que sejam traçadas em um mesmo plano
de par de eixos cartesianos, a solução numérica 𝑦1 obtida com
𝑚 = 5 e a solução 𝑦1 exata. Da mesma maneira, deve-se traçar a
solução numérica 𝑦2 obtida com 𝑚 = 5 e a solução 𝑦2 exata.
As soluções exatas fornecidas são:
𝑦1, 𝑒𝑥𝑎𝑡𝑎 = 0.25(𝑒2𝑥
+ 2𝑥2
− 2𝑥 + 3)
𝑦2, 𝑒𝑥𝑎𝑡𝑎 = 𝑦′
1
PROBLEMA 2
O problema 2 fornece o seguinte sistema de equações diferenciais
e valores iniciais para Y.
{
𝑦′
1
= 𝑓1(𝑥, 𝑦1, 𝑦2) = 𝑦1 + 𝑦2 + 3𝑥
𝑦′
2
= 𝑓2(𝑥, 𝑦1, 𝑦2) = 2𝑦1 − 𝑦2 − 𝑥
𝑦1(0.0) = 1.0
𝑦2(0.0) = −1.0
O domínio no qual o sistema será calculado é 𝐷 = [0.0, 1.0], com
𝑚 = 10 e 𝑚 = 20.
A questão solicita que sejam traçadas em um plano de par de eixos
cartesianos, as soluções numéricas obtidas com 𝑚 = 20.
PROBLEMA 3
O problema 3 fornece o seguinte circuito RLC abaixo:
8. 7
Figura 1: circuito elétrico proposto
As correntes 𝐼1 e 𝐼2 são observadas na malha esquerda e direita do
circuito, respectivamente. Usando a Lei de Tensão de Kirchoff, é
possível traçar o seguinte modelo matemático para o circuito:
{
𝐼′
1 = 12 − 4𝐼1 + 4𝐼2
𝐼′
2 = 4.8 − 1.6𝐼1 + 𝐼2
Supõem-se que as cargas e as correntes são nulas quando a
chave é fechada no instante 𝑡 = 0. A questão solicita que sejam
obtidos os valores de 𝐼1(𝑡) e 𝐼2(𝑡) para t no intervalo 𝐼 = [0, 𝑡final] e
𝑡final = 15 e m = 30 e m = 100. Além disso, a questão ainda solicita
que seja traçado o gráfico das correntes.
17. 16
O gráfico obtido para a solução numérica foi:
Figura 5: Gráfico da solução numérica para m=100
18. 17
CÓDIGO
//Trabalho de algoritmos numéricos
- Ana Luiza Côrte e Mauro Pedroni
//Acesso às bibliotecas
#include<stdio.h>
#include<math.h>
#define Max 100
// Indica as funcoes
float f1(float x, float y1, float y2, int
e)
{
float der1;
// --- Problema 1
if (e==1)
{
der1 = y2;
}
// ---- Problema 2
if (e==2)
{
der1 = y1 + y2 + (3 * x);
}
// ---- Problema 3
if (e==3)
{
der1 = 12 - (4 * y1) + (4 * y2);
}
return(der1);
}
float f2(float x, float y1, float y2,
int e)
{
float der2;
// --- Problema 1
if (e==1)
{
der2 = (2 * y1) + y2 - (x*x);
}
// ---- Problema 2
if (e==2)
{
der2 = (2 * y1) - y2 - x;
}
// ---- Problema 3
if (e==3)
{
der2= 4.8 - (1.6*y1) +
(1.2*y2);
}
19. 18
return(der2);
}
// Main -------------------------------
int main(){
float x[Max], y1[Max], y2[Max],
a, b, y1a, y2a, h, k11[Max],
k21[Max], k31[Max], k41[Max],
k12[Max], k22[Max], k32[Max],
k42[Max];
int m, i, e = 0;
while(e!=1||e!=2||e!=3||e!=4)
{
// Menu
printf("nDigite uma opção:nn
1 - Resolver o problema 1 (o
exemplo da validação).nn 2 -
Resolver o problema 2.nn 3 -
Resolver o problema do circuito
elétrico. nn 4 - SairnnEscolha:");
scanf("%d", &e);
if ((e==1)||(e==2)||(e==3))
{
// Dados de entrada
printf("nDigite a:");
scanf("%f", &a);
printf("nDigite b:");
scanf("%f", &b);
printf("nDigite y1(a):");
scanf("%f", &y1a);
printf("nDigite y2(a):");
scanf("%f", &y2a);
printf("nDigite o tamanho da
discretização desejada (m):n");
scanf("%d", &m);
// Calcular o tamanho do
passo
h = (b - a) / m;
// Valor inicial de X
x[0] = a;
for (i = 0; i < m; i++)
{
x[i + 1] = x[i] + h;
}
// Valores iniciais
y1[0] = y1a;
y2[0] = y2a;
// Obtendo a solução
numérica
// Cálculo dos Ks e seus
argumentos
for (i = 0; i < m; i++)
{
k11[i] = f1(x[i], y1[i], y2[i], e);
24. 23
BIBLIOGRAFIA
PDF da descrição do trabalho computacional
Rafael Barbosa. “Sistemas de Equações Diferenciais: Método de Euler e
Método de Runge Kutta de 4ª ordem”