Перевожу в MQL (попутно пытаясь оптимизировать) функцию LU декомпозиции матрицы и было бы замечательно, если бы кто-нибудь, располагающий работающим кодом с аналогичной своей функцией, попытался бы вставить вместо неё мою и сравнить результаты.
А в чем проблема то ? Просто перемножьте матрицы - нижнюю (Л) на верхнюю (У), результат вычтите из исходной - все, что отличается от нуля больше чем на величину допустимой погрешности - ошибки.
Кстати, разложение Холецкого имеет и еще более привлекательную форму - LDU. Здесь в нижне- и верхне- трейгольных матрицах на диагоналях стоят 1, а D - диагональная матрица. В численных методах это существенно позволяет экономить временные затраты.
Успехов.
А в чем проблема то ? Просто перемножьте матрицы - нижнюю (Л) на верхнюю (У), результат вычтите из исходной - все, что отличается от нуля больше чем на величину допустимой погрешности - ошибки.
Кстати, разложение Холецкого имеет и еще более привлекательную форму - LDU. Здесь в нижне- и верхне- трейгольных матрицах на диагоналях стоят 1, а D - диагональная матрица. В численных методах это существенно позволяет экономить временные затраты.
Прблемы нет, проверять я в любом случае буду. Но если найдётся более быстрая функция я предпочту использовать именно её :). Если конечно не удастся довести до нужных кондиций эту.
А разве разложение Холецкого не для частного случая симметричной матрицы?
Прблемы нет, проверять я в любом случае буду. Но если найдётся более быстрая функция я предпочту использовать именно её :). Если конечно не удастся довести до нужных кондиций эту.
А разве разложение Холецкого не для частного случая симметричной матрицы?
Для несимметричных, если не запамятовал, называется обобщенное разложение Холецкого или LU (LDU как вариант).
Для Симметричной LDL(T). Или LL(T). Где L(T) - L транспонировання. Там просто считается одна матрица - вторая будет точно такой же. Реализован у меня такой алгоритм для профильных симметричных матриц. Еще в 1991 году делал на С для метода конечных элементов. Надо порыться в архивах. Сам алгоритм, если не ошибаюсь, представляет из себя прямой ход по Гауссу.
Успехов.
Для несимметричных, если не запамятовал, называется обобщенное разложение Холецкого или LU (LDU как вариант).
Для Симметричной LDL(T). Или LL(T). Где L(T) - L транспонировання. Там просто считается одна матрица - вторая будет точно такой же. Реализован у меня такой алгоритм для профильных симметричных матриц. Еще в 1991 году делал на С для метода конечных элементов. Надо порыться в архивах. Сам алгоритм, если не ошибаюсь, представляет из себя прямой ход по Гауссу.
Успехов.
Сейчас у меня будут несимметрчные матрицы. Хотя идея где будут симметричные тоже есть, но она пока стоит в очереди и непонятно, когда она(очередь) подойдёт :). В принципе все нужные функции на Си у меня есть.
Кстати, Ваш прежний почтовый адрес (тот, что указывался в индикаторах) действителен? У меня есть один мелкий вопрос.
Для проверки сделал на базе функции индикатор полиномиальной регрессии. Для сравнения использовал ang PR (Din)-v1. Для степеней, доступных ang PR (Din)-v1 результаты практически совпадают. Иногда наблюдаются пренебрежимые различия на хвостах, но это, думаю, объясяется деталями реализации. "Поднимаемая" степень зависит от размера выборки, для выборки в 720 точек максимальная степень - 53. Собственно для полинома это избыточно, но даёт представление о размерах систем, с которыми функция может работать.
Точное сравнение скоростей собственно процедур решения системы из-ра различий в алгоритмах было бы достаточно трудоёмким, грубая оценка показывает примерное равенство. Но, надо сказать, для регрессии матрица симметрична и для ускорения как раз можно пытаться использовать разложение Холецкого.
Таким образом считаю отладку функции законченной.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Перевожу в MQL (попутно пытаясь оптимизировать) функцию LU декомпозиции матрицы и было бы замечательно, если бы кто-нибудь, располагающий работающим кодом с аналогичной своей функцией, попытался бы вставить вместо неё мою и сравнить результаты. Приз - моя функция(которая конечно моя только в части МКуЭЛизации) может оказаться быстрее и она не портит входную матрицу. То есть ориентирована на использование в индикаторах (можно на новом тике вычислять элементы А рекуррентно).
Описание:
A and n are input. LU is output, arranged as in equation
; indx[0..n-1] is an output vector that records the row permutation effected by the partial pivoting; d is output as +-1 depending on whether the number of row interchanges was even or odd, respectively.
A [0 ... nxn-1] - одномерный массив, содержит последовательно расположенные строки входной матрицы. LU - аналогичный выходной. То есть это квазидвумерные массивы.
Прежде чем использовать функцию, небходимо в подходящих местах сделать
И, наконец, сама функция