You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中求解带时变参数的随机微分方程(SDE)方程组

求解带时变参数h的SDE方程组解决方案

错误原因

你之前的修改存在两个核心问题:

  • 你在R侧定义的signal是R语言函数,Julia求解SDE的进程无法直接调用R侧的自定义函数,因此会报变量/函数未定义的错误
  • SDEProblem接口本身没有signal这个传入参数,你额外追加的参数无法被传递到漂移函数中使用

最简修改方案

由于你的h参数规则非常明确(仅t∈[50,70]时取值为1,其余时间为0),直接在Julia侧的漂移函数内部实现时变逻辑即可,不需要额外在R侧定义插值函数:

  1. 删掉你之前新增的R侧signal定义、julia_assign("signal", signal)、以及SDEProblem构造时额外加的signal=signal参数
  2. 修改漂移函数f的定义如下:
## 漂移部分修改后的代码
f <- JuliaCall::julia_eval("
function f(dy,y,p,t)
  # 直接在Julia函数内实现h的时间依赖规则
  h = (t >= 50.0 && t <= 70.0) ? 1.0 : 0.0
  dy[1] = -y[1]*p[1] + (y[2]-y[1])*p[2] + h
  dy[2] = -y[2]*p[1] + (y[1]-y[2])*p[2]
end")
  1. 调整参数定义,将a修正为你需要的0.3:
## 参数修正
a=0.3;
b=0.2;
g=1;
p<-c(a, b, g)

其余代码保持你最开始h恒定版本的写法即可,正常运行就能得到符合时变h要求的求解结果。

复杂forcing场景通用方案

如果你后续需要使用更复杂的时变参数(比如多段连续变化、实验观测得到的时序forcing),可以把forcing的时间点序列、对应值序列作为参数追加到p向量/数组中,在Julia漂移函数内调用Julia原生的插值函数完成取值即可,避免跨语言调用函数的兼容问题。

内容的提问来源于stack exchange,提问作者14thTimeLord

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 04:36:08