# cumtrapz
累积梯形积分
函数库: TyMath
# 语法
Q = cumtrapz(Y)
Q = cumtrapz(X,Y)
Q = cumtrapz(_,dim)
# 说明
Q = cumtrapz(Y) 是通过梯形法按单位间距计算 Y 的近似累计积分。Y 的大小确定求积分所沿用的维度:示例
- 如果 Y 是向量,则 cumtrapz(Y) 是 Y 的累计积分;
- 如果 Y 是矩阵,则 cumtrapz(Y) 是每一列的累计积分;
- 如果 Y 是多维数组,则 cumtrapz(Y) 对大小不等于 1 的第一个维度求积分。
Q = cumtrapz(X, Y) 根据 X 指定的坐标或标量间距对 Y 进行积分。示例
- 如果 X 是坐标向量,则 length(X) 必须等于 Y 的大小不等于 1 的第一个维度的大小;
- 如果 X 是标量间距,则 cumtrapz(X, Y) 等于 X*cumtrapz(Y)。
Q = cumtrapz(_,dim) 使用前面的任何语法沿维度 dim 求积分。必须指定 Y,也可以指定 X。如果指定 X,则它可以是长度等于 size(Y, dim) 的标量或向量。例如,如果 Y 是矩阵,则 cumtrapz(X,Y,2) 对 Y 的每一行进行累计积分。示例
# 示例
按单位间距计算向量的累计积分
计算数据点间距为 1 的向量的累计积分。
创建数据的数值向量。
using TyMath
Y = [1 4 9 16 25]
Y 包含
使用 cumtrapz 按单位间距对数据进行积分。
Q = cumtrapz(Y)
Q = 1×5 Matrix{Float64}:
0.0 2.5 9.0 21.5 42.0
此近似积分最后得出的值为 42。在这种情况下,确切答案有些小,
采用非单位间距对数据向量求积分
计算数据点间距均匀但不等于 1 的向量的累计积分。
创建域向量。
using TyMath
X = 0:pi/5:pi
计算X的正弦值
Y = sin.(X)
使用 cumtrapz 计算 Y 的累计积分。当点之间的间距不变但不等于 1 时,为 x 创建向量的替代方式是指定标量间距值。在这种情况下,cumtrapz(pi/5,Y) 与 (pi/5)*cumtrapz(Y) 相同。
Q = cumtrapz(X, Y)
Q = 6-element Vector{Float64}:
0.0
0.18465818304904566
0.6680995825722469
1.2656660155205581
1.7491074150437596
1.9337655980928052
采用非均匀间距对矩阵进行累积积分
对具有非均匀数值间距的矩阵的行进行累积积分。
创建一个 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]
使用 cumtrapz 分别对每一行进行积分,然后求出每个试验的累积行程距离。由于数据不是按固定间隔计算的,因此指定 X 来表示数据点之间的间距。由于数据位于 Y 的行中,因此指定 dim=2。
Q1 = cumtrapz(X, Y, 2)
Q1 = 3×4 Matrix{Float64}:
0.0 9.675 48.6 82.8
0.0 8.85 48.225 85.725
0.0 8.55 46.125 82.125
结果为一个大小与 Y 相同的矩阵,其中包含每一行的累积积分。
多次累积积分
在 x 和 y 方向执行嵌套积分。绘制结果,以可视方式显示两个方向上的累积积分值。
创造一个由域值构成的网络。
using TyMath
using TyBase
using TyPlot
x = -2:0.1:2
y = -2:0.2:2
X, Y = meshgrid2(x,y)
计算网络上的函数
F = 10 .*X.^2 + 20 .*Y.^2
cumtrapz 对数值数据而不是函数表达式求积分,因此要对数据矩阵使用 cumtrapz,通常无需了解基础函数。在已知函数表达式的情况下,可以使用 integral、integral2 或 integral3。
使用 cumtrapz 求二重积分的近似值
要执行此二重积分,请使用 cumtrapz 的嵌套函数调用。内部调用首先对数据的行进行积分,然后外部调用对列进行积分。
I = cumtrapz(collect(y), cumtrapz(collect(x), F, 2))
绘制表示原始函数的曲面以及表示累积积分的曲面。累计积分曲面上的每个点都给出了二重积分的中间值。I 中的最后一个值给出了二重积分的总体逼近值,I[end] = 642.4。用一个红色的星形在图上标记此点。
surf(X, Y, F, edgecolor="none")
xlabel("X")
ylabel("Y")
hold("on")
surf(X, Y, I, facealpha=0.5, edgecolor="none")
plot3(X[end],Y[end],I[end],"r*")
hold("off")

# 输入参数
Y - 数值数据向量 | 矩阵 | 多维数组
数值数据,为向量、矩阵或多维数组。默认情况下,cumtrapz 沿着其大小不等于1的Y的第一个维度求积分。
X - 点间距1(默认)| 均匀的坐标间距 | 坐标向量
点间距,指定为1(默认值)、均匀标量间距或坐标向量。
- 如果 X 是标量,则它指定数据点之间的间距为均匀间距,并且 cumtrapz(X, Y) 等于 X*cumtrapz(Y);
- 如果 X 是向量,则它指定数据点的
坐标,并且 length(X) 必须与 Y 的积分维度大小相同。
dim - 沿其运算的维度正整数标量
沿其运算的维度,指定为正整数标量。如果未指定值,则默认为第一个大于 1 的数组维度。
以一个二维输入数组 Y 为例:
cumtrapz(Y, 1) 作用于 Y 的各列中的连续元素;
cumtrapz(Y, 2) 作用于 Y 的各行中的连续元素。
如果 dim 大于 ndims(Y),则 cumtrapz 会报错。