如果在Julia中生成矢量,则生成微分方程

我创建了一个向量,该向量将微分方程的字符串连接起来,这些字符串的格式正确,可以用作Julia中的differeq ode sovler(即f(du,u,p,t):

Combine <- c("du[1] = - 1*0.4545*(u[1]^1) - 1*27000000*(u[4]^1)*(u[1]^1)","du[2] = - 1*3100000000*(u[2]^1)*(u[4]^1)","du[3] = - 1*33000*(u[3]^1)*(u[4]^1)","du[4] =2*0.4545*(u[1]^1) - 1*3100000000*(u[2]^1)*(u[4]^1) - 1*33000*(u[3]^1)*(u[4]^1) - 1*27000000*(u[4]^1)*(u[1]^1) - 1*8500000*(u[4]^1)*(u[5]^1) - 1*390000000*(u[4]^1)*(u[6]^1)","du[5] = - 1*8500000*(u[4]^1)*(u[5]^1)","du[6] = - 1*390000000*(u[4]^1)*(u[6]^1)"

我的问题是如何使用JuliaCall:Julia_eval评估这些表达式?我知道,如果我明确包含这些表达式,则ODE求解器可以正常工作,但是如果我只使用Combine [i],则会遇到错误,因为我正在调用全局变量。

f <- JuliaCall::julia_eval("
     function f(du,u,p,t)
                                  du[1] = - 1*0.4545*(u[1]^1) - 1*27000000*(u[4]^1)*(u[1]^1)
                                  du[2] = - 1*3100000000*(u[2]^1)*(u[4]^1)
                                  du[3] = - 1*33000*(u[3]^1)*(u[4]^1)
                                  du[4] = 2*0.4545*(u[1]^1) - 1*3100000000*(u[2]^1)*(u[4]^1) - 1*33000*(u[3]^1)*(u[4]^1) - 1*27000000*(u[4]^1)*(u[1]^1) - 1*8500000*(u[4]^1)*(u[5]^1) - 1*390000000*(u[4]^1)*(u[6]^1)
                                  du[5] = - 1*8500000*(u[4]^1)*(u[5]^1)
                                  du[6] = - 1*390000000*(u[4]^1)*(u[6]^1)
end")

有什么办法可以解决此问题?我尝试取消列出“ Combine”的清单,并在每行末尾添加一个\ n的字符串,但这没有成功。理想的情况是,我可以从全局环境中调用向量,并由ODE求解器对其进行分析,如下所示(我知道这种方法不能这样工作):

f <- JuliaCall::julia_eval("
     function f(du,t)
         Combine[i]
end")
f2003365964y 回答:如果在Julia中生成矢量,则生成微分方程

如@jverzani所述,

sprintf("function f(du,u,p,t)\n%s\nend",paste(Combine,collapse="\n"))

在R中构建所需的字符串。如果您JuliaCall::julia_eval那就完成了。任何其他事情都完全过于复杂,并且无论如何也不会得到优化,因此,我不建议您尝试在此处采用的其他路径。

本文链接:https://www.f2er.com/3162429.html

大家都在问