交换矩阵中的行以确保每个对角线值非零?

时间:2014-03-05 01:03:17

标签: algorithm matlab sorting

我有一个12x12矩阵,对角线值从非零变为零,我想知道是否有算法交换矩阵中的所有行以确保没有非零值。 我的矩阵C,在C(i,i)处不得有任何非零值。想法?

实施例: 我有一个5x5矩阵

3 4 5 0 6
1 0 4 3 0
0 5 1 0 3
0 1 0 2 0 
2 0 5 0 0

如何制作,以便没有非零对角元素?

1 个答案:

答案 0 :(得分:2)

  1. 构建二分图。
    • 在左侧创建一组节点,每个行索引一个。
    • 在右侧创建一组节点,每个列索引一个。
  2. 对于矩阵的每个元素A(i,j):
    • 如果A(i,j)为零,则在第i行的节点和第j列的节点之间添加边。
  3. 在二分图中找到完美匹配。匹配中的n个边将告诉您如何置换行。匹配中的Edge(i,j)表示第i行应该成为第j行。
  4. 请在此处查看完美匹配算法:http://en.wikipedia.org/wiki/Bipartite_matching#In_unweighted_bipartite_graphs