【问题标题】:MATLAB: Running a function from a previous versionMATLAB:运行以前版本的函数
【发布时间】:2011-08-17 04:23:28
【问题描述】:

编辑:

谢谢@yoda 和@morispaa。你是对的,@morispaa 的解决方案有效,即我对变换系数的处理,这是基于对 Z 跨越的空间以及 order 的假设Z 向量的 >“orientation”,如果我更新 Q 列的符号以使 R 的对角线呈现正确的结果 有积极的元素。

有关我正在进行的转换的更多详细信息,您可以阅读this;下面的 Z = 采样的 Zernike 多项式,以 在离散情况(我们的情况)上不正交也不完整而著称。

对@morispaa 提出的解决方案为何有效的直觉。我很想听听您对此的意见:

我的直觉是,在 R 中以某种方式强制执行 真正的非负对角线 会呈现一个基础 Q,即“对齐" 更好地使用 Z 中的向量(正如我之前所说,它是非单一的),因此下面的选项 1 和 2,即使它们代表不同的变换,输出系数也可能在相似的空间。

更具体地说,我认为 Z “几乎”是单一的,也许这会导致 QR 分解返回一个足够接近 Z?只有这样我才能想象当 Q 的对角线为完全正面,但当它有负面条目时则不然。你怎么看?

背景

我的机器上同时安装了 MATLAB R2011aR2010b

R2010bR2011a 的更改之一会影响 qr() 的实施(请参阅有关此特定更改 here 的发行说明)。

我的一个项目的一个重要部分使用qr() 来估计直接和逆变换的正交基。我的代码将此转换应用于输入信号,处理转换后的系数并返回处理后的信号。换句话说,R2011a 中对qr() 所做的更改使处理此变换系数的模块停止工作(逆变换不会返回已处理信号的预期逆变换)。

不知何故,现在从qr() 返回的 Q 矩阵与旧版本的不同之处在于,它会阻止处理转换后的系数正常工作。

第一个问题

根据上述情况,是否可以告诉 R2011a 使用 R2010b 中的qr()

第二个问题

我使用 QQ' 来计算直接和逆变换;你可以看到更多细节here。更具体地说,我使用 y = Q * xx = 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() 的输出有何不同?是彻底坏了吗?还是仅仅是可能归因于标准浮点问题的微小数值差异?是后者,如果您的整个应用程序出现故障,则可能表明您的算法在数值上不稳定。 (我很感激这不是对您的问题很有帮助的回答......)
  • 谢谢@Oli。我非常确信这不是数值稳定性问题,更多的是与新旧版本返回的 Q 矩阵之间的差异有关的问题(我认为QR 分解不是唯一的) .新的qr() 可能是正确的,但是新的分解不满足旧分解的相同属性。我认为问题出在 R 矩阵的对角线的非负性,这是在以前版本中得到保证的属性,但在新版本中没有保证,并且在某种程度上影响了矩阵 Q也是。

标签: matlab least-squares factorization


【解决方案1】:

A=QRQR 分解中,R 是一个上三角矩阵。如果您的矩阵A可逆,那么如果您施加R 具有实数、非负对角线的条件,则分解是唯一。如果放宽此条件,您将得到一个正交矩阵Q 和一个上三角矩阵R,但它们不必是唯一的。

分解的非唯一性经常让人们感到困惑,我想我会为您指出我最喜欢的例子之一:the eigenvectors of an identity matrix

从您提供的链接:

兼容性注意事项: 由于 QR 分解不是唯一的,这些 不同的结果仍然是正确的。 确保您的代码不依赖 关于元素的值 因子 Q 和 R。

这是您的代码发生的情况吗?是否依赖QR的形式?

作为一个快速修复,你可以从R2010b 试试这个:

which qr.m

在我的机器上,我得到/Applications/MATLAB_R2010b.app/toolbox/matlab/matfun/qr.m。您可以尝试复制此函数并将其放入您的R2011 路径,然后将其重命名为qr2010 或其他名称吗?然后,每当您需要旧函数时,您可以从最新版本的 MATLAB 中调用 qr2010,它应该使用旧算法。我还没有测试过,所以让我知道它是否有效。

编辑

我在我的机器上安装了R2011a 并签出了qr。就像我说的,不强制正对角线会导致元素符号的不同组合,从而使解决方案不唯一。但是,正向和逆变换应该可以工作,并且在我的机器上也可以。

A=magic(5);x=(1:5)';   %'
[Q R]=qr(A);
y=Q'*x;                %'
z=Q*y;

z'

ans =

    1.0000    2.0000    3.0000    4.0000    5.0000

我在R2011aR2010b 中得到相同的结果。所以,我的猜测是,你以某种方式依赖对角线为正,这可能不是一件好事。

但是,如果您想保留您的代码,而是让新的qr 返回与R2010b 中相同的矩阵,那么您应该使用 morispaa 的建议。

编辑 2

morispaa 解决方案的解释:由于在2010b 中,R 的对角线是正的,以在2011a 中获得相同的行为,您需要做的就是获取对角线的符号并将其传播到整个 @ 987654346@矩阵。对于我上面的例子,R

R =

  -32.4808  -26.6311  -21.3973  -23.7063  -25.8615
         0   19.8943   12.3234    1.9439    4.0856
         0         0  -24.3985  -11.6316   -3.7415
         0         0         0  -20.0982   -9.9739
         0         0         0         0  -16.0005

D

D =

    -1     0     0     0     0
     0     1     0     0     0
     0     0    -1     0     0
     0     0     0    -1     0
     0     0     0     0    -1

R 的对角线自动变为正数(就像-1*-1=1 一样简单)。同样,您在Q 矩阵中传播符号。请注意,D*D 只是对角矩阵元素的平方,等于单位矩阵I。因此,我们得到

 Q2*R2=Q*D*D*R
      =Q*I*R
      =Q*R
      =A

【讨论】:

  • 谢谢@yoda,你是对的。这非常有帮助,@morispaa 的解决方案有效,尽管我不知道为什么。我更新了问题以反映这一切!
  • 谢谢@yoda,如果问的不是太多,我很想知道你对我在帖子的编辑部分给出的关于为什么要处理转换系数的直觉的看法当D只有正面条目时有效,但当它包含负面条目时
  • @AmV:我也对 Zernike 多项式一无所知。但是,我认为它与Q 的对角线无关。您会发现即使在R2010b 中,它的对角线也可能有负条目(可能不是您的示例)。约束仅在R 的对角线上,而不是Q
【解决方案2】:

我认为(目前手头没有 MATLAB)您可以恢复 2010b 版本的行为,如下所示:

[Q R] = qr(Z);
D = diag(sign(diag(R)));
R2 = D*R;
Q2 = Q*D;

现在R2 将是上三角,有正对角线,Q2 保持正交(或单一)和Q2*R2 = Z。复杂情况下使用

R2 = D'*R;
Q2 = Q*D;

【讨论】:

  • 谢谢@morispaa。这非常有帮助,并回答了我的第二个问题!我仍然不明白为什么,我更新了顶部 EDIT 部分中的问题以反映这一点。
  • 我对 Zernike 多项式一无所知,但可能是使用不会在 R 中强制非负对角线的 QR 分解会以某种方式混淆 Q 的行向量跨度的正交基的手性?只是猜测......
猜你喜欢
  • 1970-01-01
  • 2013-02-09
  • 1970-01-01
  • 1970-01-01
  • 2017-02-13
  • 2015-09-21
  • 2012-02-07
  • 2011-04-10
  • 2017-07-30
相关资源
最近更新 更多