Как Matlab знает функцию, которую производит вектор для вычисления cumtrapz? - PullRequest
0 голосов
/ 30 сентября 2019

У меня может быть глупый вопрос. Когда я пишу следующий скрипт в Matlab y = [1 4], а затем, когда я использую cumtrapz (y), я получаю [0 2.5]. Я знаю, что cumtrapz считает, что deltaX = 1 в этом методе. Мой вопрос заключается в том, что, как Matlab знает, что вектор 1,4 создается с помощью f (x) = x ^ 2? Можно сказать, что он создается с помощью f (x) = 3x-2, просто идентифицируя значения вектора y или многие другие типы функций. Итак, как Matlab знает, какая функция произвела Y-вектор, чтобы приблизить интеграцию функции? Спасибо

Ответы [ 2 ]

3 голосов
/ 30 сентября 2019

Matlab не знает, что ваш вектор был создан f(x) = x^2. trapz вычисляет линейную интерполяцию между каждой парой значений.

Таким образом, cumtrapz просто вычисляет скользящую сумму 2 на 2, а затем делит результат на 2.

% Sample data
Y = [1 4 9 16 25];

% Using cumtrapz
Q1  = diff(cumtrapz(Y))
%Q1 = [2.5, 6.5, 12.5, 20.5]

% Using a moving sum
Q2  = conv(Y,ones(2,1),'valid')/2
%Q2 = [2.5, 6.5, 12.5, 20.5]

Графический пример с f(x) = sin(x):

enter image description here

cumtrapz просто применяет cumsum значения промежуточных точек.

3 голосов
/ 30 сентября 2019

MATLAB не знает, откуда взялись эти значения

a = [1 4 5 9]
s = cumtrapz(a)
s =
0.00000    2.50000    7.00000   14.00000

Стандартный шаг 1 , поэтому:

h = 1;
s(i) = s(i-1) + h*(a(i-1)+a(i))/2
...