Mudanças na v3 do OrdinaryDiffEq.jl

Olá!

Eu sei, um longo, longo tempo passou desde a minha última postagem. Eu gostaria de me desculpar! Estive muito ocupado devido a uma quantidade enorme de trabalho a ser feito no INPE.

De qualquer forma, esse será uma postagem pequena. Apenas gostaria de atualizar o código-fonte da última lição de tal forma que rode corretamente utilizando Julia v0.6 e OrdinaryDiffEq.jl v3.

Como eu disse, o pacote OrdinaryDiffEq.jl, que é parte do projeto JuliaDiffEq, é maravilhoso. Na minha humilde opinião, é um dos melhores solvers de equações diferenciais de código aberto disponíveis. O desenvolvimento dessa suíte está ocorrendo a uma taxa muito elevada. Isso é bom, pois o pacote tem ficado melhor a cada dia. O lado ruim é que a API também se altera muito rápido e às vezes seu código precisa ser modificado para continuar a funcionar nas novas versões.

Experiência necessária

Isso é apenas uma atualização do código-fonte apresentado na minha última postagem. Portanto, recomendo fortemente a lê-la primeiro:

https://www.ronanarraes.com/2017/02/estendendo-as-solucoes-de-edos-em-julia-atraves-da-criacao-de-data-arrays-customizados-para-as-simulacoes/

Mudanças na v3 do OrdinaryDiffEq.jl

Desde que eu postei meu último tutorial, a API do OrdinaryDiffEq.jl mudou (na verdade, a API é definida em DiffEqBase.jl, mas ele será atualizado quando você atualizar o OrdinaryDiffEq.jl). Existem três modificações que devem ser feitas para que o código-fonte anterior possa funcionar corretamente com Julia v0.6 e OrdinaryDiffEq.jl v3.0.3.

Interface de Array de Dados Customizada

Anteriormente, uma interface de array de dados customizada podia ser criada através de uma nova estrutura que herdava o tipo abstrato DEDataArray{T}. Isso se alterou e agora o novo tipo abstrato correto é DEDataVector{T}. Então, nossa definição do SimWorkspace deve ser:

Assinatura da equação dinâmica

Na versão utilizada no último tutorial, a assinatura da função dinâmica era:

Devido a algumas mudanças internas, a assinatura agora é:

p é um vetor de parâmetros que não é utilizado nesse exemplo, mas simplifica muitas coisas. Se você quiser saber mais informações, por favor veja http://docs.juliadiffeq.org/stable/tutorials/ode_example.html#Defining-Parameterized-Functions-1.

Assinatura da função de condição do callback

A assinatura da função de condição do callback se alterou de:

para:

Código-fonte atualizado

Finalmente, o código-fonte atualizado do último tutorial pode ser visto a seguir. Ele irá fornecer exatamente o mesmo resultado.

Conclusões

Esse tutorial apenas atualiza o código-fonte do último de tal forma que se possa executá-lo utilizando Julia v0.6 e OrdinaryDiffEq.jl v3.0.3.

Estou planejando para o meu próxima tutorial um exemplo simples de como codificar filtros de Kalman em linguagem Julia!