首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有方法将我的函数转换为DifferentialEquations.jl中的标准ODE函数?

是否有方法将我的函数转换为DifferentialEquations.jl中的标准ODE函数?
EN

Stack Overflow用户
提问于 2019-04-27 13:04:51
回答 1查看 290关注 0票数 2

我想通过我自己的函数构建ODE函数,这个函数可以被输入到ODEProblem中的DifferentialEquations.jl中。

下面是一个简化的例子。

我有两个结构VariableA & VariableB,我用它们生成A,B。

最后,我想使用A,B来生成ODE函数。

A有一个主微分方程,我想动态地把B加到A中。

这意味着A中可以有0或1或2或更多的B组分。

我不知道从哪里开始。

我能完成这个想法吗?有什么建议吗?

代码语言:javascript
复制
# --------------------------
mutable struct VariableA
    main_diffeq
    params_for_diffeq::Array # a in main_diffeq_A
    B_component
end

function main_diffeq_A(a)
    dx = -a * x
end
# --------------------------


# --------------------------
mutable struct VariableB
    main_diffeq
    params_for_diffeq::Array  # b in main_diffeq_B
end

function main_diffeq_B(b)
    dx = b * x
end
# --------------------------


# the elements for my differential equations
B = VariableB(main_diffeq_B, [1])
A = VariableA(main_diffeq_A, [1], (B,))

在这种情况下,A中只有一个B组分。

但在其他情况下,可能有不同数目的B组分。

下面是我的函数,它将被放入ODEProblem(MyDiffEq!(A), u, t, p)

代码语言:javascript
复制
function MyDiffEq!(A)
    # something...
end

目标是:

代码语言:javascript
复制
function MyDiffEq!(du, u, p, t)
    # A  -->  dA = -a * A + B
    du[1] = -u[1] * p[1] + u[2]

    # B
    du[2] = u[2] * p[2]
end

提前谢谢你!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-27 18:34:28

我认为您正在寻找允许编程构造微分方程函数的ModelingToolkit.jl库。自述文件中的示例构建了Lorenz方程:

代码语言:javascript
复制
using ModelingToolkit

# Define some variables
@parameters t σ ρ β
@variables x(t) y(t) z(t)
@derivatives D'~t
eqs = [D(x) ~ σ*(y-x),
       D(y) ~ x*(ρ-z)-y,
       D(z) ~ x*y - β*z]
de = ODESystem(eqs)
f = ODEFunction(de, [x,y,z], [σ,ρ,β])
prob = ODEProblem(f,[1.0,1.0,1.0],(0.0,100.0),[1.0,3.0,2.0])

然后,您可以定义新的变量,这些变量是组合表达式,并在导数方程中使用这些变量。该图书馆正在持续发展(目前为4/27/2019),未来的特性将使将预先建立的微分方程模型更容易地结合起来,从而更容易地建立大型微分方程系统。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55880840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档