реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> О представлении выборок случайных процессов рядом по собственным векторам корреляционной функции, теория и практика
AMih
сообщение Jun 10 2014, 09:11
Сообщение #1





Группа: Участник
Сообщений: 11
Регистрация: 30-06-12
Пользователь №: 72 571



Есть ансамбль выборок
Выборка Х1=х1, x2 … xn сделана в n моментов времени. Аналогично получен еще ряд выборок.
Весь ансамбль представим как матрицу Х =
х11, x12 … x1n
х21, x22 … x2n
……………………….
хm1, xm2 … xmn
Рассчитаем корреляционную матрицу К как коэффициенты корреляции i и j столбцов. Вычислим собственные вектора Vi матрицы К.
Перейти к выборкам с некоррелированными отсчетами Y можно как Y = ХV (в матричном виде). Корреляционная матрица для Y должна быть диагональной. Это теория.
На практике: матрица К не диагональная, значения коэффициентов корреляции вне главной диагонали лежат в интервале 0.6.-.0.9. Корреляционная матрица собственных векторов Vi диагональная (специально проверял), значения вне главной диагонали не превышают заданной точности (т.е. не более 1Е-35). А корреляционная матрица для Y диагональной не получается, значения коэффициентов корреляции вне главной диагонали близки к 1. То есть: вместо искомой декорреляции ансамбля исходных выборок Х получаю совершенно противоположный эффект - усиление корреляции.
Ошибка где-то в самом принципе. Сам ошибку не вижу. Подскажите – где наврал?
Go to the top of the page
 
+Quote Post
KalashKS
сообщение Jun 10 2014, 10:31
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 236
Регистрация: 7-02-11
Пользователь №: 62 755



Может где-то что-то транспонировать забыли?
Go to the top of the page
 
+Quote Post
AMih
сообщение Jun 11 2014, 01:11
Сообщение #3





Группа: Участник
Сообщений: 11
Регистрация: 30-06-12
Пользователь №: 72 571



Цитата(KalashKS @ Jun 10 2014, 18:41) *
Может где-то что-то транспонировать забыли?

Нет, "прошел" по всему алгоритму. А потом еще специально, для проверки, перед переводом в некоррелированные координаты добавлял транспонирование V. Все равно не тот результат
Go to the top of the page
 
+Quote Post
KalashKS
сообщение Jun 11 2014, 03:29
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 236
Регистрация: 7-02-11
Пользователь №: 62 755



Цитата(AMih @ Jun 11 2014, 09:21) *
Нет, "прошел" по всему алгоритму. А потом еще специально, для проверки, перед переводом в некоррелированные координаты добавлял транспонирование V. Все равно не тот результат

Тогда показывайте, как считали. В том, что вы привели, трудно искать ошибки.
Go to the top of the page
 
+Quote Post
iiv
сообщение Jun 11 2014, 03:47
Сообщение #5


вопрошающий
*****

Группа: Свой
Сообщений: 1 726
Регистрация: 24-01-11
Пользователь №: 62 436



Как-то у Вас все запутанно, давайте вместе по шагам проверим:
Исходня матрица Х, для нее сингулярное разложение Х = UZW^T, U, W - унитарные, Z - квадратная диагональная
Корреляционная матрица К = X^T X = WZU^T U ZW^T = WZ ZW^T, то есть Ваши собственные векторы - это есть правые сингулярные векторы W от исходной матрицы Х.
Если же вычислить Вашу Y = ХV , то она получается в виде: Y = UZW^T W = UZ . Для нее корреляционная матрица ZU^TUZ = Z^2 - диагональна, и должна совпадать с собственными значениями исходной K матрицы.

Если W в Вашем случае подставить не транспонированную, скорее всего получите то, что Вы получили.

Считайте все через сингулярное разложение, будет и понятнее, и быстрее, и точнее - так как при плохой обусловленности корреляционные матрицы возводят в квадрат обусловленность исходной задачи.
Go to the top of the page
 
+Quote Post
AMih
сообщение Jun 11 2014, 04:59
Сообщение #6





Группа: Участник
Сообщений: 11
Регистрация: 30-06-12
Пользователь №: 72 571



Бился за декорреляцию Х по отсчетам (т.е по столбцам)
Считал так: корр матрица K для Х (как и для Y) - как коэфф корреляции i и j столбцов. Собственные вектора Vi - по алгоритму Якоби (процедура из NumTollbox Borland, библиотека многократно проверена, ошибок там нет). Далее - просто матричное умножение. Собственно, все.
Собственные вектора в V лежат в строках. Сейчас просчитал коэффициенты корреляции матрицы V по i и j столбцам. Значения вне главной диагонали - в интервале 0.7-0.9. Этим и объясняется результат.
Надо, пожалуй, посмотреть коэфф корреляции Y по строкам. Там должно быть все по правилам.
Тем не менее, декорреляции Х по отсчетам выборок (т.е. по столбцам), видимо, так не достичь
Попробую SVD.
Кстати, наудачу, может кто-нибудь подкинет ссылку на работающую процедуру SVD (хочется для Delphi). Самому писать лениво.
Go to the top of the page
 
+Quote Post
AMih
сообщение Jun 11 2014, 06:19
Сообщение #7





Группа: Участник
Сообщений: 11
Регистрация: 30-06-12
Пользователь №: 72 571



