我想解决R中的微分方程(用deSolve?),我没有初始条件,只有状态变量的最终条件。怎么办呢?
典型的代码是:ode(times,y,parameters,function ...)其中y是初始条件,函数定义微分方程。
答案 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.
这应该很容易使用包装函数编码,最后一些列表反转从x
到y
。
有些ODE解算器也允许使用负步长,因此可以简单地将y
构造tf
的时间从t0
降至x
而不使用某些中间Log.d();
1}}。