• Nenhum resultado encontrado

Prof. MSc. David Roza José 1/46

N/A
N/A
Protected

Academic year: 2021

Share "Prof. MSc. David Roza José 1/46"

Copied!
46
0
0

Texto

(1)
(2)

Métodos Adaptativos

e Sistemas Rígidos

O intuito destas aulas é introduzir métodos mais avançados para a resolução de problemas de valor inicial.

Objetivos:

– Compreender como os métodos Runge-Kutta Fehlberg utilizam os métodos de

RK de diferentes ordens para estimar o erro e adequar o tamanho de passo;

– Conhecer, saber ajustar e passar parâmetros para as funções do MATLAB de

resolução de EDOs;

– Compreender a diferença entre métodos de passo único e múltiplos passos de

resolução de EDOs;

– Compreender o significado de rigidez e qual sua implicação na resolução de

(3)

Métodos RK Adaptativos

Até o momento vimos métodos que empregam um tamanho constante de passo. Porém para um número significativo de problemas, isto pode representar uma limitação séria.

(4)

Métodos RK Adaptativos

A ideia então é ter um controle adaptativo do tamanho de passo. A implementação de tais métodos necessita que uma estimativa do erro local de truncamento seja obtida para cada passo. Esta estimativa serve então para aumentar ou diminuir o tamanho de passo.

Que fique claro que além da solução de EDO’s, os métodos aqui descritos também servem para se avaliar integrais definidas. A avaliação da integral definida:

é equivalente a resolver a equação diferencial abaixo para y(b) dado que a condição inicial é y(a)=0.

(5)

Métodos RK Adaptativos

Existem duas técnicas básicas para se incorporar o controle adaptativo do tamanho de passo em métodos de passo único. O primeiro envolve reduzir o tamanho de passo à metade: calcula-se uma vez para um tamanho de passo h, e depois duas vezes para um tamanho de passo h/2. A diferença entre os dois resultados é uma estimativa do erro local de truncamento. O tamanho do passo pode então ser ajustado baseado nesta estimativa de erro.

O segundo é conhecido como método RK embutido, tal que o erro de truncamento é estimado como a diferença entre duas estimativas utilizando métodos RK de diferentes ordens. Este normalmente é mais utilizado por ser mais eficiente que a redução do passo à metade.

Os métodos embutidos foram desenvolvidos por Fehlberg, por isso são normalmente chamados de métodos RK-Fehlberg.

(6)

Métodos RK Adaptativos

Num primeiro momento a ideia de se utilizar dois métodos de ordens diferentes pode parecer computacionalmente oneroso. Uma predição de quarta ordem e outra de quinta totalizariam uma quantidade de 10 avaliações de função por passo.

Fehlberg evitou este contratempo ao desenvolver um método RK de quinta ordem que utiliza a maioria das mesmas avaliações de função que seriam necessárias ao método de quarta ordem. Assim, o método resulta numa estimativa de erro baseada em somente seis avaliações de função.

(7)

MATLAB

Desde o método original desenvolvido por Fehlberg, outros métodos superiores foram desenvolvidos. Vários deles estão disponíveis no MATLAB, todos para sistemas não rígidos.

ode23 – Esta função utiliza o algoritmo BS23 (Bogacki e Shampine, 1989; Shampine, 1994), que utiliza simultaneamente fórmulas RK de segunda e terceira ordem para resolver a EDO e fazer a estimativa de erro para ajustar o tamanho do passo. As fórmulas são:

(8)

MATLAB

A estimativa de erro é dada por:

Tal que

Aparentemente teríamos quatro avaliações de função, mas perceba que o k1 do próximo passo é o k4 deste passo. Assim este método fornece uma estimativa do próximo passo e do erro baseados em 3 avaliações de função, ao invés de cinco que normalmente resultaria da aplicação de um método RK de segunda ordem (duas avaliações) e um método RK de terceira ordem (três avaliações). Após cada passo, o erro é conferido para verificar se está dentro da tolerância desejada. Caso sim, o valor para yi+1 é aceito, e k4 torna-se k1 para o próximo passo. Caso contrário, o tamanho de passo é reduzido até que

(9)

MATLAB

