# 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 包含 在域 [1 5] 中的函数值。

使用 cumtrapz 按单位间距对数据进行积分。

Q = cumtrapz(Y)
Q = 1×5 Matrix{Float64}:
 0.0  2.5  9.0  21.5  42.0

此近似积分最后得出的值为 42。在这种情况下,确切答案有些小,。cumtrapz 的积分值过高,因为 f(x) 是上凹的。

采用非单位间距对数据向量求积分

计算数据点间距均匀但不等于 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 会报错。

# 另请参阅

cumsum | cumprod | trapz