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

     

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,:);

​​​​​​​

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值