我需要在Matlab中计算某些离散数据点上函数的积分。我有每个点的绝对坐标:
X = [1,2.65,3.25,3.33,15.65]
Y = [10,31,15,-6,1]
我试图使用trapz(x,y)
函数,但x必须是数据点之间的间距,而不是数据点的x坐标。
计算这种集成的最简单方法是什么?
答案 0 :(得分:0)
使用integral2
,您可以在1D中指定航点作为选项。使用diff
进行2D集成时,似乎不能。
您似乎还有一个积分点的2D矩形网格?
在这种情况下,只需根据平均间隔长度(通过% 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(:));
)计算权重,然后求和。由于您的集成网格是固定的,因此数值积分的精度无论如何都是不可控制的,并且取决于您将要集成的功能。
let makeGreeting = (greeting, error) => {
return (fname, sname) => {
return fNames.includes(fname) && sNames.includes(sname)
? greeting + ' ' + fname + ' ' + sname
: error;
};
};
let sayHello = makeGreeting('Hello', 'Name not found');
sayHello('john', 'doe');
边界必须小心对待。此外,您的坐标列表需要进行排序。