如何指定R中微分方程的最终值(而不是初始值)

时间:2016-11-14 00:52:58

标签: r differential-equations

我想解决R中的微分方程(用deSolve?),我没有初始条件,只有状态变量的最终条件。怎么办呢?

典型的代码是:ode(times,y,parameters,function ...)其中y是初始条件,函数定义微分方程。

2 个答案:

答案 0 :(得分:2)

您的等式time reversible是否可以改变微分方程,以便它们及时向后运行?最典型的是,这只意味着反转渐变的符号。例如,对于速率为r(梯度为x = r*x)的简单指数增长模型,则翻转符号会使梯度-r*x生成指数衰减而不是指数衰减增长。

如果是这样,你所要做的就是用你的最终条件作为你的初始条件,改变渐变的迹象,然后你就完成了。

我最初误解了你的问题,说明你知道两者的初始条件和最终条件。这类问题称为boundary value problem,需要一个单独的数值算法来标准(更基本)initial-value problems

library(sos)
findFn("{boundary value problem}")

告诉我们CRAN上有几个R包(bvpSolve看起来最有希望)来解决这些问题。

答案 1 :(得分:0)

给出微分方程

y'(t)=F(t,y(t))

[t0,tf]区间y(tf)=yf作为初始条件,可以考虑

将其转换为标准格式
x(s) = y(tf - s)  
==>  x'(s) = - y'(tf-s) = - F( tf-s, y(tf-s) )
     x'(s) = - F( tf-s, x(s) )

现在

x(0) = x0 = yf.

这应该很容易使用包装函数编码,最后一些列表反转从xy

有些ODE解算器也允许使用负步长,因此可以简单地将y构造tf的时间从t0降至x而不使用某些中间Log.d(); 1}}。