Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何推广Householder QR分解的MATLAB代码_Algorithm_Matlab_Matrix Factorization - Fatal编程技术网

Algorithm 如何推广Householder QR分解的MATLAB代码

Algorithm 如何推广Householder QR分解的MATLAB代码,algorithm,matlab,matrix-factorization,Algorithm,Matlab,Matrix Factorization,我请求帮助概括Householder QR分解第一步的代码。我已经做了以下工作: A=[60,41,-88;42,60,51;0,-28,56;126,82,-71]; disp(A) m=length(A(:,1)); n=length(A(1,:)); I=eye(m); e1=I(:,1)'; %We compute the first step of the method. beta=-sqrt(A(:,1)'*A(:,1)); y=A(:,1)'-beta.*

我请求帮助概括Householder QR分解第一步的代码。我已经做了以下工作:

A=[60,41,-88;42,60,51;0,-28,56;126,82,-71];
disp(A)
m=length(A(:,1));
n=length(A(1,:));
I=eye(m);
e1=I(:,1)';

    %We compute the first step of the method.
    beta=-sqrt(A(:,1)'*A(:,1));
    y=A(:,1)'-beta.*e1;
    alpha=sqrt(2)/(sqrt(y*y'));
    v=alpha*y;
    U=I-(v'*v);
    disp(U)
    R1=U*A;
    disp(R1)
我尝试了以下步骤来完成其余步骤:

for k=2:n
  ek=I(:,k)';
 for j=0:k
  beta=-sqrt(R1(k+j,k)'*R1(k+j,k));
   end
   disp(beta)
end

%For the standard basis just define A=eye(N), so the vectors are
%A(:,i).
但它不起作用,它给出了一个错误,说明如下:

A=[60,41,-88;42,60,51;0,-28,56;126,82,-71];
disp(A)
m=length(A(:,1));
n=length(A(1,:));
I=eye(m);
e1=I(:,1)';

    %We compute the first step of the method.
    beta=-sqrt(A(:,1)'*A(:,1));
    y=A(:,1)'-beta.*e1;
    alpha=sqrt(2)/(sqrt(y*y'));
    v=alpha*y;
    U=I-(v'*v);
    disp(U)
    R1=U*A;
    disp(R1)
试图访问R1(5,3);索引超出范围,因为 尺寸(R1)=[4,3]

住户工厂化错误(第33行) β=-sqrt(R1(k+j,k)'*R1(k+j,k))

因此,我一直在尝试寻找另一种方法来获得算法,但我不知道如何做到这一点,我读了Kincaid&Cheney第一版的《数值分析》一书以得到澄清,但读完后我感到更加困惑(我想执行书中的算法,因为这是我发现的最简单的算法,尽管它有点令人困惑)

有人能帮我以正确的方式执行这个算法吗

注:这本书可以找到,事实上在253页。所以我想把第一本书后面的部分的算法翻译成一个MATLAB代码(这就是我所说的泛化)这个算法的问题是,当你想计算第二步和前进时,你必须考虑前面的矩阵,然后你必须改变,例如,你的A(:,1)到[R1(2,2),R1(3,2),R1(4,2)]。然后用这个新向量计算第一步所做的一切,所以这个过程就是我不知道如何将它转换成MATLAB的过程。第一步很简单,其他步骤对我来说很困难


嗯,你可能应该研究一下你的
beta
参数是什么,以及它是如何定义的,因为你试图从R1的元素中构造它,而R1的元素并不存在……嗯,我已经从a的元素中构造了一个名为R1的矩阵,所以下一步是从之前的R中构造矩阵Rk,但这就是我要做的我不知道如何执行,因为算法说它像楼梯,对吧,所以我很清楚beta参数是什么,但我不知道如何对计算机说“好的,一旦你有了R1构造另一个beta等等”:)那么你的第二个for循环中肯定有一些简单的错误,你称之为R1(j+k,k)因为对于j=k=n,你得到的是R1(2n,n),这显然是超出范围的,就像matlab告诉你的那样。那么,我如何修复我的代码,使其具有所有的步骤呢?谢谢:)我很抱歉,但是你需要对你的算法应该做什么做更多的研究,理解它,把它写在纸上,然后再把它翻译成matlab代码。。祝你好运