声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2227|回复: 1

[综合讨论] 获取方阵的子矩阵并求行列式值最大的子矩阵

[复制链接]
发表于 2011-10-3 10:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
n阶矩阵A,秩为m=rank(A), 怎样获取A的所有m阶子矩阵B{},并求det(B),最后再如何获取det(B)最大值所对应的矩阵??
回复
分享到:

使用道具 举报

 楼主| 发表于 2011-10-20 21:20 | 显示全部楼层
回复 1 # sunminmin 的帖子

下面是自己写的程序,能达到要求。
请路过的看看,指点指点,让程序的编写更加规范些。
  1. function [  ] = mychildmatrix( matrix )
  2. %MYCHILDMATRIX Summary of this function goes here
  3. %   Detailed explanation goes here
  4. disp('初始矩阵的维数:')
  5. [ R, C ] = size( matrix )
  6. disp('初始矩阵的秩:')
  7. ofrank = rank( matrix )
  8. %childmatrix = nchoosek( R, ofrank) * nchoosek( R, ofrank);
  9. BMAT = cell( 280, 290 );
  10. CMAT = cell( 280, 290 );
  11. DMAT = cell( 280, 290 );
  12. CMAT{ 1, 1 } = matrix;
  13. UnlikeMatrixOfTotal = 0;

  14. for k = 1 : R - ofrank  
  15.      BMAT = CMAT;
  16.      p = 1;
  17.      q = 1;
  18.      for j = 1 : 290
  19.          for i = 1 : 280
  20.              if BMAT{ i, j }
  21.                 midmat = BMAT{ i, j };
  22.                 sourcemat = midmat;
  23.                 [ midr, midc ] = size( BMAT{ i, j } );
  24.                  for m = 1 : midr
  25.                     for n = 1 : midc
  26.                         midmat( m, : ) = [];
  27.                         midval = midmat;
  28.                         midval( :, n ) = [];
  29.                         CMAT{ p, q } = midval;
  30.                         for y = 1 : q - 1
  31.                             for x = 1 : 280
  32.                                 if isequal( CMAT{ x, y }, CMAT{ p, q })
  33.                                     CMAT{ p, q } = [];  
  34.                                 end
  35.                             end
  36.                         end
  37.                         for x = 1 : p - 1
  38.                             if isequal( CMAT{ x, q }, CMAT{ p, q })
  39.                                  CMAT{ p, q } = [];
  40.                             end
  41.                         end
  42.                                 
  43.                        if CMAT{ p, q }
  44.                             p = p + 1;
  45.                             if p > 280
  46.                                 p = 1;
  47.                                 q = q + 1;
  48.                             end
  49.                             midmat = sourcemat;
  50.                        else midmat = sourcemat;
  51.                        end
  52.                     end  
  53.                 end
  54.              end
  55.          end
  56.      end
  57. end

  58. %去掉CMAT中重复的元素,得到matrix的rank(matrix)阶子式,即为所求。
  59. %因为采用的递归删除矩阵行列求矩阵的子式的思想会产生重复的子矩阵。
  60. for j = 1 : 290
  61.     for i = 1 : 280
  62.         if size( CMAT{ i, j } )  == [ ofrank, ofrank ]
  63.             DMAT{ i, j } = CMAT{ i, j };
  64.         end
  65.     end
  66. end

  67. disp('初始矩阵的子矩阵为:')
  68. for j = 1 : 290
  69.     for i = 1 : 280
  70.         if DMAT{ i, j }
  71.             disp( DMAT{ i, j })
  72.             UnlikeMatrixOfTotal = UnlikeMatrixOfTotal + 1;
  73.         else break;
  74.         end
  75.     end
  76. end

  77. maxdet = -inf;
  78. mindet = inf;

  79. for j = 1 : 290
  80.     for i = 1 : 280
  81.         needdet = det( CMAT{ i, j } );
  82.         if needdet >= maxdet
  83.             maxdet = needdet;
  84.             maxmatrix = CMAT{ i, j };
  85.         else mindet = needdet;
  86.         end
  87.     end  
  88. end   
  89. disp('初始矩阵的rank(A)阶子式的个数:')
  90. ChildMatrixOfNum = nchoosek( R, ofrank) * nchoosek( R, ofrank)
  91. disp('初始矩阵的不相同的rank(A)阶子式的个数:')
  92. UnlikeMatrixOfNum = UnlikeMatrixOfTotal   
  93. disp('初始矩阵的rank(A)阶子式的行列式的最大值:')
  94. MaxOfDet = maxdet
  95. disp('初始矩阵的rank(A)阶子式的行列式的最小值:')
  96. MinOfDet = mindet
  97. disp('初始矩阵的rank(A)阶子式的行列式的最大值对应的子式:')
  98. MaxOfMatrix = maxmatrix

  99. celldisp(DMAT);

  100. end

复制代码

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-4-30 01:13 , Processed in 0.187891 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表