РЕДАКТИРОВАТЬ:
Спасибо @yoda и @morispaa. Вы оба правы, и решение @morispaa работает, т. е. моя обработка преобразованных коэффициентов, основанная на предположениях о пространстве, охватываемом Z, а также о порядке и >ориентация векторов Z, отображает правильный результат, если я обновляю знак столбцов Q так, чтобы диагональ R strong> имеет положительные элементы.
Для получения более подробной информации о преобразовании, над которым я работаю, вы можете прочитать это а>; Z ниже = выборочные полиномы Цернике, которые, как известно, не не являются ортогональными и полными в дискретном случае (наш случай).
Интуиция о том, почему решение, предложенное @morispaa, работает. Я хотел бы услышать ваше мнение об этом:
Моя интуиция подсказывает, что каким-то образом принудительное применение реальных неотрицательных диагоналей в R создает базу Q, которая выровнена лучше с векторов в Z (которое, как я сказал ранее, не является унитарным), и, следовательно, варианты 1 и 2 ниже, даже если они представляют разные преобразования, выводят коэффициенты, вероятно, в аналогичном пространстве.
В частности, я думаю, что Z почти унитарно, и, возможно, это приводит к тому, что разложение QR возвращает базу, достаточно близкую к Z? Только тогда я могу представить, что моя обработка преобразованных коэффициентов, основанная на предположениях о особенности векторов в Z работают, когда диагональ Q полностью положительна, но не когда в ней есть отрицательные элементы. Что вы думаете?
Задний план
На моем компьютере установлены оба пакета MATLAB R2011a и R2010b.
Одно из изменений с R2010b на R2011a влияет на реализацию qr()
(см. примечания к выпуску об этом конкретном изменении здесь).
Важная часть одного из моих проектов использует qr()
для оценки ортогональной основы для прямого и обратного преобразования. Мой код применяет это преобразование к входному сигналу, обрабатывает преобразованные коэффициенты и возвращает обратно обработанный сигнал. Другими словами, изменения, внесенные в R2011a в qr()
, привели к тому, что блок, обрабатывающий коэффициенты этого преобразования, перестал работать (обратное преобразование не возвращает ожидаемое обратное преобразование обработанного сигнала).
Каким-то образом матрица Q, которая теперь возвращается из qr()
, отличается от более старой версии таким образом, что обработка преобразованных коэффициентов не работает должным образом.
Первый вопрос
В свете вышеизложенного можно ли указать R2011a использовать qr()
из R2010b?
Второй вопрос
Я использую Q и Q' для вычисления прямого и обратного преобразования; вы можете увидеть более подробную информацию здесь< /а>. В частности, я использую y = Q * x и x = Q' * y для вычисления прямого и обратного преобразования соответственно. Другой способ вычислить прямое преобразование — использовать метод наименьших квадратов. Другими словами, у нас есть два варианта:
Вариант 1. Прямое и обратное преобразование с использованием QR-факторизации:
% Direct:
[Q R] = qr(Z);
y = Q' * x;
% Some processing of the y coefficients
% ...
% Inverse:
x = Q*y;
Вариант 2. Прямое и обратное преобразование по методу наименьших квадратов
% Direct:
y = Z \ x;
% Some processing of the y coefficients
% ...
% Inverse:
x = Z*y;
где наши переменные:
% x = Input vector
% y = Direct transformation of x
% Z = Matrix with sampled basis
В R2011a описанный выше вариант 1 перестал работать (он работает в R2010b). Мне очень нравится идея использования qr()
для прямого и обратного преобразования (это намного быстрее, чем вычисление методом наименьших квадратов для каждого нового вектора). Если бы я хотел использовать новый qr()
для своего проекта, кто-нибудь знает, как заставить мое преобразование снова работать с новым Q?
qr()
? Он полностью сломан? Или это просто крошечные числовые несоответствия, которые можно отнести к стандартным проблемам с плавающей запятой? Это последнее, если все ваше приложение ломается, это, вероятно, признак того, что ваш алгоритм не является численно стабильным. (Я понимаю, что это не очень полезный ответ на ваш вопрос...) - person Oliver Charlesworth   schedule 02.05.2011QR
не уникальна). Новаяqr()
, вероятно, верна, но новая факторизация не удовлетворяет тем же свойствам, что и старая. Я думаю, проблема связана с неотрицательностью диагонали матрицы R, свойством, которое гарантировалось в предыдущей версии, но не в новой, и которое каким-то образом влияет на матрицу Q тоже. - person Amelio Vazquez-Reina   schedule 02.05.2011