Matlab 矩阵论 矩阵分解的计算实现(六)矩阵的正交三角分解

Matlab 矩阵论 矩阵分解的计算实现(六)矩阵的正交三角分解

本来matlab中自带了做正交三角分解的函数,[U,R]=qr(A),U R为分解结果。但是这样使用只会有结果没有中间过程,所以写了一个施密特正交化函数,可以显示中间做题的过程。
这个函数没法计算有复数的矩阵,如果计算复数直接调用qr()函数即可。

代码

%矩阵的正交三角分解(UR分解)
%获得的beta1 要检查可能不对
A=[1 2 0;1 0 -1; 0 1 -1];
disp("原始矩阵")
disp(sym(A));
%采用列正交化
U= schmidt(sym(A));
disp("施密特正交化得矩阵U")
disp(sym(U))
R = U^-1 *A;
disp("矩阵R = U^-1 *A")
disp(sym(R))
%如果矩阵带复数 就用下面方法计算
% [U,R]=qr(A);
% disp("矩阵U")
% disp(U);
% disp("矩阵R")
% disp(R);
% 以下是函数块
function answer=schmidt(matrixIn,transpose)
% 默认取矩阵列向量为待正交化向量, 
% 如 A=[1,-1,4;2,3,-1;-1,1,0]
% 则待正交化向量为 [-1,2,1], [-1,3,1], [4,-1,0]
% 函数调用方式为 schmidt(A)
if nargin>1
    % 如果要求取矩阵行向量为待正交化向量
    % 函数调用方式为 schmidt(A,1)
    % 但是注意: 得到的结果矩阵仍然是列向量为正交化之后的向量
    if transpose==1
       matrixIn=matrixIn';
    end
end
answer=zeros(size(matrixIn));
answer(:,1)=matrixIn(:,1);
disp("β1");
disp(sym(answer(:,1)))
if size(matrixIn,2)>1
    for column=1:size(matrixIn,2)
        %正交化
        for beta=1:column-1
            answer(:,column)=answer(:,column)-dot(matrixIn(:,column),answer(:,beta))/dot(answer(:,beta),answer(:,beta))*answer(:,beta);
        end
        answer(:,column)=answer(:,column)+matrixIn(:,column);
        if column>=2
            disp("β"+column);
            disp(sym(answer(:,column)));
        end
        
        %单位化
        answer(:,column)=answer(:,column)/sqrt(sum(answer(:,column).^2));
        disp("ε"+column);
        disp(sym(answer(:,column)))
    end
end
end

运行结果

在这里插入图片描述在这里插入图片描述

源码

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值