Matlab中,可以使用cumtrapz函数表示一组数据的累积梯形数值积分。累积梯形数值积分,通过梯形法按单位间距计算近似累积积分。关于梯形数值积分trapz函数的用法,可以参考文章:《Matlab数据处理之梯形数值积分函数trapz》。
本文主要介绍cumtrapz函数的常见用法、语法说明,以及一些常用实例。cumtrapz的帮助文档如下:
>> help cumtrapz
cumtrapz Cumulative trapezoidal numerical integration.
Z = cumtrapz(Y) computes an approximation of the cumulative
integral of Y via the trapezoidal method (with unit spacing). To
compute the integral for spacing different from one, multiply Z by
the spacing increment.
For vectors, cumtrapz(Y) is a vector containing the cumulative
integral of Y. For matrices, cumtrapz(Y) is a matrix the same size as
X with the cumulative integral over each column. For N-D arrays,
cumtrapz(Y) works along the first non-singleton dimension.
Z = cumtrapz(X,Y) computes the cumulative integral of Y with respect
to X using trapezoidal integration. X and Y must be vectors of the
same length, or X must be a column vector and Y an array whose first
non-singleton dimension is length(X). cumtrapz operates across this
dimension.
Z = cumtrapz(X,Y,DIM) or cumtrapz(Y,DIM) integrates along dimension
DIM of Y. The length of X must be the same as size(Y,DIM)).
Example: If Y = [0 1 2
3 4 5]
then cumtrapz(Y,1) is [0 0 0 and cumtrapz(Y,2) is [0 0.5 2
1.5 2.5 3.5] 0 3.5 8];
Class support for inputs X,Y:
float: double, single
cumtrapz函数常见用法
Q = cumtrapz(Y)
Q = cumtrapz(X,Y)
Q = cumtrapz(___,dim)
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 的每一行进行累积积分。
cumtrapz函数实例
按单位间距计算向量的累积积分
计算数据点间距为 1 的向量的累积积分。
创建数据的数值向量。
Y = [1 4 9 16 25];
Y
包含 f(x)=x2 在域 [1 5]
中的函数值。
使用 cumtrapz
按单位间距对数据求积分。
>> Q = cumtrapz(Y)
Q =
0 2.5000 9.0000 21.5000 42.0000
此近似积分最后得出的值为 42。在这种情况下,确切答案有些小,41+1/3。cumtrapz
函数高估积分值,因为 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 =
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 =
0 9.6750 48.6000 82.8000
0 8.8500 48.2250 85.7250
0 8.5500 46.1250 82.1250
结果为一个大小与 Y
相同的矩阵,其中包含每一行的累积积分。
多次累积积分
在 x 和 y 方向执行嵌套积分。绘制结果,以可视方式显示两个方向上的累积积分值。
创建一个由域值构成的网格。
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
,通常无需了解基础函数。在已知函数表达式的情况下,您可以改用 integral
、integral2
或 integral3
。
使用 cumtrapz
求二重积分的近似值
要执行此二重积分,请使用 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
原创文章,作者:古哥,转载需经过作者授权同意,并附上原文链接:https://iymark.com/articles/5712.html