[英]Integral on discrete data points in Matlab
我需要在Matlab中计算某些离散数据点上函数的积分。 我有每个点的绝对坐标:x = [1,2.65,3.25,3.33,15.65] y = [10,31,15,-6,1]我试图使用trapz(x,y)
函数但是那里x必须是数据点之间的间距,而不是数据点的x坐标。
计算这种集成的最简单方法是什么?
使用integral
您可以在1D中指定航点作为选项。 使用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(:));
边界必须小心对待。 此外,您的坐标列表需要进行排序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.