本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

cumtrapz

累积梯形数值积分

说明

示例

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 的向量的累积积分。

创建数据的数值向量。

Y = [1 4 9 16 25];

Y 包含 f(x)=x2 在域 [1 5] 中的函数值。

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

Q = cumtrapz(Y)
Q = 1×5

         0    2.5000    9.0000   21.5000   42.0000

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

计算数据点间距均匀但不等于 1 的向量的累积积分。

创建域向量。

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×1

         0
    0.1847
    0.6681
    1.2657
    1.7491
    1.9338

对具有非均匀数据间距的矩阵的行进行累积积分。

创建一个 x 坐标向量和一个按不规则间隔测得的观测值矩阵。Y 中的行代表在 X 中各时间处测得的速度数据,分别来自三次不同的试验。

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

         0    9.6750   48.6000   82.8000
         0    8.8500   48.2250   85.7250
         0    8.5500   46.1250   82.1250

结果为一个大小与 Y 相同的矩阵,其中包含每一行的累积积分。

xy 方向执行嵌套积分。绘制结果,以可视方式显示两个方向上的累积积分值。

创建一个由域值构成的网格。

x = -2:0.1:2;
y = -2:0.2:2;
[X,Y] = meshgrid(x,y);

计算网格上的函数 f(x,y)=10x2+20y2

F = 10*X.^2 + 20*Y.^2;

cumtrapz 对数值数据而不是函数表达式求积分,因此要对数据矩阵使用 cumtrapz,通常无需了解基础函数。在已知函数表达式的情况下,您可以改用 integralintegral2integral3

使用 cumtrapz 求二重积分的近似值

I(a,b)=-2b-2a(10x2+20y2)dxdy.

要执行此二重积分,请使用 cumtrapz 的嵌套函数调用。内部调用首先对数据的行进行积分,然后外部调用对列进行积分。

I = cumtrapz(y,cumtrapz(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

输入参数

全部折叠

数值数据,指定为向量、矩阵或多维数组。默认情况下,cumtrapz 沿着其大小不等于 1 的 Y 的第一个维度求积分。

数据类型: single | double
复数支持:

点间距,指定为 1(默认值)、均匀标量间距或坐标向量。

  • 如果 X 是标量,则它指定数据点之间的间距为均匀间距,并且 cumtrapz(X,Y) 等于 X*cumtrapz(Y)

  • 如果 X 是向量,则它指定数据点的 x 坐标,并且 length(X) 必须与 Y 的积分维度大小相同。

数据类型: single | double

沿其运算的维度,指定为正整数标量。如果未指定值,则默认值是大小不等于 1 的第一个数组维度。

以一个二维输入数组 Y 为例:

  • cumtrapz(Y,1) 作用于 Y 的各列中的连续元素。

  • cumtrapz(Y,2) 作用于 Y 的各行中的连续元素。

如果 dim 大于 ndims(Y),则 cumtrapz 返回一个由零值组成的数组,其大小与 Y 相同。

提示

  • 使用 trapzcumtrapz 对离散数据集执行数值积分。如果数据可以用函数表达式表示,则改用 integralintegral2integral3

  • trapz 将它执行运算的维度大小减小到 1,并仅返回最终的积分值。cumtrapz 还返回中间积分值,保留它执行运算的维度的大小。

扩展功能

C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。

在 R2006a 之前推出