ode45 – Esta função utiliza o algoritmo desenvolvido por Dormand e Prince, 1980, que utiliza simultaneamente um método RK de quarta e quinta ordem (45) para resolver uma EDO e efetuar a estimativa de erro para o ajuste do tamanho do passo. A recomendação do MATLAB é de sempre utilizar esta função como uma primeira tentativa para a maioria dos problemas.

ode113 – Esta função utiliza o método de ordem variável de Adams-Bashforth-Moulton. É útil para baixas tolerâncias de erro e para EDOs computacionalmente custosas. É um método de passos múltiplos, que será explicado em breve.

Todas as funções apresentadas podem ser chamadas da maneira genérica:

[t, y] = ode45(fun, tspan, y0)

Tal que y é o vetor solução, sendo cada coluna uma das variáveis dependentes, e cada linha corresponde a um instante de tempo no vetor coluna t. fun é o nome da função

(10)

MATLAB

O vetor tspan pode ser formulado de duas maneiras:

tspan = [ti tf];

A integral é realizada de ti até tf. A segunda maneira é utilizada para se obter soluções em tempos específicos t0, t1, …, tn (sempre monotônico)

tspan = [t0 t1 ... tn];

Um exemplo de como utilizar o MATLAB para resolver uma única EDO, tomando por base a equação que temos tratado nas últimas aulas. A integraremos de t=0 até t=4, com a condição inicial de y(0)=2.

dydt = @(t,y) 4*exp(0.8*t)-0.5*y; [t,y] = ode45(dydt,[0 4],2);

(11)

MATLAB – Exemplo 1

Utilizaremos o MATLAB para mostrar como resolver um sistema de equações, integrando-as de t=0 até t=20, tendo como condições iniciais y1=2 e y2=1 em t=0.

Estas são equações do tipo predador-presa.

Precisamos, num primeiro momento, criar uma função que calcule o valor do lado direito das EDO’s (que calcule o valor da derivada, da inclinação). Podemos fazer isso criando um arquivo .m, ou passando como função anônima.

Arquivo .m

function yp = predprey(t,y)

(12)

MATLAB

E a solução seria invocada como tspan = [0 20];

y0 = [2, 1];

[t,y] = ode45(@predprey, tspan, y0); Para se utilizar como função anônima: tspan = [0 20];

y0 = [2, 1];

pp1 = @(t,y) [1.2*y(1)-0.6*y(1)*y(2);-0.8*y(2)+0.3*y(1)*y(2)]; [t1,y1] = ode45(pp1, tspan, y0);

E podemos gerar uma figura no domínio do tempo e um de fase. plot(t1,y1);

figure

(13)

MATLAB

O MATLAB costuma usar parâmetros padrão para controlar vários aspectos da integração. Podemos alterar diversas opções através de parâmetros adicionais na chamada da função de solução da EDO:

[t, y] = ode45( fun, tspan, y0, opc, p1, p2, …)

Tal que opc é uma estrutura de dados criada com a função odeset que controla diversos parâmetros do solver, e p1, p2, …, são parâmetros que podem ser passados para a função que está sendo resolvida.

A sintaxe geral da função odeset tem a seguinte forma:

opc = odeset('par1', val1, 'par2', val2, ... )

Uma lista completa de todos os parâmetros pode ser obtida ao se digitar odeset no console.

(14)

MATLAB

Alguns parâmetros comuns são dados por: 'RelTol' Tolerância relativa

'AbsTol' Tolerância absoluta

'InitialStep' Determina qual o tamanho de passo inicial

(15)

MATLAB – Exemplo 2

Utilizaremos o solver ode23 para resolver uma EDO de t=0 até t=4, tal que y(0)=0.5, com um erro relativo padrão (10-3) e outro mais rigoroso (10-4).

(16)

Eventos

As funções de solução de EDO do MATLAB são normalmente implementadas para um intervalo de integração prescrito, ou seja: são utilizados para se obter a solução de um instante inicial até um instante final. Entretanto existem problemas onde não sabemos o tempo final.

O problema do saltador de bungee-jump é um deles: vamos supor que o saltador, inadvertidamente, salte sem a corda que o segura. O tempo final, neste caso, corresponde ao instante do impacto do saltador no chão – e não é uma informação que possuímos. Neste caso o objetivo de se resolver a EDO é determinar quando o saltador atinge o chão.