Цитата(iiv @ Jun 11 2014, 11:57) *
Как-то у Вас все запутанно, давайте вместе по шагам проверим:
Исходня матрица Х, для нее сингулярное разложение Х = UZW^T, U, W - унитарные, Z - квадратная диагональная
Корреляционная матрица К = X^T X = WZU^T U ZW^T = WZ ZW^T, то есть Ваши собственные векторы - это есть правые сингулярные векторы W от исходной матрицы Х.
Если же вычислить Вашу Y = ХV , то она получается в виде: Y = UZW^T W = UZ . Для нее корреляционная матрица ZU^TUZ = Z^2 - диагональна, и должна совпадать с собственными значениями исходной матрицы.

Если W в Вашем случае подставить не транспонированную, скорее всего получите то, что Вы получили.

Считайте все через сингулярное разложение, будет и понятнее, и быстрее, и точнее - так как при плохой обусловленности корреляционные матрицы возводят в квадрат обусловленность исходной задачи.

Будьте добры, поясните: ZU^TUZ = Z^2 здесь Z^2 есть квадрат Z? Во всех остальных случаях ^ это транспонирование?
Go to the top of the page
 
+Quote Post
iiv
сообщение Jun 11 2014, 06:29
Сообщение #8


вопрошающий
*****

Группа: Свой
Сообщений: 1 726
Регистрация: 24-01-11
Пользователь №: 62 436



Цитата(AMih @ Jun 11 2014, 15:29) *
Будьте добры, поясните: ZU^TUZ = Z^2 здесь Z^2 есть квадрат Z? Во всех остальных случаях ^ это транспонирование?

да, именно, я использовал принятые в ЛаТеХе и Википедии обозначения.

Цитата(AMih @ Jun 11 2014, 14:09) *
Попробую SVD.
Кстати, наудачу, может кто-нибудь подкинет ссылку на работающую процедуру SVD (хочется для Delphi). Самому писать лениво.

Есть такая библиотека ACML, распространяется с сайта АМДшника бесплатно. В Дельфи сто процентов можно ее подцепить, я видел, как однажды это делали, но сам не подскажу, так как с Дельфи не имею дела. В этой библиотеке есть функции dgesvd и dgesdd, которые и вычисляют сингулярные разложения: dgesvd - чуть по-проще, но помедленнее, dgesdd - чуть по-сложнее, но побыстрее. Если нужна одинарная точность или комплексные числа, заменяйте первую букву этих подпрограмм на c, z или s. Документацию к параметрам функций можно найти гуглом на ее название + слово LAPACK. Не пугайтесь фортрановских ссылок, в ACML она из С вызывается и в Дельфи подключается.
Go to the top of the page
 
+Quote Post
AMih
сообщение Jun 11 2014, 07:06
Сообщение #9





Группа: Участник
Сообщений: 11
Регистрация: 30-06-12
Пользователь №: 72 571



Цитата(iiv @ Jun 11 2014, 14:39) *
да, именно, я использовал принятые в ЛаТеХе и Википедии обозначения.


Есть такая библиотека ACML, распространяется с сайта АМДшника бесплатно. В Дельфи сто процентов можно ее подцепить, я видел, как однажды это делали, но сам не подскажу, так как с Дельфи не имею дела. В этой библиотеке есть функции dgesvd и dgesdd, которые и вычисляют сингулярные разложения: dgesvd - чуть по-проще, но помедленнее, dgesdd - чуть по-сложнее, но побыстрее. Если нужна одинарная точность или комплексные числа, заменяйте первую букву этих подпрограмм на c, z или s. Документацию к параметрам функций можно найти гуглом на ее название + слово LAPACK. Не пугайтесь фортрановских ссылок, в ACML она из С вызывается и в Дельфи подключается.

Понял, спасибо. C ACML не работал еще.
Go to the top of the page
 
+Quote Post
KalashKS
сообщение Jun 11 2014, 07:16
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 236
Регистрация: 7-02-11
Пользователь №: 62 755



Цитата(AMih @ Jun 11 2014, 15:16) *
Понял, спасибо. C ACML не работал еще.

Если знакомы с матлабом, рекомендую сначала в нем разобраться с задачей. Сравнительно быстро получите программу в несколько строк и посмотрите, что, как и на что умножать надо. Потом перенесете в дельфи.
Go to the top of the page
 
+Quote Post
AMih
сообщение Jun 11 2014, 07:59
Сообщение #11





Группа: Участник
Сообщений: 11
Регистрация: 30-06-12
Пользователь №: 72 571



Цитата(KalashKS @ Jun 11 2014, 15:26) *
Если знакомы с матлабом, рекомендую сначала в нем разобраться с задачей. Сравнительно быстро получите программу в несколько строк и посмотрите, что, как и на что умножать надо. Потом перенесете в дельфи.

Да я, собственно, так QR преобразование обкатывал. И из MatLab можно таскать функции в С-коде сразу в Delphi. Только сам пока не пробовал - QR, оказалось, проще из обкатанного в MatLab варианта перенести в дельфи. в MatLab, кстати, есть и QR и SVD, так что - только сесть и сделать.

Сообщение отредактировал AMih - Jun 11 2014, 07:59
Go to the top of the page
 
+Quote Post
AMih
сообщение Jun 19 2014, 07:51
Сообщение #12





Группа: Участник
Сообщений: 11
Регистрация: 30-06-12
Пользователь №: 72 571



Народ, в дополнение о библиотеках SVD. ASML у меня не пошла -на сайте нет 32-bit Window версии, есть только 32-bit Linux и 64-bit Window. Нашел библиотеку AlgLib под Pascal и Delphi. Попробовал - работает. Лежит здесь http://alglib.sources.ru/download.php

Сообщение отредактировал AMih - Jun 19 2014, 08:02
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th June 2025 - 15:36
Рейтинг@Mail.ru


Страница сгенерированна за 0.01457 секунд с 7
ELECTRONIX ©2004-2016