如果使用Julia中的向量生成微分方程

问题描述 投票:0回答:1

我创建了一个向量,该向量将微分方程的字符串连接起来,这些字符串的格式正确,可以用作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,u,p,t)
         Combine[i]
end")

我创建了一个向量,该向量将微分方程的字符串连接起来,格式正确,可用于茱莉亚的差分运算法则(即f(du,u,p,t):组合

r julia ode differential-equations
1个回答
0
投票

如@jverzani所述,

© www.soinside.com 2019 - 2024. All rights reserved.