# 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
对区域
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 的值,则必须使用新值重新定义匿名函数。