Buscar

alceu_domingues_alves_anais_eventocoloquiomatematica

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 16 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 16 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 16 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

1
RESOLUCAO DE EQUACOES DIFERENCIAIS ORDINARIAS POR
METODOS NUMERICOS UTILIZANDO A MATEMATICA
INTERVALAR
Alceu Domingues Alves - UFPE/UPE
aaalllceu@yahoo.com.br
Romildo Albuquerque Nogueira - DMFA/UFRPE
ran.pe@terra.com.br
1. Introdução
A Matemática Intervalar visa dar suporte a problemas que lidam com a in-
certeza. Os números representados como intervalos servem como controladores
da propagação do erro, uma vez que garantem que a resposta correta de deter-
minado problema pertence ao intervalo obtido. Desse modo, pode-se afirmar que
sua utilização consiste no controle rigoroso da propagação dos erros dos dados e
parâmetros iniciais ao longo do processo computacional provocada por sucessivos
erros de arredondamentos e/ou truncamentos. Portanto, A finalidade principal da
matemática intervalar é o controle do erro nas operações numéricas.
Nesse contexto, o objetivo deste trabalho é proceder uma aplicação da matemática
intervalar nas soluções de equações diferenciais ordinárias e compará-las com soluções
numéricas. Portanto, as soluções numéricas foram obtidas através da implementação
computacional na linguagem Phyton, bem como através do sistema Maple, e soluções
intervalares desenvolvidas através do ambiente de programação IntPy que prevê a
tipagem de variáveis como intervalares.
O trabalho está dividido em sete seções. A primeira seção refere-se à apre-
sentação do trabalho. A seção seguinte trata da apresentação de erros de aprox-
imação, arredondamento e truncamento em máquinas calculadoras e computadores.
Na terceira seção, apresentamos algumas definições básicas que envolvem a matemática
intervalar, seguida da quarta seção que onde mostramos com brevidade o que são
equações diferenciais ordinárias.
A seção cinco contém uma breve explanação de alguns métodos de solução
das equações diferenciais ordinárias, na seção seis apresentamos os resultados das
soluções das equações diferenciais ordinárias pelo métodos de solução apresentados,
utilizando meios numéricos e a matemática intervalar, seguida da última parte do
trabalho onde faço as conclusões.
2. Erros de Aproximação, arredondamento e trun-
camento
Dado um problema f́ısico, para obtermos soluções numéricas nem sempre con-
seguimos valores próximos do que se esperaria, podendo também chegar a resultados
2
que não têm relação alguma com o problema original. Isto se deve ao fato de que
quando utilizamos calculadora ou o computador, estes possuem limitações quanto
à representação dos números, principalmente quando necessitamos de números in-
finitos. A representação de um número depende da base escolhida ou dispońıvel
na máquina em uso, e do número máximo de d́ıgitos usados na sua representação.
Sendo assim, torna-se necessário um arredondamento ou um truncamento dessa rep-
resentação, o que gera um erro. No computador ou calculadora, de maneira geral,
um número é representado internamente por impulsos elétricos que indicam dois
estados: 0 ou 1, ou seja, na base 2 ou binária. Tal representação de um número x
na base β é dada por:
x = ±
[
d1
β1
+
d2
β2
+ · · ·+ dt
βt
]
βe
onde:
β - é a base em que a máquina opera;
di - são números inteiros contidos no intervalo 0 ≤ di ≤ β − 1; i = 1, 2, · · · , t;
e - é o expoente no intervalo [I, S];
I, S - são os limites inferior e superior respectivamente, para a variação do expoente;[
d1
β1 +
d2
β2 + · · ·+
dt
βt
]
- é chamada de mantissa e é a parte do número que representa
seus d́ıgitos significativos e t é o número de d́ıgitos significativos do sistema de rep-
resentação, comumente chamado de precisão da máquina.
Por exemplo, um número é representado em uma máquina que opera no sistema
β = 10; t = 3; e = [−2, 2] da seguinte forma:
±0.d1d2d3 × 10e,
onde 0≤ dj ≤ (β − 1), d1 6= 0,−2 ≤ e ≤ 2.
O zero em ponto flutuante é, em geral, representado com o menor expoente
posśıvel na máquina. Isto porque a representação do zero por uma mantissa nula e
um expoente qualquer para a base β pode acarretar perda de d́ıgitos significativos
no resultado da adição deste zero a outro número. Por exemplo, em uma máquina
que opera na base 10 com 4 d́ıgitos na mantissa, para x = 0.0000 × 104 e y =
0.3134 × 10−2 o resultado de x + y seria 0.3100 × 10−2, isto é, são perdidos dois
d́ıgitos do valor exato y. Este resultado se deve à forma como é efetuada a adição
em ponto flutuante. Portanto, dada a forma de representação de um número na
máquina, podem ser necessários arredondamentos ou truncamentos de forma que
se perca informações sobre esse número, cometendo-se assim erros.
2.1. Erro Absoluto
Definimos como erro absoluto a diferença entre o valor exato de um número x e
de seu valor aproximado x′:
EAx = x− x′.
3
Apenas o valor de x′ é conhecido, neste caso é imposśıvel obter o valor exato do
erro absoluto. O que se faz é obter um limitante superior ou uma estimativa para o
módulo do erro absoluto. Por exemplo, sabendo-se que π ∈ (3.14, 3.15) tomaremos
para π′ um valor dentro deste intervalo e teremos então |EAπ| = |π − π′| < 0.01.
2.2. Erro Relativo
O erro relativo é definido como o erro absoluto dividido pelo valor aproximado:
ERx =
EAx
x′
=
x− x′
x′
.
Numa comparação entre dois números, como saber se ambos estão representados
com a mesma precisão? É preciso comparar a ordem de grandeza de x e y. O
número que tiver a maior ordem de grandeza será o mais preciso, porém, dependendo
da ordem de grandeza dos números envolvidos, o erro absoluto não é suficiente
para descrever a precisão de um cálculo. Por essa razão, o erro relativo é mais
amplamente empregado.
2.3. Erros de Arredondamento e Truncamento
Na maioria dos sistemas, o resultado exato da operação é normalizado e em seguida
arredondado ou truncado para t d́ıgitos, obtendo assim o resultado aproximado, que
é armazenado na memória da máquina. Na fórmula geral, quando se usa trunca-
mento, o erro relativo da operação será:
|ERx| < 10−t+1
E no arredondamento:
|ERx| <
1
2
× 10−t+1
Dada uma seqüência de operações, como, por exemplo, u = [(x+ y)− z− t]÷w,
é importante a noção de como o erro em uma operação propaga-se ao longo das
operações subseqüentes. O erro total em uma operação é composto pelo erro das
parcelas ou fatores e pelo erro no resultado da operação.
Para exemplificar a idéia de truncamento e arredondamento, considere um sis-
tema de ponto flutuante de quatro digitos na base 10. Dados x = 0.957 × 104 e
y = 0.1272 × 102, obter x + y. A adição em aritmética de ponto flutuante requer
o alinhamento dos pontos decimais dos dois números. Para isto, a mantissa do
número de menor exponte dave ser deslocada para a direita. Este deslocamento
deve ser de um número de casas decimais igual à diferença entre os dois expoentes.
Alinhando os pontos decimais dos valores acima, temos:
x = 0.957× 104 e y = 0.001272× 104.
Então: x+ y = (0.957 + 0.001272)× 104 = 0.938272× 104.
Este é o resultado exato desta operação. Dado que em nosso sistema t é igual a
4, este resultado deve ser arredondado ou truncado. Para se arredondar um número,
4
segue-se a seguinte regra: pega-se o último algarismo da mantissa, se esse algarismo
for menor que 5, o algarismo na posição anterior permanece o mesmo. Caso ele seja
maior ou igual a 5, o algarismo na posição anterior é incrementado de uma unidade.
Repete-se esse procedimento até chegar no número de algarismos permitidos pelos
sistema.
Para se truncar um número, simplesmente despreze os algarismos que vierem
depois da posição de t que é o tamanho da mantissa.
Então, o resultado do nosso exemplo, por arredondamento, é 0.9383× 104 e por
truncamento é 0.9382× 104.
3. A Matemática intervalar
A matemática intervalar surgiu no final da década de 50 visando dar suporte a
problemas que lidam com a incerteza. Os números representados como intervalosservem como controladores da propagação do erro, uma vez que garantem que a re-
sposta correta de determinado problema pertence ao intervalo obtido. Desse modo,
pode-se afirmar que sua utilização consiste no controle rigoroso da propagação dos
erros dos dados e parâmetros iniciais ao longo do processo computacional provocada
por sucessivos erros de arredondamentos e/ou truncamentos.
Portanto, a matemática intervalar busca resolver problemas que se concentram
fundamentalmente na criação de um modelo computacional que reflita fidedigna-
mente o controle e análise dos erros que ocorrem no processo computacional, e na
escolha de técnicas de programação adequadas para desenvolvimento de softwares
cient́ıficos buscando minimizar os erros nos resultados.
3.1. Definições Básicas da Matemática Intervalar
O conjunto de todos os x ∈ R satisfazendo a condição a1 ≤ x ≤ a2, é chamado
um intervalo e é denotado por:
[a1; a2] = {x ∈ R|a1 ≤ x ≤ a2}
Já o conjunto IR, ou espaço dos intervalos, é definido como sendo o conjunto de
todos os intervalos reais, ou seja:
IR = {[a1; a2] | a1, a2 ∈ R, a1 ≤ a2}
3.2. Relação de Ordem entre Intervalos
Sejam X = [x1;x2], Y = [y1; y2], Z = [z1; z2] e W = [w1;w2]. Os intervalos X e Y
são iguais se e só se x1 = y1 e x2 = y2.
Entre as várias relações de ordem intervalares descritas na literatura, tem-se a
extensão intervalar da relação de ordem real < definida por Moore [4] como segue:
X < Y ⇐⇒ x2 < y1
5
Outra relação de ordem é dada por:
X ≤ Y, x1 ≤ y1 ∧ x2 ≤ y2
As relações usuais se aplicam, pois os intervalos também são conjuntos.
3.3. Aritmética
As operações aritméticas no espaço dos intervalos R são definidas por:
(i) X + Y = [x1 + y1;x2 + y2],
(ii) X ∗ Y = [min(δ);max(δ)].
Onde δ = {x1y1;x1y2;x2y1;x2y2}. Complementarmente, são definidos os
elementos negativo e rećıproco, respectivamente:
(iii) −X = [−x2;−x1] = {−x|x ∈ R} ,
(iv) 1/X = [1/x2; 1/x1] = [1/x|x ∈ X ∧ 0 /∈ X].
Assim:
(v) X − Y = X + (−Y ),
(vi) X/Y = X ∗ 1/Y.
3.4. Exatidão máxima
A primeira questão que se impõe a qualquer tentativa de implementação da ar-
itmética intervalar em computadores é o fato de que o espaço de intervalos não
é mais definido sobre os reais, mas sim sobre o sistema de ponto flutuante. É
necessário, portanto, utilizar-se de método que garanta a inclusão do resultado ver-
dadeiro no resultado intervalar. Esse método é a aritmética de exatidão máxima.
Aplicada à matemática intervalar, a aritmética de exatidão máxima redefine a ar-
itmética intervalar de modo que:
(i) X + Y = [(x1 + y1); (x2 + y2)],
(ii) X ∗ Y = [min(∇δ);máx(∆δ)].
onde ∇ e ∆ constituem os arredondamentos direcionados do sistema de ponto flu-
tuante.
6
3.5. Outras definições
O valor absoluto de um intervalo X é definido por:
|X| = max {|x1| , |x2|}
e seu diâmetro é dado por:
w(X) = x2 − x1.
Define-se também o ponto médio de X:
mid(X) =
1
2
(x1 + x2).
Objetivando transformar R em espaço métrico define-se a distância de Hausdorff
entre X e Y como:
d(X;Y ) = max {|y1 − x1| , |y2 − x2|} .
No próximo caṕıtulo, apresentaremos uma breve definição de equações diferen-
cias ordinárias de primeira ordem e as respectivas soluções, considerando os métodos
de Taylor e Runge-Kutta.
4. Equações Diferenciais Ordinárias - EDO
A equação
F = (x, y,
dy
dx
,
d2y
dx2
,
d3y
dx3
, ...,
dny
dxn
) = 0 (4.1)
é chamada de equação diferencial ordinária de n-ésima ordem [1]. Ela é uma equação
ordinária porque há somente uma variável independente, x. É de n-ésima ordem
porque a maior derivada presente na equação é de ordem n.
Uma função y(x), n vezes diferenciável, é uma solução de (4.1) se satisfaz a
equação. De acordo com Boyce [1], uma equação diferencial ordinária tem várias
soluções. É necessário que sejam dadas informações adicionais sobre y(x) e sobre
suas derivadas em valores espećıficos de x para que tenhamos uma solução única.
Para uma equação diferencial de ordem n, normalmente são suficientes n condições
adicionais para garantir que a solução y(x) seja única. Se todas as n condições
adicionais forem especificadas para um mesmo valor de x, x0 por exemplo, temos
o que chamamos de Problema de Valor Inicial. Caso estas n condições adicionais
sejam dadas para mais de um valor de x, temos um Problema de Valor de Contorno.
Em geral, é dif́ıcil a obtenção de soluções anaĺıticas para equações diferenciais.
Na maioria dos casos as soluções devem ser geradas através de métodos numéricos.
Iremos tratar apenas de equações diferenciais de 1a ordem, mas os métodos que
iremos abordar também podem ser usados para resolver equações diferenciais de
ordem superior.
7
4.1. Equações diferenciais ordinárias de primeira ordem
Vamos considerar equações diferencias escritas na forma:
F = (x, y,
dy
dx
) = 0.
Esta equação pode ser escrita como:
dy
dx
= f(x, y)
ou
y′ = f(x, y) (4.2)
envolvendo uma função incógnita y = y(x) e sua derivada. Onde x é a variável
independente e y é a variável dependente.
A equação diferencial, juntamente com uma condição inicial, constituem um
problema de valor inicial. O qual pode ser apresentado da seguinte forma:{
y′ = f(x, y)
y(x0) = y0
(4.3)
5. Soluções numéricas de equações diferenciais
ordinárias
Há vários métodos de resolução de equações diferenciais, a maioria deles usa
técnicas anaĺıticas como integração e expansão em série. Portanto, conforme Franco
[3] procura-se sempre encontrar uma solução exata para o problema, infelizmente
existem vários problemas importantes nos quais estes métodos ou não se aplicam,
ou acabam gerando muitas complicações.
Nestes casos é indicada a utilização de métodos numéricos para obter uma aprox-
imação da solução do nosso problema.
5.1. O método de Taylor
Consideremos o Problema de Valor Inicial. Aplicando a série de Taylor para y(x)
no ponto xk, temos
y(x) = y(xk)+
y′(xk)
1!
(x−xk)+
y′′(xk)
2!
(x−xk)2+...+
y(n)(xk)
n!
(x−xk)n+
y(n+1)(ξ)
(n+ 1)!
(x−xk)(n+1),
calculando no ponto xk+1 e considerando que xk+1 − xk = h temos que
y(xk+1) = y(xk) +
y′(xk)
1!
h+
y′′(xk)
2!
h2 + ...+
y(n)(xk)
n!
hn +
y(n+1)(ξ)
(n+ 1)!
h(n+1) (5.1)
8
Como y0(xk) = f(xk, yk) podemos relacionar as derivadas de ordem superior
com as derivadas da função f(x, y). Como exemplo consideremos
f ′′(xk) =
d
dx
f(xk, yk) = fx + fyy′ = fx + fyf
f ′′′(xk) = fy(fx + fyf) + f2fyy + 2ffxy + fxx.
Desta forma podemos obter uma aproximação para o cálculo de 5.1, substituindo
as relações do tipo acima na série de Taylor. Dizemos que um método para a solução
de um problema de valor inicial é de ordem n se este coincide com a série de Taylor
até o n-ésimo termo. O erro local cometido por esta aproximação será da forma
E(xk+1) =
y(n+1)(ξ)
(n+ 1)!
h(n+1) ξ ∈ [xk, xk+1]
Em geral, podemos determinar a ordem do método de Taylor pela fórmula do
erro. Se o erro depende da n-ésima derivada dizemos que o método é de ordem n-1.
É importante lembrar que quanto maior a ordem do método mais preciso será o
resultado.
5.2. O método de Runge-Kutta
A estratégia do método de Runge-Kutta é aproveitar as qualidades do método
de Taylor, ou seja, poder escolher a precisão do resultado, sem ter que calcular as
derivadas totais de f(x, y). O método de Runge-Kutta utiliza valores de f(x, y) no
intervalo [xn, xn + h] para obter uma boa aproximação para yn+1.
O método de Runge-Kutta de 1a ordem coincide com o método de Taylor de
1a ordem e é mais conhecido como método de Euler. Apresentaremos apenas com
Runge-Kutta de 3a e 4a ordem.
• Runge-Kutta de 3a ordem
yk+1 = yk +
h
6
[f1 + 4f2 + f3]
com os coeficientes f dados por
f1 = f(xk, yk)
f2 = f(xk + h2 , yk +
h
2 f1)
f3 = f(xk + h, yk + 2hf2 − hf1)
• Runge-Kutta de 4a ordem
yk+1 = yk +
h
6
[f1 + 2f2 + 2f3 + f4]
com os coeficientes f dados por
9
f1 = f(xk, yk)
f2= f(xk + h2 , yk +
h
2 f1)
f3 = f(xk + h2 , yk +
h
2 f1)
f4 = f(xk + h, yk + hf3)
6. Resultados
Para gerar os resultados deste trabalho, foram utilizadas tres ferramentas com-
putacionais para calcular as soluções das equações diferenciais. As tres foram:
Maple,Python e o IntPy. O Maple é uma poderosa ferramenta de computação
algébrica que inicialmente foi desenvolvida por um grupo da Universidade de Wa-
terloo no Canadá, e que atualmente é comercializado pela empresa MapleSoft. Este
software possui várias ferramentas para cálculos simbólicos, cálculos numéricos, pro-
gramação e construção de gráficos 2D e 3D. Atualmente, o Maple encontra-se na
versão 14, sendo esta a versão utilizada neste trabalho para calcular as soluções das
EDOs.
O Python é uma linguagem de programação amplamente conhecida na comu-
nidade acadêmica que possui várias caracteŕısticas como: alto ńıvel, interpretada,
código aberto, imperativa, orientada a objetos, de tipagem dinâmica e forte. O
objetivo principal destas caracteŕısticas é concentrar os esforços do pesquisador
mais no desenvolvimento do algoritmo do que nos detalhes da implementação es-
pećıficos de cada linguagem de programação. Estas peculiaridades do Python têm
incentivado vários membros da comunidade acadêmica a desenvolverem programas
e frameworks nesta linguagem. Neste trabalho a versão do Python utilizada para
resolver as EDOs numericamente através de programação foi a 2.6.
O IntPy é uma frameworks para Python desenvolvida e mantida por membros
do Centro de Informática da Universidade Federal de Pernambuco que tem como
objetivo implementar as Definições e Operações da Matemática Intervalar na lin-
guagem Python. Neste ponto, enfatizamos a diferença entre trabalhar apenas com
as funções numéricas nativas do Python e as funções que englobam as propriedades
da matemática intervalar que o IntPy adiciona ao Python. A versão do IntPy uti-
lizada neste trabalho é 0.1.3 para Windows 32 bits.
Todas as ferramentas utilizadas neste trabalho foram executas em um computa-
dor com processador Intel Core 2 Duo com 3GB de memória RAM, HD de 160GB e
sistema operacional Windows XP 32bits. A equação diferencial ordinária utilizada
nos testes foi y′ = y − x+ 1 com y(1) = −2.
Esta equação possui solução algébrica conhecida que é dada por y = x + ex.
Calculando-se f(1) da função obtemos o resultado 3, 7182818284598643 com 16
d́ıgitos significativos. Inicialmente utilizamos o Maple com o comando dsolve. Este
comando é utilizado para encontrar soluções algébricas de equações diferenciais,
quando estas existem, e também para achar as soluções numéricas aproximadas.
O comando dsolve foi utilizado para apresentar a solução algébrica da equação
de teste y′ = y − x + 1 com y(1) = −2. O Maple retornou a solução mostrada
abaixo:
10
> eq1 := diff(f(x), x) = x− f(x) + 1;
eq1 =
d
dx
f(x) = x− f(x) + 1
> dsolve({eq1, f(1) = −2});
f(x) = x+ ex
Depois o dsolve foi utilizado no Maple para encontrar as soluções numéricas com
dois métodos clássicos de cálculo numérico aplicados a EDOs. O primeiro método
numérico aplicado no Maple foi o da série de Taylor através do comando:
dsolve (eq1,f(1)=-2,f(x),type=numeric,method=taylorseries).
A parte {eq1,f(1)=-2}, está relacionada a equação já definida anteriormente
com f(1) = −2. O segundo parâmetro f(x) diz ao Maple qual a variável procurada.
Neste caso a função f(x) é a variável procurada na EDO. O parâmetro type=numeric
informa ao Maple que a solução fornecida será numérica. O último parâmetro avisa
ao Maple qual o método utilizado, neste caso, a série de Taylor. Quando pedimos
para calcular f(1) o Maple retorna o seguinte valor: 6.436564336656945.
O segundo método utilizado ainda no Maple foi o de Runge-Kutta de quarta
ordem através do comando:
dsolve (eq1,f(0)=2,f(x),type=numeric,method=classical[rk4]).
O comando é semelhante ao já descrito na série de Taylor. A única mudança
é em relação ao último parâmetro que informa ao Maple que o método utilizado é
Runge-Kutta de quarta ordem. Quando solicitamos ao Maple para calcular f(1) ele
retorna o seguinte valor: 6.4365944117336656. Também foi utilizado programação
em Python para solucionar numericamente a equação de teste y′ = y − x + 1 com
y(1) = −2 através dos dois métodos clássicos de cálculos numéricos já utilizados no
Maple.
O primeiro método aplicado na solução numérica em Python foi o método da
série de Taylor de segunda ordem com 10.000 passos no intervalo de [0, 1]. O
código fonte deste programa encontra-se no apêndice A . O resultado obtido foi
de 6.43647773806.
O segundo método aplicado na solução numérica em Python foi o método da
Runge-Kutta de quarta ordem com 10.000 passos no intervalo de [0, 1]. O código
fonte deste programa encontra-se no apêndice A. O resultado obtido foi de 6.43656365692.
Foi utilizado também o IntPy para solucionar a equação de teste através dos
conceitos e operações de matemática intervalar aplicados, conjuntamente aos dois
métodos de cálculo numéricos já discutidos anteriormente.
Os conceitos e operações de matemática intervalar aplicados juntamente com
o método da série de Taylor de segunda ordem com 10.000 passos no intervalo de
11
[0, 1] gerou como resultado o intervalo [6.4365636478524619, 6.4365636478629584].
O código fonte em Python deste programa encontra-se no apêndice A.
Os conceitos e operações de matemática intervalar aplicados juntamente com o
método Runge-Kutta de quarta ordem com 10.000 passos no intervalo de [0, 1] gerou
como resultado o intervalo [6.4365636569127167, 6.4365636569232674]. O código
fonte em Python deste programa encontra-se no apêndice A.
A Tabela 1 abaixo sintetiza os resultados obtidos para a equação de teste pe-
los dois métodos numéricos utilizando as três formas de cálculo: Maple, Python
(numericamente) e IntPy (Python com matemática intervalar).
Tabela 1: Comparação dos Resultados
Método de Taylor Método de Runge-Kutta
Maple 6.436564336656945 6.4365944117336656
Python(numericamente) 6.43647773806 6.43656365692
IntPy(matemática intervalar) [6.4365636478524619, [6.4365636478629584,
6.4365636569127167] 6.4365636569232674]
Pela análise da Tabela 1 notamos que os resultados dos métodos Runge-Kutta
do Maple e do Python encontram-se dentro do intervalo gerado pelo IntPy, indi-
cando assim que o IntPy gerou intervalos que encapsulam os resultados encontrados
pelos dois outros softwares com um controle de erro, ou seja, a posśıvel resposta
encontra-se dentro deste intervalo. Analisando ainda a Tabela 1 observa-se que
no método de Taylor o resultado numérico do Python está dentro do intervalo do
IntPy, reforçando que este é capaz de encapsular o resultado. O resultado do Maple
pelo método de Taylor foi igual até a nona casa decimal aos resultados obtidos pelo
Python numericamente, porém o resultado ficou fora do intervalo encontrado pelo
IntPy. Uma possibilidade para tal resultado deve-se ao fato de que não se sabe
como foi implementado o algoritmo da série de Taylor no Maple e nem quais os
argumentos utilizados por ele. Além disso, outra posśıvel conclusão, seria que os
erros de precisão, oriundos de processos de aproximação, truncamento e arredonda-
mento, obtidos pelo Maple para o Método de Taylor são maiores do que nos outros
sistemas testados.
Foi realizado também um estudo comparativo do tempo de processamento da
equação diferencial de teste em duas ferramentas computacionais (Python numeri-
camente e IntPy) e nos dois métodos de cálculos numéricos (Taylor e Runge-Kutta)
totalizando quatro resultados. Cada resultado é o tempo médio em segundos de
10 execuções. A Tabela 2 abaixo resume os quatro resultados médios encontrados
experimentalmente.
Observa-se pela Tabela 2 que o método de Taylor é mais rápido que o de Runge-
Kutta. Neste caso em particular, isto se deveao fato que o método de Taylor
foi aplicado até a segunda ordem enquanto o de Runge-Kutta foi aplicado até a
12
Tabela 2: Tempo médio em segundos de 10 execuções para cada método e para
cada software na resolução da equação de teste
Método de Taylor Método de Runge-Kutta
Python(numericamente) 0.0160000324249 0.0629999637604
IntPy(matemática intervalar) 2.59399986267 6.96900010109
quarta ordem, logo o de Runge-Kutta realiza mais cálculos sendo assim mais lento.
Observa-se também que a solução através do Python numericamente é mais rápida
que o IntPy. Isto se deve ao fato de que uma operação envolvendo a matemática
intervalar necessita realizar vários cálculos. Para melhor enfatizar o que foi dito
tomaremos o exemplo da multiplicação de dois intervalos na matemática intervalar.
Para realizar um produto de dois intervalos na matemática intervalar temos que ex-
ecutar os produtos de todos os quatro extremos dos intervalos tomados dois a dois
e depois pegar o menor e o maior dos quatro valores para serem os novos extremos
do intervalo de resultado. Desta forma uma simples multiplicação na matemática
intervalar é bem mais lenta que uma multiplicação comum.
7. Considerações Finais
A finalidade principal da matemática intervalar é o controle do erro nas operações
numéricas. O IntPy é uma framework que implementa as definições e operações da
matemática intervalar na linguagem de programação Python. Os resultados apre-
sentados neste trabalho mostram que o IntPy é capaz de realizar o cálculo numérico
de equações diferenciais ordinárias mantendo o controle do erro dentro de um in-
tervalo fechado, onde a solução numérica destas equações encontra-se encapsulada.
A análise dos resultados dos tempos de processamento mostrou que o IntPy gasta
um tempo maior para encontrar a solução de equações diferenciais em relação ao
tempo gasto pelo método comum (sem a utilização dos conceitos de matemática
intervalar), limitando assim a utilização do IntPy a aplicações que não exijam alto
desempenho com relação ao tempo.
13
A
Códigos Fonte
PROGRAMA 1
#Metodo de Taylor de 2a ordem
#Python Numericamente
import intpy
import time
def f1(x,y): #Primeira func~ao
return (y-x+1)
def f2(x,y): #Segunda func~ao
return (-x+y-1)
x0=0 #x inicial
y0=2 #f(x) inicial
inicio=0 #Inicio do intervalo
fim=1 #Fim do intervalo
h=0.0001 #Tamanho do passo
n=int ((fim-inicio)/h) #Numero de passos
tempo1=time.time() #Guarda o tempo do incio do processamento
for i in range (1,n+1):
x1=x0+h #Calculo do proximo x
y1=y0+h*f1(x0,y0)+h**2/2*f2(x0,y0) #Calculo do proximo y
x0,y0=x1,y1
tempo2=time.time() #Guarda o tempo do fim do processamento
print "x= ",x1," y= ",y1
print "Tempo de processamento em segundos: ",tempo2-tempo1
RESULTADO
x= 1.0 y= 6.43647773806
Tempo de processamento em segundos: 0.0160000324249
PROGRAMA 2
#Metodo de Taylor de 2a ordem
#IntPy (Matematica Intervalar)
import intpy
import time
I=intpy.IReal #Substituic~ao do comando intpy.IReal por apenas I
def f1(x,y): #Primeira func~ao
return (y-x+1)
def f2(x,y): #Segunda func~ao
return (-x+y-1)
x0=I(0,0) #x inicial no formato intervalar
y0=I(2,2) #f(x) inicial no formato intervalar
inicio=I(0,0) #Inicio do intervalo no formato intervalar
fim=I(1,1) #Fim do intervalo no formato intervalar
14
hh=0.0001 #Tamanho do passo no formato numerico
h=I(hh,hh) #Tamanho do passo no formato intervalar
n=int ((1-0)/hh) #Numero de passos
tempo1=time.time() #Guarda o tempo do incio do processamento
for i in range (1,n+1):
x1=x0+h #Calculo do proximo x
y1=y0+h*f1(x0+h/2,y0+h/2*f1(x0,y0)) #Calculo do proximo y
x0,y0=x1,y1
tempo2=time.time() #Guarda o tempo do fim do processamento
print "x= ",x1," y= ",y1
print "Tempo de processamento em segundos: ",tempo2-tempo1
RESULTADO 2
x= 1.0 y= 6.43656365692
Tempo de processamento em segundos: 0.0629999637604
PROGRAMA 3
#Metodo de RK de 4a ordem
#Python Numericamente
import intpy
import time
def f1(x,y):
return (y-x+1) #Define a func~ao
x0=0 #x inicial
y0=2 #f(x) inicial
inicio=0 #Inicio do intervalo
fim=1 #Fim do intervalo
h=0.0001 #Tamanho do passo
n=int ((fim-inicio)/h) #Numero de passos
tempo1=time.time() #Guarda o tempo do incio do processamento
for i in range (1,n+1):
k1=f1(x0,y0) #Calculo de k1
k2=f1(x0+h/2.,y0+h/2.*k1) #Calculo de k2
k3=f1(x0+h/2.,y0+h/2.*k2) #Calculo de k3
k4=f1(x0+h,y0+h*k3) #Calculo de k4
x1=x0+h #Calculo do proximo x
y1=y0+h/6.*(k1+2*k2+2*k3+k4) #Calculo do proximo y
x0,y0=x1,y1
tempo2=time.time() #Guarda o tempo do fim do processamento
print "x= ",x1," y= ",y1
print "Tempo de processamento em segundos: ",tempo2-tempo1
RESULTADO 3
x= [0.99999999999989531, 1.0000000000006355] y= [6.4365636478524619, 6.4365636478629584]
Tempo de processamento em segundos: 2.59399986267
PROGRAMA 4
#Metodo de RK de 4a ordem
15
#IntPy (Matematica Intervalar)
import intpy
import time
I=intpy.IReal #Substituicç~ao do comando intpy.IReal por apenas I
def f1(x,y):
return (y-x+1) #Define a funcç~ao
x0=I(0,0) #x inicial no formato intervalar
y0=I(2,2) #f(x) inicial no formato intervalar
inicio=I(0,0) #Inicio do intervalo no formato intervalar
fim=I(1,1) #Fim do intervalo no formato intervalar
hh=0.0001 #Tamanho do passo no formato numerico
h=I(hh,hh) #Tamanho do passo no formato intervalar
n=int ((1-0)/hh) #Numero de passos
tempo1=time.time() #Guarda o tempo do incio do processamento
for i in range (1,n+1):
k1=f1(x0,y0) #Calculo do K1
k2=f1(x0+h/2.,y0+h/2.*k1) #Calculo do K2
k3=f1(x0+h/2.,y0+h/2.*k2) #Calculo do K3
k4=f1(x0+h,y0+h*k3) #Calculo do K4
x1=x0+h #Calculo do proximo x
y1=y0+h/6.0*(k1+k2*2+k3*2+k4) #Calculo do proximo y
x0,y0=x1,y1
tempo2=time.time() #Guarda o tempo do fim do processamento
print "x= ",x1," y= ",y1
print "Tempo de processamento em segundos: ",tempo2-tempo1
RESULTADO 4
x= [0.99999999999989531, 1.0000000000006355] y= [6.4365636569127167, 6.4365636569232674]
Tempo de processamento em segundos: 6.96900010109
16
Referências
[1] W.E. Boyce, R.C. DiPrima, Equações diferenciais elementares e problemas de
valores de contorno, LTC, Rio de Janeiro, 2006.
[2] D.G. Figueiredo, A.F. Neves, Equações difereciais aplicadas, IMPA, Rio de
Janeiro, 2001.
[3] N.B. Franco, Cálculo numérico, Pearson Prentice Hall, São Paulo, 2006.
[4] R. E. Moore, ”Interval Analysis”, N. J., Prentice Hall Inc., Englewood Cliffs,
1966.

Continue navegando