# trapz
梯形数值积分
函数库: TyMath
# 语法
Q = trapz(Y)
Q = trapz(X,Y)
Q = trapz(___,dim)
# 说明
Q = trapz(Y) 通过梯形法计算 Y 的近似积分(采用单位间距)。Y 的大小确定求积分所沿用的维度:示例
- 如果 Y 为向量,则 trapz(Y) 是 Y 的近似积分;
- 如果 Y 为矩阵,则 trapz(Y) 对每列求积分并返回积分值的行向量;
- 如果 Y 为多维数组,则 trapz(Y) 对其大小不等于 1 的第一个维度求积分。该维度的大小变为 1,而其他维度的大小保持不变。
Q = trapz(X,Y) 根据 X 指定的坐标或标量间距对 Y 进行积分。示例
- 如果 X 是坐标向量,则 length(X) 必须等于 Y 的大小不等于 1 的第一个维度的大小;
- 如果 X 是标量间距,则 trapz(X,Y) 等于 X*trapz(Y)。
Q = trapz(___,dim) 使用以前的任何语法沿维度 dim 求积分。必须指定 Y,也可以指定 X。如果指定 X,则它可以是长度等于 size(Y,dim) 的标量或向量。例如,如果 Y 为矩阵,则 trapz(X,Y,2) 对 Y 的每行求积分。示例
# 示例
采用单位间距对数据向量求积分
计算数据点之间间距为 1 的向量的积分。
创建数据的数值向量。
using TyMath
Y = [1 4 9 16 25]
Y 包含域 [1, 5] 中的
使用 trapz 按单位间距对数据求积分。
Q = trapz(Y)
Q = 1×1 Matrix{Float64}:
42.0
该近似积分生成值 42。在这种情况下,确切答案有些小,
采用非单位间距对数据向量求积分
计算数据点间距均匀但不等于 1 的向量的积分。
创建域向量。
using TyMath
X = 0:pi/100:pi
计算 X 的正弦值。
Y = sin.(X)
使用 trapz 对 Y 求积分。
Q = trapz(X,Y)
Q = 1×1 Matrix{Float64}:
1.9993421048376256
当点之间的间距不变但不等于 1 时,为 X 创建向量的替代方法是指定标量间距值。在这种情况下,trapz(pi/100,Y) 与 pi/100*trapz(Y) 相同
采用非均匀间距对矩阵求积分
对具有非均匀数据间距的矩阵的行求积分。
创建一个 x 坐标向量和一个按不规则间隔测得的观测值矩阵。Y 中的行代表在 X 中各时间处测得的速度数据,分别来自三次不同的试验。
using TyMath
X = [1 2.5 7 10]
Y = [5.2 7.7 9.6 13.2;
4.8 7.0 10.5 14.5;
4.9 6.5 10.2 13.8]
使用 trapz 分别对每一行进行积分,然后求出每次试验中经过的总距离。由于数据不是按固定间隔计算的,因此指定 X 来表示数据点之间的间距。由于数据位于 Y 的行中,因此指定 dim = 2。
Q1 = trapz(X,Y,2)
Q1 = 3×1 Matrix{Float64}:
82.8
85.725
82.125
结果为积分值的列向量,Y 中的每行对应一个列向量。
多个数值积分
创建一个由域值构成的网格。
using TyMath
using TyBase
x = -3:.1:3
y = -5:.1:5
X,Y = meshgrid2(x,y)
计算网格上的函数
F = X.^2 + Y.^2
trapz 对数值数据、而不是函数表达式求积分,因此表达式通常无需已知可对数据矩阵使用 trapz。在已知函数表达式的情况下,您可以改用 integral、integral2 或 integral3。
使用 trapz 求二重积分的近似值
要对数值数据的数组执行二重或三重积分运算,请嵌套对 trapz 的函数调用。
I = trapz(y,trapz(x,F,2))
I = 1×1 Matrix{Float64}:
680.1999999999999
trapz 先对 x 求积分以生成列向量。然后,y 上的积分可将列向量减少为单个标量。trapz 稍微高估计确切答案 680,因为 f(x,y) 是向上凹的。
# 输入参数
Y - 数值数据向量 | 矩阵 | 多维数组
数值数据,指定为向量、矩阵或多维数组。默认情况下,trapz 沿着其大小不等于 1 的 Y 的第一个维度求积分。
数据类型: Int8 | Int16 | Int32 | Int64 | Int128 | Float16 | Float32 | Float64
复数支持: 是
X - 点间距1 (默认) | 均匀的标量间距 | 坐标向量
点间距,指定为 1(默认值)、均匀标量间距或坐标向量。
- 如果 X 是标量,则它指定数据点之间的间距为均匀间距,并且 trapz(X,Y) 等于 X*trapz(Y);
- 如果 X 是向量,则它指定数据点的 x 坐标,并且 length(X) 必须与 Y 的积分维度大小相同。
数据类型: Int8 | Int16 | Int32 | Int64 | Int128 | Float16 | Float32 | Float64
dim - 沿其运算的维度正整数标量
沿其运算的维度,指定为正整数标量。如果未指定值,则默认值是大小不等于 1 的第一个数组维度。
以一个二维输入数组 Y 为例:
- trapz(Y,1) 对 Y 的列中的连续元素进行处理并返回1×n矩阵;
- trapz(Y,2) 对 Y 的行中的连续元素进行处理并返回向量。
如果 dim 大于 ndims(Y),则 trapz 返回大小与 Y 相同的由零组成的数组。
# 详细信息
梯形法
trapz 通过梯形法执行数值积分运算。通过将一个区域分为包含多个更容易计算的区域的梯形,该方法对区间内的积分计算近似值。例如,下面是使用八个均匀间隔的梯形对正弦函数求梯形积分:
对于具有 N+1 个均匀分布的点的积分,近似值为
其中,各点之间的间距等于标量值
如果各 N+1 点之间的间距不是常量,则公式可以推及到
其中,
# 提示
trapz 将它执行运算的维度大小减小到 1,并仅返回最终的积分值。cumtrapz 还返回中间积分值,保留它执行运算的维度的大小。