2026a

# ty_quad


(不推荐)以自适应 Simpson 积分法计算数值积分

函数库: TyMath

提示

不建议使用 ty_quad。请改用 ty_integral。

# 语法

q,funcEvals = ty_quad(fun,a,b)
q,funcEvals = ty_quad(fun,a,b,tol)
q,funcEvals = ty_quad(fun,a,b,trace)

# 说明

q,funcEvals = ty_quad(fun,a,b) 使用递归自适应 Simpson 积分法逼近函数 fun 从 a 到 b 的积分,并返回函数计算次数 fcnEvals。示例


q,funcEvals = ty_quad(fun,a,b,tol) 为每个子区间指定绝对误差容限 tol,而不是使用默认值 1e-6。


q,funcEvals = ty_quad(fun,a,b,tol,trace) 打开诊断信息的显示。当 trace 为 true时,ty_quad 显示递归期间值 fcnEvals, a, b-a, Q 的向量。trace 默认为 false。

# 示例

计算定积分

计算积分

首先,创建一个用于计算被积函数的函数 myfun。

using TyMath
myfun = x -> 1/(x^3-2*x-5)

现在使用 ty_quad 计算积分。使用第二个和第三个输入参数指定积分范围。

q, = ty_quad(myfun,0,2)
q = -0.46050173974249153

# 输入参数

fun - 被积函数
函数句柄

被积函数,指定为函数句柄,用于定义求 a 至 b 的积分的函数。

对于标量值问题,函数 y = fun(x) 必须接受标量参数 x 并返回标量结果 y,其中 y 是被积函数在 x 处的计算结果。

示例: q = ty_quad(x->exp(1-x^2),a,b) 对函数句柄进行积分。

数据类型: 句柄函数

a,b - 积分范围(以两个参数指定)
标量

积分范围,指定为单独的标量参数。范围 a 和 b 必须是有限的。

示例: ty_quad(fun,0,1) 从 0 到 1 对 fun 进行积分。

数据类型: Int | Float

tol - 绝对误差容限
1e-6(默认) | 标量

绝对误差容限,指定为标量。ty_quad 对积分中每个子区间使用绝对误差容限。随着 tol 量级的增大,ty_quad 执行的函数计算越来越少,完成计算的速度越来越快,但产生的结果越来越不精确。

示例: ty_quad(fun,a,b,1e-12) 将绝对误差容限设置为 1e-12。

数据类型: Int | Float

trace - 切换诊断信息
false(默认) | true

切换诊断信息,指定为逻辑值。当 trace 为 true 时,ty_quad 显示递归中每个子区间的值 fcnEvals, a, b-a, Q 组成的向量:

  • fcnEvals 给出函数计算的次数;

  • a 和 b 是积分的范围;

  • Q 是子区间的计算面积。

示例: ty_quad(fun,a,b,1e-8,true) 计算 fun 从 a 到 b 的积分,容差为 1e-8,并且启用诊断信息。

数据类型: Bool

# 输出参数

q - 积分的值
标量

积分的值,以标量形式返回。

数据类型: Int | Float

fcnEvals - 函数计算次数
标量

函数计算次数,以标量形式返回。

数据类型: Int

# 算法

ty_quad 使用自适应递归 Simpson 积分法则实现低阶求积方法。

# 参考文献

[1] Gander, W. and W. Gautschi, “Adaptive Quadrature – Revisited,” BIT, Vol. 40, 2000, pp. 84-101. This document is also available at https://www.inf.ethz.ch/personal/gander.

# 另请参阅

quad2d | quadgk | trapz | ty_integral | integral2 | integral3