MATLAB 基于Gram-Schmidt的QR分解

程序:

%% 基于Gram-Schmidt的QR分解
function [Q,R] = myself_qr(A)  
[m, n] = size(A);
if rank(A)~=n
   error('该矩阵无法进行进行基于Gram-Schmidt的QR分解!'); %检测参数异常,停止程序
end
Q = zeros( m, n );
R = zeros( n, n );
R(1,1)= norm( A( :, 1) );
Q(:, 1) = A( :, 1)/R( 1, 1 );
 for k = 2: n
     for j = 1: k - 1
         R( j, k ) = Q( :, j )' * A( :, k);
     end
     q = zeros( m, 1 );    
     for j = 1: k - 1
         q = Q( :, j) * R( j, k ) + q;
     end   
     R( k, k ) = norm( A( :, k ) - q );
     Q( :, k ) = ( A( :, k) - q ) / R( k, k );
 end

测试程序:

clc;
clear;
A=rand(4,3);
[Q R]=qr(A);
[Q1 R1]=myselfqr(A);
fprintf('qr函数QR结果:\n');
Q*R-A
fprintf('myselfqr函数QR结果:\n');
Q1*R1-A

结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ONERYJHHH/article/details/118730761