matlab 矩阵满秩分解

目录

1定理

2求解过程

2.1求解B

2.2求解C

3 matlab程序


1定理

设 A\epsilon C_{r}^{m*n},则存在B\epsilon C_{r}^{m*r}C\epsilon C_{r}^{r*n} 满足

                                       A = BC

2求解过程

2.1求解B

       对A仅做初等行变换即可得到简化阶梯形矩阵J,其秩为r,假设主元所在的第i_{1}列,第i_{2}...第i_{r}列(r个线性无关的列向量,组成一个对角矩阵或r个基向量组成一个对角矩阵),然后选取矩阵A中的第i_{1}列,第i_{2}...第i_{r}列组成B。注意此时(r个线性无关的列向量,组成一个对角矩阵或r个基向量组成一个对角矩阵)的对角线元素都应该是1。如果不为1,这应该对乘上相应的因子使其为1,然后不同的列有不同的变换因子,对应的列变换因子乘上B对应的列。

    列如下图的B是阶梯简化后的矩阵。取第1,第2列作为基向量矩阵,但是对角元素不为1 ,B的第1列要乘上-1,第2列要乘上0.5才是元素为1的基向量。因此F = (A的第1列*(-1),A的第二列*0.5)组成标题中的B

     matlab 矩阵满秩分解_第1张图片

2.2求解C

  将J的全为零的行去掉,剩下的行向量组成矩阵C

3 matlab程序

   因为rref函数简化后的 基向量的元素都为1,因此程序里面不需要额外乘上变换因子。

function [B,C] = FRdec(A)
%  B = rref(A);
si = size(A);
k = rank(A);
B = zeros(si(1),k);
[C,D]= rref(A);
% D = zeros(1,k);%记录k个线性无关组在C中所在的列
% for i=1:k
%     for j=1:si(2)
%         if C(i,j) == norm(C(:,j));
%            D(i) =  j;
%            continue;
%         end
%     end
% end
for i=1:k
    B(:,i) = A(:,D(i)); %提取无关组对应的A的列向量
end
C = C(1:k,:);

​​​​​​​

你可能感兴趣的:(矩阵分析,matlab,矩阵分解,满秩分解)