A opção events do MATLAB serve para resolver tais problemas. Ela resolve uma EDO até que uma das variáveis dependentes atinja zero (entre outras opções).

(17)

MATLAB – Exemplo 3

Resolveremos o problema do saltador de Bungee-Jump, que tem o seguinte conjunto de EDOs:

Deve-se expressar o sistema de EDOs como uma função num arquivo .m function dydt=freefall(t,y,cd,m)

% y(1) = x e y(2) = v grav=9.81;

dydt=[y(2); grav-cd/m*y(2)*abs(y(2))]; end

(18)

MATLAB – Exemplo 3

Para este problema desenvolvemos uma função para o evento, chamada de endevent, que pode ser escrita como:

function [detect,stopint,direction]=endevent(t,y,varargin)

% Localiza quando a altura passa de zero e interrompe a integração. detect=y(1); % Detecta altura = 0

stopint=1; % Para a integração

direction=0; % Direção não importa end

Esta função poderia ter qualquer nome, mas deve conter os campos detect, stopint e direction. Esses campos especificam opções para o MATLAB efetuar a operação. detect carrega qual variável deve ser monitorada até que atinja o valor zero; caso desejássemos uma altura diferente (por exemplo, 5 metros) escreveríamos detect = y(1) -5;. stopint define que a integração deve ser parada; e direction tem o valor zero caso qualquer zero deva ser detectado, +1 caso somente os zeros onde a função é crescente devam ser

(19)

MATLAB – Exemplo 3

Por fim, necessitamos de um script para gerar a solução e chamar o solver com as opções adequadas. opts=odeset('events',@endevent); y0=[-200 -20]; [t,y,te,ye]=ode45(@freefall,[0 inf],y0,opts,0.25,68.1); te,ye plot(t,-y(:,1),'-',t,y(:,2),'--','LineWidth',2) grid on legend('Altura (m)','Velocidade (m/s)') xlabel('tempo (s)'); ylabel('x (m) and v (m/s)')

(20)

Métodos de Passos Múltiplos

Os métodos de passo único descritos anteriormente utilizam informação em um único ponto ti para prever o valor da variável dependente yi+1 num ponto futuro ti+1. Métodos alternativos, chamados de métodos de passos múltiplos, são baseados na observação de que, uma vez que o cálculo se inicia, informações valiosas dos pontos anteriores estão disponíveis.

A curvatura das linhas unindo os valores prévios fornecem informação a respeito da trajetória da solução. Métodos de passos múltiplos exploram estas informações para resolver EDOs.

(21)
(22)

Método Não Auto-Iniciado de Heun

O método de Heun utiliza o método de Euler como um preditor:

E a regra trapezoidal como um corretor:

Assim, o preditor e o corretor possuem erros de truncamento local de O(h2) e O(h3),

respectivamente. Isto sugere que o preditor é o “elo fraco” por possuir o maior erro. Esta fraqueza é significativa porque a eficiência do corretor iterativo depende da precisão da previsão inicial. Assim, uma maneira de melhorar o método de Heun é desenvolver um preditor cujo erro local de truncamento seja O(h3). Isto pode ser feito ao se utilizar o

(23)

Método Não Auto-Iniciado de Heun

Esta fórmula atinge precisão de O(h3) ao custo de empregar um tamanho de passo maior,

2h. Além disso a equação não é auto-iniciada pois envolve um valor anterior da variável

dependente yi-1. Tal valor não estaria disponível num problema típico de valor inicial. Por causa disso, o método é chamado de não auto-iniciado. Através deste método, a estimativa da inclinação é feita no meio do intervalo – ao invés de ser no início – e tal centralização melhora o erro local do preditor para O(h3).

(24)

Método Não Auto-Iniciado de Heun

Assim, o método pode ser resumido através da equação preditora e corretora como:

tal que os índices superiores indicam que o corretor é aplicado iterativamente de j=1 até

m para se obter soluções refinadas. As iterações são finalizadas baseadas numa

(25)

Exemplo - Método Não Auto-Iniciado

de Heun

Utilizar o Método Não Auto-Iniciado de Heun para integrar a equação abaixo de t=0 até t=4, com um tamanho unitário de passo. A condição inicial é y(0)=2. A informação adicional necessária é que y(-1)=-0.3929953.

