将数组集成到另一个数组的规范方法是什么
What is the canonical way to integrating an array over another
考虑两个数组:
x = [0 .05 .1 .3 .32 .4 .55 .7 1 1.3 1.4 1.45 1.6 1.8 1.9 2 2.2 2.3 2.6 2.8 2.91 3];
y = x.^2;
我想整合 y
而不是 x
。到目前为止,我发现我可以在 for 循环中使用 trapz()
函数:
y1 = zeros(length(x));
for ii = 1:length(x)
y1(ii) = trapz(x(1:ii), y(1:ii));
end
plot(x, y1, x, y);
但是,我想知道是否有一种规范的方法可以在不使用 for 循环的情况下执行此操作。
P.S.1. 我想 MATLAB/Octave 是向量化函数,应该有预定义的函数来处理这类事情。
P.S.2. 我现在没有 MATLAB 许可证,但答案必须与 MATLAB 和 Octave 兼容。
听起来你想要 cumtrapz( )
function:
y1 = zeros(length(x), 1);
y1 = cumtrapz(x, y)
plot(x, y1, x, y);
您可以使用 cumsum
和 diff
:
y1 = [0 cumsum((y(1:end-1) + diff(y)/2) .* diff(x))];
考虑两个数组:
x = [0 .05 .1 .3 .32 .4 .55 .7 1 1.3 1.4 1.45 1.6 1.8 1.9 2 2.2 2.3 2.6 2.8 2.91 3];
y = x.^2;
我想整合 y
而不是 x
。到目前为止,我发现我可以在 for 循环中使用 trapz()
函数:
y1 = zeros(length(x));
for ii = 1:length(x)
y1(ii) = trapz(x(1:ii), y(1:ii));
end
plot(x, y1, x, y);
但是,我想知道是否有一种规范的方法可以在不使用 for 循环的情况下执行此操作。
P.S.1. 我想 MATLAB/Octave 是向量化函数,应该有预定义的函数来处理这类事情。
P.S.2. 我现在没有 MATLAB 许可证,但答案必须与 MATLAB 和 Octave 兼容。
听起来你想要 cumtrapz( )
function:
y1 = zeros(length(x), 1);
y1 = cumtrapz(x, y)
plot(x, y1, x, y);
您可以使用 cumsum
和 diff
:
y1 = [0 cumsum((y(1:end-1) + diff(y)/2) .* diff(x))];