# deval


计算微分方程解结构体

函数库: TyMath

# 语法

y, = deval(sol,x)

y, = deval(x,sol)

y, = deval(___,idx)

y,yp = deval(___)

# 说明

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

# 另请参阅

ode45 | ode23 | ode113 | ode15s | ode23s | ode23t | ode23tb