我需要在Matlab中计算函数在一些离散数据点上的积分。我有每个点的绝对坐标: x=[1,2.65,3.25,3.33,15.65] y=[10,31,15,-6,1] 我试图使用
trapz(x,y)
函数,但 x 必须是数据点之间的间距,而不是数据点的 x 坐标。
计算此类积分的最简单方法是什么?
使用
integral
,您可以指定一维路径点作为选项。使用 integral2
进行 2D 集成,似乎你不能。
您似乎还有一个集成点的 2D 矩形网格?
在这种情况下,只需根据平均间隔长度(通过
diff
)计算权重,然后求和。由于积分网格是固定的,数值积分的精度无论如何都是不可控的,并且取决于您要积分的函数。
% get grid
x = [1, 3, 7, 15]';
y = [3, 6, 8];
[xi, yi] = ndgrid(x, y);
% get weights
h = diff(x, [], 1);
wx = ([h; 1] + [1; h]) / 2;
h = diff(y, [], 2);
wy = ([h, 1] + [1, h]) / 2;
w = wx * wy;
% calculate function
f = func(xi, yi);
% integration is weighted summation
int = sum(f(:) .* w(:));
必须谨慎对待边界。另外,您的坐标列表需要排序。