Julia “!” 中的感叹号在脚本中函数后

Exclamation mark in Julia "!" after function in scripts

提问人:Marc Schneider 提问时间:12/30/2022 最后编辑:ShayanMarc Schneider 更新时间:12/30/2022 访问量:141

问:

我正在尝试将我的 ODE 的多个解决方案保存在数组中。现在这是我得到的:

sols = []
for i in 1:numSim
  if solver == "Rosenbrock23"
    solution = solve(odeprob, Rosenbrock23())
    append!(sols, solution)
  end
end

正如你所看到的,如果使用某个 ode 求解器,我只想附加到这个 Array。但是,“append!” 语句会忽略此语句,并运行循环的每次迭代。我尝试预先分配数组 sol,使用这样的语句: 但是在这里,我正在努力解决数组 sol 的类型声明。sols[i] = solution

我试过了sols = zeros(length)

然后sols[i] = solution

但是,解决方案的类型为 ODESolution,不能转换为 Float64

数组 Julia DifferentialEquations.jl 复合类型

评论


答:

0赞 Shayan 12/30/2022 #1

请提供足够的信息以获得确切的答案。我无法重现您的问题,因为您没有提到 .既然你声明了,那么 of 应该是 ;因此,它应该能够包含任何元素。
但是,我可以复制官方文档中的代码(示例 1:求解标量方程 (ODE)),并将其与您的方法相结合:
odeprobnumSimsols = []eltypesolsAny

using DifferentialEquations

f(u,p,t) = 1.01*u
u0 = 1/2
tspan = (0.0,1.0)
odeprob = ODEProblem(f,u0,tspan)

sols = []
numSim = 2
solver = "Rosenbrock23"
for i in 1:numSim
  if solver == "Rosenbrock23"
    solution = solve(odeprob, Rosenbrock23())
    append!(sols, solution)
  end
end

然后,如果我调用变量:sols

julia> sols
22-element Vector{Any}:
 0.5
 0.5015852274675505
 0.5177172276935554
 0.5423763076371255
 0.5852018498590001
 0.6425679823795596
 0.7275742030693312
 0.835930076418226 
 0.9846257728490266
 1.1713401410831334
 1.3738764155543854
 0.5
 0.5015852274675505
 0.5177172276935554
 0.5423763076371255
 0.5852018498590001
 0.6425679823795596
 0.7275742030693312
 0.835930076418226
 0.9846257728490266
 1.1713401410831334
 1.3738764155543854