# deval
计算微分方程解结构体
函数库: TyMath
# 语法
# 说明
y, = deval(sol,x) 和 y = deval(x,sol) 可以计算 x 中包含的点处的微分方程问题的解 sol。示例
y, = deval(___,idx) 只返回带有向量 idx 中所列索引的解分量。您可以使用前面列出的任一输入参数组合。示例
y,yp = deval(___) 还会返回 yp,这是求解器生成的数值解的一阶导数。示例
# 示例
计算具有固定时滞的 DDE
此示例使用 dde23 对 DDE 方程 y' = ddex1de(t,y,Z) 求解,然后绘制该解。
使用 dde23 对方程组求解。
using TyMath
using TyPlot
function ddex1de(t, y, Z)
ylag1 = Z[:, 1]
ylag2 = Z[:, 2]
return [
ylag1[1]
ylag1[1] + ylag2[2]
y[2]
]
end
function ddex1hist(t)
return ones(3, 1)
end
sol = dde23(ddex1de, [1 0.2], ddex1hist, [0 5]);
在区间 [0 5] 中计算 100 个点处的解。
x = LinRange(0, 5, 100);
y, yp = deval(sol, x);
对解绘图。
plot(x,y')
计算 van der Pol 方程
此示例使用 ode45 对方程组 y' = vdp1(t,y) 求解,然后绘制该解的第一个分量。
使用 ode45 对方程组求解。
using TyMath
using TyPlot
sol = ode45((t, y) -> [y[2]; (1 - y[1]^2) * y[2] - y[1]], [0 20], [2 0]; output_sol=true);
在区间 [0 20] 中计算 100 个点处的解的第一个分量。
x = LinRange(0, 20, 100)
y, yp = deval(sol, x, 1)
对解绘图。
plot(x,y')
插值函数的斜率
使用 ode23 对区间 [0,3] 内初始条件为 y0 = 0 的简单 ODE y' = t^2 求解。
using TyMath
sol = ode23((t, y) -> t^2, [0 3], 0; output_sol=true);
计算在七个点的解。解结构体 sol 中包含一个插值函数,该函数由 deval 用来生成这些点的连续解。通过 deval 指定第二个输出参数还会返回指定点的插值函数的导数。
x = LinRange(0, 3, 7)
y, yp = deval(sol, x)
y = 1×7 Matrix{Float64}:
0.0 0.0416667 0.333333 1.125 2.66667 5.20833 9.0
yp = 1×7 Matrix{Float64}:
0.0 0.25 1.0 2.25 4.0 6.25 9.0
# 输入参数
sol — 解结构体结构体
解结构体,指定为由以下微分方程求解器之一返回的结构体。
初始值问题求解器 - ode45、ode23、ode113、ode15s、ode23s、ode23t、ode23tb、ode15i
时滞微分方程求解器 - dde23、ddesd 或 ddensd
边界值问题求解器 - bvp4c 或 bvp5c
示例: sol = ode45(myode,tspan,y0;output_sol=true)
数据类型: OdeSol
x — 求值点向量
求值点,指定为向量。x 指定要求解的值的点。x 的元素必须包含在原始积分区间 [sol.x[1] sol.x[end]] 内。对于每个索引 i,解 y[:,i] 与 x[i] 相对应。
示例: 0:0.1:1
示例: [2,3,5,8]
数据类型: Int | Float
idx — 要返回的解分量向量
要返回的解分量,指定为向量。当您只对某些解分量感兴趣时,使用此输入。
示例: y = deval(sol,x,[2,3]) 只返回第二个和第三个解分量。
数据类型: Int | Float
# 输出参数
y — 插值解向量 | 矩阵
插值解,以向量或矩阵形式返回。y 中的行数等于返回的解分量的数量。
对于多边界值问题,通过 bvp4c 或 bvp5c 获得的解在接口处可能不连续。对于交界点 xc,deval 函数返回 xc 左侧和右侧极限的平均值。要获得范围值,请将 x 的值设置为略大或略小于 xc。
数据类型: Int | Float
yp — 由 sol 生成的连续解的导数向量 | 矩阵
由 sol 生成的连续解的导数,以向量或矩阵形式返回。yp 的大小与 y 相同,表示由 y 中的每个解点处的 sol 使用的插值函数的斜率。
数据类型: Int | Float