julia - 使用Julia中的DifferentialEquations包的具有离散强制函数的非齐次ODE
问题描述
在Julia中,我想使用DifferentialEquations.jl包来解决
\ddot{u} + f(u,\dot{u},p) = g(t)
其中 g(t) 是在时间 t 的等距离瞬间给出的值向量。
这种情况与https://diffeq.sciml.ai/stable/tutorials/ode_example/中的情况不同, 其中强制函数 M(t) 是连续的。
这种情况的解决方案是按照
但是,我不想插入强制函数 g(t),而是想尝试回调命令。
对于受到地面运动的二阶线性单自由度系统,我已经尝试过
using DifferentialEquations
rhs = rand(10); # ground accel.
deltat = 0.02;
function affect!(integrator)
integrator.p[3] = rhseval(integrator.t)
end
cb = PeriodicCallback(affect!,deltat)
function rhseval(x)
return rhs[floor(Int,x/deltat)+1]
end
function sdof!(du,u,p,t)
omg = p[1]
zeta = p[2]
du[1] = u[2]
du[2] = - omg^2 * u[1] - 2zeta * omg * u[2] - p[3]
end
disp0 = 0;
velo0 = 0;
u0 = [disp0, velo0];
tspan = (0.0,0.1);
p = [2pi,0.02,0];
prob = ODEProblem(sdof!,u0,tspan,p,callback = cb)
sol = solve(prob,abstol = 1e-8, reltol = 1e-8,saveat=0.02)
但得到的结果并不令人满意。
有没有其他方法,不是插值g(t),而是使用回调,即PeriodicCallback、DiscreteCallback?
解决方案
这个问题似乎只是评论中解决的用户错误。
推荐阅读
- selenium - 如何使用 Selenium WebDriver 捕获网络流量并查找谷歌分析调用?
- python - Python-Flask 异常:意外的数据类型
, - jsdoc - JsDoc:在函数描述中提到一个参数
- html - 将 flex 包裹的元素与容器底部对齐?
- javascript - React Js axios设置状态和自我不起作用
- jira - 获取与 Jira 相同格式的 PocketQuery 结果
- angular - Angular生命周期事件调用而不实现接口?
- php - 使用 PHP 将时间保存为数据库中的时间戳
- python - 文件读取连接
- javascript - 用 php/mysql 中的时间段进行说明