gpt4 book ai didi

matlab - MATLAB:从先前版本运行功能

转载 作者:太空宇宙 更新时间:2023-11-03 20:01:05 24 4
gpt4 key购买 nike

编辑:
谢谢你@yoda和@morispa你是对的,@morispa的解是对的,也就是说,我对转换系数的处理,基于关于Z所跨越的空间的假设,以及Z向量的顺序和“方向”,如果我更新Q列的符号,使R的对角线具有正元素,就会得到正确的结果。
有关我正在处理的变换的更多详细信息,您可以阅读this;Z below=sampled Zernike多项式,这些多项式在离散情况(我们的情况)中既不是正交的也不是完全的。
关于@morispa提出的解决方案为什么有效的直觉我很想听听你的意见:
我的直觉是,以某种方式强制R中的实非负对角线使得基Q与Z中的向量更好地“对齐”(正如我前面所说,Z是非酉的),因此下面的选项1和2,即使它们表示不同的变换,输出系数可能在相似的空间中。
更具体地说,我认为Z是“几乎”酉的,这可能会导致QR分解返回一个足够接近Z的基只有到那时,我才能想象,我对转换系数的处理,基于Z中向量的specifics的假设,在Q的对角线完全为正时工作,而不是在Q的对角线为负时工作你怎么认为?
背景
我的机器上同时安装了MATLAB R2011a和R2010b。
从R2010b到R2011a的其中一个更改会影响qr()的实现(请参阅有关此特定更改here的发行说明)。
我的一个项目的一个重要部分是使用qr()来估计正、反变换的正交基我的代码将此转换应用于输入信号,处理转换后的系数并返回处理后的信号换言之,在R2011a中所做的改变使得处理该变换的系数的块停止工作(逆变换不返回所处理信号的预期逆变换)。
不知何故,现在从qr()返回的Q矩阵与旧版本不同,其方式阻止了转换系数的处理正常工作。
第一个问题
鉴于上述情况,是否可以告知R2011a使用R2010b中的qr()
第二个问题
我使用Q和Q'来计算正变换和反变换;您可以看到更多的细节here更具体地说,我使用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分解中,A=QR是一个上三角矩阵如果矩阵R是可逆的,那么如果你施加A有实的非负对角线的条件,那么因子分解是唯一的如果放松这个条件,就会得到一个正交矩阵R和一个上三角矩阵Q,但它们不必是唯一的。
分解的不唯一性常常会让人困惑,我想我会给你举一个我最喜欢的例子:the eigenvectors of an identity matrix
从您提供的链接:
兼容性注意事项:
自从
QR分解不是唯一的,这些
不同的结果仍然是正确的。
确保您的代码不依赖于
关于元素的值
因子Q和R。
这就是你的代码吗是否取决于RQ的形式?
作为一个快速的解决方案,您可以从R中尝试一下吗:
R2010b
在我的机器上,我得到which qr.m你能试着复制这个函数并把它放在/Applications/MATLAB_R2010b.app/toolbox/matlab/matfun/qr.m路径中,然后把它重命名为R2011或其他什么吗然后,只要需要旧函数,就可以从最新版本的MATLAB调用qr2010,它应该使用旧算法我还没有测试过,所以告诉我是否有效。
编辑
我在我的机器上安装了qr2010,并签出了R2011a如我所说,不强制使用正对角线将导致元素符号的不同组合,从而使解决方案不唯一但是,正向和反向转换应该是有效的,在我的机器上也是如此。

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

我在 qrR2011a中都得到了相同的结果所以,我的猜测是你在某种程度上依赖于对角线是正的,这可能不是一件好事。
但是如果你想保留你的代码,但是让新的 R2010b返回与 qr中相同的矩阵,那么你应该使用morispa的建议。
编辑2
Morispa解的解释:由于在 R2010b中, 2010b的对角线是正的,所以要在 R中得到相同的行为,只需要得到对角线的符号并在 2011a矩阵中传播它在上面的例子中, 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

R
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

D的对角线会自动变为正(非常简单)类似地,在 R矩阵中传播符号请注意, -1*-1=1只是对角矩阵元素的平方,等于恒等矩阵因此,我们得到
 Q2*R2=Q*D*D*R
=Q*I*R
=Q*R
=A

关于matlab - MATLAB:从先前版本运行功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5860902/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com