РЕДАКТИРОВАТЬ:
Спасибо @yoda и @morispaa.Вы оба правы, и решение @ morispaa работает, т.е. моя обработка преобразованных коэффициентов основана на предположениях относительно пространства, охватываемого Z , а также порядка и "Ориентация " векторов Z дает правильный результат, если я обновлю знак столбцов Q , чтобы диагональ R была положительнойэлементы.
Для получения более подробной информации о преобразовании, над которым я работаю, вы можете прочитать this ; 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 ?