O preditor é utilizado para extrapolar linearmente de t=-1 até t=+1.

(26)

=-Exemplo - Método Não Auto-Iniciado

de Heun

(27)

Exemplo - Método Não Auto-Iniciado

de Heun

(28)

Exemplo - Método Não Auto-Iniciado

de Heun

O método é aplicado continuamente até que o erro aproximado seja menor que o valor estimado. Ao se convergir o resultado para y1, aplica-se novamente o preditor para y2 e utiliza-se o corretor até atingir a convergência, e assim sucessivamente. Com e_a=0.00001, temos:

(29)

Estimativa de Erro

Além de fornecer mais eficiência, o método não auto-iniciado de Heun também pode ser utilizado para estimar o erro de truncamento. Assim como os métodos adaptativos, a estimativa de erro pode fornecer um critério para a mudança do tamanho de passo.

Uma estimativa do erro local de truncamento para este método é dada por:

tal que y0

(30)

Exemplo - Estimativa de Erro

Utilizaremos dados do problema anterior para estimar o erro local de truncamento. O preditor do primeiro passo e o corretor convergido forneceram:

(31)

Exemplo - Estimativa de Erro

Comparando-se, então, os erros de truncamento com os erros exatos – ou seja, com a diferença entre o corretor convergido de cada passo de tempo e a solução exata, temos:

(32)

Rigidez

A rigidez é um problema que pode surgir na solução de equações diferenciais ordinárias. Um sistema rígido é aquele que envolve componentes que mudam rapidamente com outros que mudam lentamente. Em alguns casos os componentes que variam rapidamente são transientes efêmeros, após isso a solução torna-se dominada por componentes que variam lentamente. Apesar do fenômeno transiente existir por um curto período do intervalo de integração, eles podem ditar o tamanho do passo para toda a solução.

Tanto um sistema como uma única EDO podem ser rígidos. Um exemplo é:

(33)

Rigidez

A solução é inicialmente dominada pelo termo exponencial rápido (exp(-1000t)). Após um curto período de tempo ( t < 0.005 ), o transiente “some”, e a solução torna-se dominada pelo termo exponencial lento (exp(-t)).

Um entendimento do tamanho de passo necessário para estabilidade de tal solução pode ser vista observando-se a parte homogênea da EDO:

(34)

Rigidez

Para a parte transiente rápida, o critério de estabilidade é que hmin=0.002. Nota-se que

apesar deste critério manter a estabilidade, ele não garante que a solução será precisa. Um tamanho de passo ainda menor seria necessário para tal.

O transiente rápido, apesar de ocupar uma pequena fração do intervalo de integração, controla o tamanho máximo de passo.

(35)

Rigidez

Ao invés de se utilizar métodos explícitos – onde existem diversas condições para estabilidade; pode-se utilizar um método implícito.

O método implícito possui esta nomenclatura porque as incógnitas aparecem em ambos os lados da equação. Uma forma implícita do método de Euler pode ser desenvolvido ao se avaliar a inclinação num tempo futuro:

Esta abordagem, chamada de método de Euler para trás, resulta em:

Assim, independentemente do tamanho do passo h, o método é incondicionalmente estável.

(36)

Exemplo – Euler Implícito e Explícito

Utilizaremos o método de Euler para resolver a equação a seguir com y(0)=0. Para o método explícito, h=0.0005 e h=0.0015 para integrar entre t=0 e t=0.006. Para o método implícito, h=0.05 para t=0 e t=0.4.

Para o método de Euler explícito, a equação de recorrência torna-se:

(37)
(38)

Exemplo – Euler Implícito e Explícito

No método explícito, temos que:

Pelo fato da função ser linear, podemos isolar yi+1 (o quê nem sempre é possível fazer), e

assim obter um formato explícito para o mesmo:

(39)
(40)

Rigidez

Sistemas de EDOs também podem ser rígidos. Um exemplo é dado por:

Para as condições iniciais de y1(0)=52.29 e y2(0)=83.82, a solução exata é:

Os expoentes são negativos e diferem em cerca de duas ordens de magnitude. Assim como para o exemplo de uma equação, expoentes grandes que acabam implicando na rigidez.

