Возможно, вы не поняли, что делает intdumb
и каковы ожидаемые результаты.
Когда вы спрашиваете Y = intdump(h,4);
, вам требуется выполнить усредненную интеграцию за каждый период4 образца.Другими словами, вы перегруппируете свои данные по 4 выборкам, суммируете их, а затем делите результат на 4.
0.0000 + 0.0000i
0.0000 + 0.0000i
0.0000 + 0.0000i
0.0000 + 0.0000i
----------------
(0.0000 + 0.0000i) / 4 = 0.0000 + 0.0000i
0.0000 + 0.0000i
0.0000 + 0.0000i
0.0000 + 0.0000i
0.0000 + 0.0000i
----------------
(0.0000 + 0.0000i) / 4 = 0.0000 + 0.0000i
0.0000 + 0.0000i
0.0000 + 0.0000i
0.0000 + 0.0000i
0.0000 + 0.0000i
----------------
(0.0000 + 0.0000i) / 4 = 0.0000 + 0.0000i
0.7071 + 0.7071i
-0.7071 + 0.7071i
-0.7071 + 0.7071i
0.7071 + 0.7071i
----------------
(0.0000 + 2.8284i) / 4 = 0.0000 + 0.7071i
Таким образом, Matlab возвращает идеальные результаты.Я не знаю, почему вы ожидаете других результатов, но это не то, что intdump
должен возвращать.
Еще один способ вычислить это - использовать свойство линейности интегрального оператора.Действительно, у вас есть:
INTEGRAL (A + iB) = INTEGRAL (A) + i * INTEGRAL (B)
Таким образом, в вашем случае вы можете разделить вещественное имнимая часть h
Y_temp = intdump([real(h) imag(h)],4);
Y = Y_temp(:,1)+i*Y_temp(:,2)