# integral2


对二重积分进行数值计算

函数库: TyMath

提示

推荐使用 ty_integral2 来体验更全的功能以及得到更精确的结果。

# 语法

q,e = integral2(fun,xmin,xmax,ymin,ymax)
q,e = integral2(fun,xmin,xmax,ymin,ymax;Name=Value)

# 说明

q,e = integral2(fun,xmin,xmax,ymin,ymax) 在平面区域 xmin ≤ x ≤ xmax 和 ymin(x) ≤ y ≤ ymax(x) 上逼近函数 z = fun(y,x) 的积分。示例


q,e = integral2(fun,xmin,xmax,ymin,ymax;Name=Value) 指定具有一个或多个 Name=Value 对组参数的其他选项。例如,指定 rtol,后跟实数,可调整相对误差。示例

# 示例

将三角形区域与奇异性在边界处集成

以下面的函数为例:

此函数在 x 和 y 为零时未定义。当奇异性位于积分边界上时,integral2 的性能最佳。

创建匿名函数。

using TyMath
fun(y, x) = 1 ./ (sqrt(x + y) .* (1 + x + y) .^ 2)

限定的三角形区域计算积分。

ymin(x) = 0
ymax(x) = 1 - x
q, e = integral2(fun, 0, 1, ymin, ymax)
q = 0.2853981634013179
在极坐标中计算二重积分

定义函数:

using TyMath
fun(x,y) = 1 ./ (sqrt(x + y) .* (1 + x + y) .^ 2)
polarfun(r, theta) = fun(r .* cos(theta), r .* sin(theta)) .* r

的上限定义一个函数。

rmax(theta) = 1 ./ (sin(theta) + cos(theta))
rmin(theta) = 0

限定的区域计算积分。

q, e = integral2(polarfun, 0, pi / 2,rmin, rmax)
q = 0.28539816339550955
使用特定方法和误差容限计算参数化函数的二重积分

使用参数 创建匿名的参数化函数

using TyMath
a = 3
b = 5
fun(y, x) = a * x .^ 2 + b * y .^ 2

对区域 计算积分。指定约为 10 个有效数字的精度。

q, e = integral2(fun, 0, 5, -5, 0, atol = 0, rtol = 1e-10)
q = 1666.6666666666665

# 输入参数

fun - 被积函数
函数句柄

被积函数,指定为函数句柄,用于定义在平面区域 xmin ≤ x ≤ xmax 和 ymin(x) ≤ y ≤ ymax(x) 上求积分的函数。函数 fun 必须接受两个具有相同大小的数组,并返回一个对应值数组。该函数必须执行按元素运算。

构建函数句柄时,函数输入参数顺序与积分顺序保持一致,例如:在平面区域 xmin ≤ x ≤ xmax 和 ymin(x) ≤ y ≤ ymax(x) 上求函数 fun 的积分。

由于 y 的取值范围是 x 的函数,因此需要对 y 先进行积分,然后再对 x 进行积分。所以函数句柄的输入参数顺序是 y 和 x,即 fun(y,x)。若积分区间都是常数,则函数句柄的输入参数顺序无关紧要。

数据类型: 函数句柄

xmin - x 的下限
实数

x 的下限,指定为有限或无限的实标量值。

数据类型: Int | Float

xmax - x 的上限
实数

x 的上限,指定为有限或无限的实标量值。

数据类型: Int | Float

ymin - y 的下限
实数 | 函数句柄

y 的下限,指定为有限或无限的实标量值。您可以在对非矩形区域积分时将 ymin 指定为函数句柄(x 的函数)。

数据类型: Int | Float | 函数句柄

ymax - y 的上限
实数 | 函数句柄

y 的上限,指定为有限或无限的实标量值。您也可以在对非矩形区域积分时将 ymax 指定为函数句柄(x 的函数)。

数据类型: Int | Float | 函数句柄

# 名称-值对组参数

指定可选的、以等号分隔的 Name,Value 对组参数。Name 为参数名称,Value 为对应的值。写法为Name = Value。您可采用任意顺序指定多个名称-值对组参数,如 Name1=Value1,...,NameN=ValueN 所示。

示例: integral2(fun,a,b,c,d;atol=1e-12) 将绝对误差容限设置为约 12 位小数精度。

atol - 绝对误差容限
非负实数

绝对误差容限,指定为由 atol 和非负实数组成的等号分隔对组。integral2 使用绝对误差容限来限制绝对误差容限估计值,即 |q – Q|,其中 q 为计算的积分值,Q 为(未知)确切值。如果减小绝对误差容限,integral2 可以提供更多位小数的精度。默认值为 1e-10。

注意

atol 和 rtol 配合使用。integral2 可满足绝对误差容限或相对误差容限(但不一定同时满足两者)。有关使用这些误差容限的详细信息,请参见提示一节。

示例: integral2(fun,a,b,c,d;atol=1e-12) 将绝对误差容限设置为约 12 位小数精度。

数据类型: Int | Float

rtol - 相对误差容限
非负实数

相对误差容限,指定为由 rtol 和非负实数组成的等号分隔对组。integral2 使用相对误差容限来限制相对误差容限估计值,即 |q – Q|/|Q|,其中 q 为计算的积分值,Q 为(未知)确切值。。如果减小相对误差容限,integral2 可以为精度提供更多的有效数位。默认值为 1e-6。

注意

rtol 和 atol 配合使用。integral2 可满足绝对误差容限或相对误差容限(但不一定同时满足两者)。有关使用这些误差容限的详细信息,请参见提示一节。

示例: integral2(fun,a,b,c,d;rtol=1e-9) 将相对误差容限设置为约 9 位有效数位。

数据类型: Int | Float

method - 积分法
:suave | :vegas | :cuhre | :divonne | :hcubature(默认)

积分法,指定为由 method 和以下所述方法之一组成的等号分隔对组。

积分法
suave
vegas
cuhre
divonne
hcubature

示例: method = :suave 指定 suave 积分法。

数据类型: symbol

# 提示

  • integral2 函数尝试满足:

    abs(q - Q) <= max(atol,rtol*abs(q))
    

    其中 q 为计算的积分值,Q 为(未知)确切值。绝对和相对误差提供了一种在准确性和计算时间之间权衡的方法。相对误差通常确定积分的准确性。但是,如果 abs(q) 足够小,绝对误差会确定积分的准确性。您通常应同时指定绝对误差和相对误差;

  • 在对匿名函数进行参数化时,请注意参数值应在函数句柄生命周期内保留。例如,函数 fun(y,x) = x + y + a 使用创建 fun 时的 a 的值。如果您以后决定更改 a 的值,则必须使用新值重新定义匿名函数。

# 另请参阅

integral | integral3 | trapz