标签: differentialequations.jl

Julia DifferentialEquations.jl速度

Julia的新手,试图测试ODE求解器的速度.我在教程中使用了Lorenz方程

using DifferentialEquations
using Plots
function lorenz(t,u,du)
du[1] = 10.0*(u[2]-u[1])
du[2] = u[1]*(28.0-u[3]) - u[2]
du[3] = u[1]*u[2] - (8/3)*u[3]
end

u0 = [1.0;1.0;1.0]
tspan = (0.0,100.0)
prob = ODEProblem(lorenz,u0,tspan)
sol = solve(prob,reltol=1e-8,abstol=1e-8,saveat=collect(0:0.01:100))
Run Code Online (Sandbox Code Playgroud)

加载软件包的开始时间约为25秒,代码在Jupyter笔记本电脑的Windows 10四核笔记本电脑上运行了7秒.我知道Julia需要先预编译包,这就是加载时间这么长的原因吗?我发现25秒难以忍受.此外,当我使用不同的初始值再次运行求解器时,运行时间(~1s)要少得多,为什么会这样?这是典型的速度吗?

ode julia differentialequations.jl

7
推荐指数
1
解决办法
1027
查看次数

用隐式欧拉和共轭梯度线性求解器用非零狄利克雷 BC 求解热方程?

许多用户询问如何使用非零 Dirichlet BC 和内部线性求解器的共轭梯度求解热方程,u_t = u_xx。在转向更困难的抛物线 PDE 版本之前,这是一个常见的简化 PDE 问题。这是如何在DifferentialEquations.jl 中完成的?

differential-equations julia differentialequations.jl

6
推荐指数
1
解决办法
293
查看次数

在 ODE 问题中使用复数返回不精确的错误

我正在尝试使用 Julia 为 n-Machine 系统实现 Swing 方程。当我运行以下代码时,我收到此错误消息:

LoadError: InexactError: Float64(0.0 + 1.0im)
in expression starting at /home/Documents/first_try.jl:61
Swing_Equation(::Array{Float64,1}, ::Array{Float64,1}, ::Array{Float64,1}, ::Float64) at complex.jl:37
ODEFunction at diffeqfunction.jl:219 [inlined]
initialize!
Run Code Online (Sandbox Code Playgroud)

出现问题是因为我正在使用du[3] = (u[3] * u[2]) * im它不能是一种Float64类型。当我删除im-时代码工作正常,但它不再是我想要实现的模型。

有什么方法可以解决我的问题?

using Plots
using DifferentialEquations
inspectdr()

# Constants
P_m0  = 0.3                      # constant Mechanical Power
P_emax = 1
H = 1.01                         # Inertia constant of the system
?_0 = asin(P_m0 / P_emax)        # angle of the system
?_0 = …
Run Code Online (Sandbox Code Playgroud)

scientific-computing julia differentialequations.jl

5
推荐指数
1
解决办法
315
查看次数

Julia 中的二阶微分方程

我是 Julia 编程的新手,我设法解决了一些一阶 ODE,但是当我想转向二阶时,我不知道如何使用求解器来实现所需的方程。

我想解这个方程

y" + y = 0
Run Code Online (Sandbox Code Playgroud)

具有初始条件

y(0) = 3
y'(0) = -0.5
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

ode differential-equations julia differentialequations.jl

5
推荐指数
1
解决办法
2502
查看次数

在 Julia 中将 ODE 的解动画化

我有一个朱莉娅代码:

\n\n
using DifferentialEquations\nusing Plots\nusing ParameterizedFunctions\nplotly()\nlorenz = @ode_def Lorenz begin\n  dx = \xcf\x83*(y-x)\n  dy = \xcf\x81*x-y-x*z\n  dz = x*y-\xce\xb2*z\nend \xcf\x83 = 10. \xce\xb2 = 8./3. \xcf\x81 => 28.\nu0 = [1., 5., 10.]\ntspan = (0., 2.)\nprob = ODEProblem(lorenz, u0, tspan)\nsol = solve(prob,save_timeseries=true)\nplot(sol,vars=(:x,:y,:z))\n
Run Code Online (Sandbox Code Playgroud)\n\n

其结果是:\n下一个图\n
\n我如何为该图制作动画,以便它可以从 REPL 和 jupyter 运行?

\n

visualization ode julia plots.jl differentialequations.jl

3
推荐指数
1
解决办法
1042
查看次数

为什么在DifferentialEquations.jl中同时使用tableau和显式求解器?

我正在查看DifferentialEquations.jl包裹.在 DiffEqDevTools/src/ode_tableaus.jl我所看到的舞台造型 MidpointRK4.

