Почему я не могу получить результаты intdump с комплексными числами - PullRequest
0 голосов
/ 22 февраля 2019

Мне нужно получить интеграл столбца за такой интервал, но результаты странные.

Я использую функцию intdump.Например, предположим, что у меня есть столбец из 16 строк и 1 столбца, и мне нужно взять интеграл и вывести дамп intdump больше 4, что означает, что результаты будут состоять из 4 строк и 1 столбца, но результаты странные.

Например, у меня есть данные:

h = [
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.7071 + 0.7071i
  -0.7071 + 0.7071i
  -0.7071 + 0.7071i
   0.7071 + 0.7071i]; 

, когда я использую команду Y = intdump(h,4); Я получаю следующие результаты:

Y =
       0.0000 + 0.0000i
       0.0000 + 0.0000i
       0.0000 + 0.0000i
       0.0000 + 0.7071i

Однако ожидаемые результатыдолжно быть, как показано ниже:

Y =
       0.0000 + 0.0000i
       0.0000 + 0.0000i
       0.0000 + 0.0000i
       0.7071 + 0.7071i

Пожалуйста, кто-нибудь может поддержать в этом вопросе?

1 Ответ

0 голосов
/ 25 февраля 2019

Возможно, вы не поняли, что делает 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)
...