在R中用矢量/矩阵形式求解ODE系统(用deSolve?)

时间:2018-05-01 13:44:30

标签: r

所以我想问一下是否有任何方法可以使用矩阵表示法定义和求解R中的微分方程组。

我通常知道你做的事情

lotka-volterra <- function(t,a,b,c,d,x,y){
    dx <- ax + bxy
    dy <- dxy - cy
    return(list(c(dx,dy)))
}

但我想做

lotka-volterra <- function(t,M,v,x){
    dx <- x * M%*% x + v * x
    return(list(dx))
}

其中x是长度为2的向量,M是2 * 2矩阵,v是长度为2的向量。我想用矩阵/向量表示法定义微分方程组。

这很重要,因为我的系统要复杂得多,而且我不想用100个参数定义11个不同的微分方程,而不是1个具有1个交互参数矩阵和1个生长参数矢量的微分方程。

我可以像上面那样定义函数,但是当使用ode中的deSolve函数时,期望parms应该作为参数的命名向量传递,当然不接受非标量值。

这是否可以在R中使用deSolve或其他包?如果不是,我可能会考虑使用MATLAB或Python,但我目前还不知道它是如何用这两种语言完成的。

非常感谢,

ħ

1 个答案:

答案 0 :(得分:0)

由于我的信誉不佳(得分),我很抱歉将其发布为答案,应该只是一个评论。回头来说,您是否尝试过此link?另外,为了找到解决问题的替代解决方案,您是否尝试过MANOPT(MATLAB的工具箱)?实际上就像open source一样,就像R。我在paper遇到MANOPT时,问题归结为solving a system of ODEs involving purely matrices