编辑:
谢谢@yoda 和@morispaa。你是对的,@morispaa 的解决方案有效,即我对转换系数的处理,它基于对Z跨越的空间的假设,以及Z向量的顺序和“方向”,如果我更新Q的列的符号,使得R的对角线具有正元素。
有关我正在进行的转换的更多详细信息,您可以阅读此内容;下面的Z = 采样的 Zernike 多项式,众所周知,它在离散情况(我们的情况)上既不正交也不完整。
关于@morispaa 提出的解决方案为何有效的直觉。我很想听听您对此的意见:
我的直觉是,以某种方式在R中强制执行真正的非负对角线会呈现一个基Q ,它与Z中的向量更好地“对齐” (正如我之前所说,它是非单一的),因此下面的选项 1 和 2,即使它们代表不同的变换,输出系数也可能在相似的空间中。
更具体地说,我认为Z “几乎”是单一的,也许这会导致QR分解返回一个足够接近Z的基础?只有这样,我才能想象我对转换系数的处理(基于对Z中向量的具体情况的假设)在Q的对角线完全为正时起作用,但在它具有负条目时不起作用。你怎么看?
背景
我的机器上安装了 MATLAB R2011a和R2010b。
从R2010b到R2011a的更改之一会影响(请参阅此处qr()
有关此特定更改的发行说明)的实施。
我的项目中的一个重要部分qr()
用于估计直接和逆变换的正交基。我的代码将此转换应用于输入信号,处理转换后的系数并返回处理后的信号。换句话说,在R2011a中qr()
所做的更改使处理此变换的系数的块停止工作(逆变换不会返回已处理信号的预期逆变换)。
不知何故,现在返回的Qqr()
矩阵与旧版本不同,这会阻止对变换系数的处理正常工作。
第一个问题
鉴于上述情况,是否可以告诉R2011aqr()
从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使我的转换再次工作吗?