Каков канонический способ интеграции одного массива в другой?

рассмотрим два массива:

      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. Пока я понял, что могу использовать trapz() функция в цикле for:

      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.

PS1. Я полагаю, что MATLAB / Octave - это векторизованные функции, и должны быть предопределенные функции, которые позаботятся об этом.

PS2.У меня сейчас нет лицензии MATLAB, но ответ должен быть совместим как с MATLAB, так и с Octave.

2 ответа

Решение

Похоже, ты хочешь <tcode id="4259801"></tcode>функция :

      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))];
Другие вопросы по тегам