首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Givens旋转QR分解

Givens旋转QR分解
EN

Stack Overflow用户
提问于 2020-02-11 23:02:52
回答 1查看 1.3K关注 0票数 1

我试图创建一个函数来计算Givens旋转QR分解,遵循这个伪代码。

代码语言:javascript
运行
复制
function [Q,R] = givens(A)
[m,n] = size(A);
indexI = zeros(m,n);
indexJ = zeros(m,n);
C = zeros(m,n);
S = zeros(m,n);
for i = 1:n
    for j = i+1:m
        c = A(i,i)/((A(i,i))^2 + (A(j,i)^2))^0.5;
        s = A(j,i)/((A(i,i))^2 + (A(j,i)^2))^0.5;
        A(i,:) = c*A(i,:) + s*A(j,:);
        A(j,:) = -s*A(i,:) + c*A(j,:);
        indexI(j,i) = i;
        indexJ(j,i) = j;
        C(j,i) = c;
        S(j,i) = s;
    end
end
R = A;
Q = eye(m);
for i = 1:n
    for j= j+1:m
        Q(:,i) = c*Q(:,i) + s*Q(:,j);
        Q(:,j) = -s*Q(:,i) + c*Q(:,j);
    end
end

然而,我得到的R矩阵不是上三角矩阵。我似乎在这里找不到错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-22 16:21:54

幻灯片上有一些模糊之处。

Givens旋转实际上是一次将矩阵相乘到两行。

假设[ri;rj]是您的两行,而Q是相应的givens旋转矩阵。

更新是[ri; rj] = Q*[ri; rj],但在代码中,首先更新ri,然后使用更新的ri立即更新rj

代码语言:javascript
运行
复制
    A(i,:) = c*A(i,:) + s*A(j,:);
    A(j,:) = -s*A(i,:) + c*A(j,:);

以下是错误的修复:

代码语言:javascript
运行
复制
    tmp = c*A(i,:) + s*A(j,:);
    A(j,:) = -s*A(i,:) + c*A(j,:);
    A(i,:) = tmp;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60178673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档