但我也可以看到这些方案的明确代码 OrdinaryDiffEq/src/integrators/fixed_timestep_integrators.jl.

我有点期望一些代码使用tableaux而不是有一个明确的解算器.

我不知道如何检查是否正在使用画面.我尝试删除,OrdinaryDiffEq.jl但后来我的例子不会运行.

这反而表明正在使用显式代码.但在那种情况下,为什么画面存在呢?

differential-equations julia differentialequations.jl

3
推荐指数
1
解决办法
128
查看次数

茱莉亚的抛物型偏微分方程

我试图使用Julia以数字方式求解抛物线偏微分方程,但我找不到任何可以帮助的可访问文档.

这是一个例子:t,x是1维实数.我想解决u(t,x)= [u1(t,x)u2(t,x)]; 你满足了PDE

du1/dt = d ^ 2u1/dx ^ 2 + a11(x,u)du1/dx + a12(x,u)du2/dx + c1(x,u)

du2/dt = d ^ 2u2/dx ^ 2 + a21(x,u)du1/dx + a22(x,u)du2/dx + c2(x,u)

朱莉娅有可能这样做吗?在Matlab中使用pdepe可以解决这类问题.

julia differentialequations.jl

3
推荐指数
1
解决办法
700
查看次数

在ODEProblem运行时使用它的结果

我目前正在研究DifferentialEquations.jl的文档,并尝试移植我的旧计算神经科学代码,而不是我自己的,不那么优雅和高性能的ODE求解器.在这样做时,我偶然发现了以下问题:是否可以在返回当前步骤后立即访问并使用求解器返回的结果(而不是等待问题完成)?

我正在寻找一种方法,例如实时绘制模拟神经元的电压电平,这似乎是一个足够简单的任务,并且使用已有的Julia软件包可能很简单,但我无法弄清楚如何.是否必须对回调做任何事情?提前致谢.

simulation differential-equations julia differentialequations.jl

3
推荐指数
1
解决办法
190
查看次数

用于求解联立 ODE 的并行代码 (DifferentialEquations.jl) - Julia

我有以下 ODE 耦合系统(来自离散化积分微分偏微分方程): 在此输入图像描述

xi 是我控制的 x 网格上的点。我可以用下面的简单代码来解决这个问题:

using DifferentialEquations

function ode_syst(du,u,p, t)
    N = Int64(p[1])
    beta= p[2]
    deltax = 1/(N+1)
    xs = [deltax*i for i in 1:N]
    for j in 1:N
        du[j] = -xs[j]^(beta)*u[j]+deltax*sum([u[i]*xs[i]^(beta) for i in 1:N])
    end
end

N = 1000
u0 = ones(N)
beta = 2.0
p = [N, beta]
tspan = (0.0, 10^3);

prob = ODEProblem(ode_syst,u0,tspan,p);
sol = solve(prob);
Run Code Online (Sandbox Code Playgroud)

然而,当我使网格更细(即增加 N)时,计算时间会快速增长(我猜缩放比例是 N 的二次方)。对于如何使用分布式并行或多线程来实现这一点有什么建议吗?

附加信息: 我附上了分析图,它可能有助于了解程序大部分时间都花在哪里在此输入图像描述

differential-equations julia differentialequations.jl

3
推荐指数
1
解决办法
693
查看次数

模拟一个弹跳球?

是否有可能使用朱莉娅的方程求解器创建一个弹跳球的简单模型?

我从这开始:

using ODE

function bb(t, f)
    (y, v) = f
    dy_dt = v
    dv_dt = -9.81
    [dy_dt, dv_dt]
end

const y0 =  50.0             # height
const v0 =   0.0             # velocity
const startpos = [y0; v0]

ts = 0.0:0.25:10             # time span

t, res = ode45(bb, startpos, ts)
Run Code Online (Sandbox Code Playgroud)

它产生有用的数字:

julia> t
44-element Array{Float64,1}:
  0.0
  0.0551392
  0.25
  0.5
  0.75
  1.0
  ?
  8.75
  9.0
  9.25
  9.5
  9.75
 10.0

julia> res
44-element Array{Array{Float64,1},1}:
 [50.0,0.0]
 [49.9851,-0.540915]
 [49.6934,-2.4525]
 [48.7738,-4.905]
 [47.2409,-7.3575]
 ?
 [-392.676,-93.195]
 [-416.282,-95.6475]
 [-440.5,-98.1] …
Run Code Online (Sandbox Code Playgroud)

physics differential-equations julia differentialequations.jl

2
推荐指数
1
解决办法
479
查看次数