(41)

Rigidez

Um método de Euler implícito para o sistema pode ser formulado como:

Rearranjando os termos obtém-se:

Ou seja, o problema acaba consistindo na resolução de um sistema linear para cada passo de tempo. Para EDOs não lineares a solução torna-se ainda mais complexa, pois envolve a resolução de um sistema não linear de equações (Matriz Jacobiana? ^^).

(42)

MATLAB

O MATLAB possui diversas funções para resolver sistemas de EDOs rígidas. São elas:

ode15s. Aplica um método de ordem variável baseado em diferenciação numérica. É um solver de passos múltiplos que oferece precisão média a baixa.

ode23s. Baseada na fórmula de Rosenbrock de ordem 2. Por ser um método de passo único, pode ser mais eficiente que ode15s para tolerâncias grosseiras.

ode23t. Implementa a regra trapezoidal com um interpolante “livre”. É utilizada para problemas moderadamente rígidos com baixa precisão onde a solução não pode apresentar amortecimento numérico.

ode23tb. Aplica um método implícito RK, podendo ser mais eficiente que ode15s para tolerâncias grosseiras.

(43)

Exemplo – ODEs Rígidas

A equação de van der Pol é um modelo de um circuito eletrônico que surgiu na época das válvulas. A solução desta equação torna-se progressivamente rígida conforme mu torna-se maior. Para y1(0)=dy1/dt=1, utilizaremos o MATLAB para resolver: (a) mu=1, com

o ode45 de t=0 até t=20. (b) para mu=1000, utilizar ode23s para resolver de t=0 até

t=6000.

O primeiro passo é converter esta EDO de segunda ordem em um par de EDOs de primeira ordem através de:

(44)

Exemplo – EDOs Rígidas

Criamos, então, uma função anônima para passar as EDO’s yp = @(t,y,mu) [y(2); mu*(1-y(1)^2)*y(2)-y(1)];

O solver pode então ser chamado através da função solicitada: [t, y] = ode45(yp, [0 20], [1 1], [], 1);

plot(t,y(:,1),'-',t,y(:,2),'--'); legend('y1','y2');

grid on

Tentaremos também resolver com mu=1000; [t, y] = ode45(yp, [0 6000], [1 1], [], 1000); plot(t,y(:,1));

grid on

(45)

Exemplo – EDOs Rígidas

Porém, o solver ode23s não enfrenta os mesmos problemas: [t, y] = ode23s(yp, [0 6000], [1 1], [], 1000);

plot(t,y(:,1)); grid on

Sugestão de leitura:

(46)

Informações

Exercícios pp628

23.2 23.3 23.15 23.19

Programar o algoritmo BS23 e utilizar para a resolução do exercício 23.2.

Programar o algoritmo de Heun não auto-iniciado e utilizar para a resolução do exercício 23.3.

Referências

Documentos relacionados

Todos os números e gráficos apresentados no texto, para os benefícios de aposentadoria, foram calculados diretamente de um painel de benefícios anuais, simulado à semelhança

Dado um aço HR 1050, calcule: (i) o limite de endurança para vida infinita; (ii) a resistência à fadiga (tensão alternante) de um espécime polido de viga rotativa

menu. Quando a função desejada estiver realçada, pressione o botão MENU para ativá-la. Pressione Esquerda ou Direita para alterar as configurações da função

Do ponto de vista das políticas públicas voltadas à revitalização de centros urbanos degradados, como o de Porto Alegre, os principais entraves são exatamente aqueles vinculados

seja é uma doença Auto- Imune, as Células Parietais ou Oxinticas, são células da mucosa do fundo e corpo que produzem o Factor Intrínseco de Castle (e HCl) que é de

contribuintes para o crescimento do turismo europeu, tendo gerado cerca de 38,4 milhões de turistas, em 2013, o que representa uma quota de 3,5% do total da procura

O volume anual de vendas de aços planos cresceu 3%, totalizando 5,9 milhões de toneladas, em função do aumento na capacidade produtiva da empresa de 5,0 mt/ano para 7,5 mt/ano

Esse método simples pode ser estendido para grandes conjuntos de equações ao se desenvolver um algoritmo de eliminação progressiva e substituição regressiva.. Apesar destas