MATLAB对于矩阵对角线置零、对角线置inf或NaN、对角线置任意数值的方法讨论

zhangziyou 2019-06-27

对于小白的我来说,经常不知道在MATLAB里面怎么吧矩阵对角线置零,哎,所以不得不记录一下。

1.首先生成一组测试矩阵

A=magic(5);

得到一个5*5的矩阵:

A =

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

2.对角线置零

A=A-diag(diag(A));

得到如下矩阵:

A =

     0    24     1     8    15
    23     0     7    14    16
     4     6     0    20    22
    10    12    19     0     3
    11    18    25     2     0

3.对角线置inf
对角线为正的inf

A=A+diag(inf+zeros(1,length(A)))
A =

   Inf    24     1     8    15
    23   Inf     7    14    16
     4     6   Inf    20    22
    10    12    19   Inf     3
    11    18    25     2   Inf

对角线为负的inf

A=A-diag(inf+zeros(1,length(A)))
A =

  -Inf    24     1     8    15
    23  -Inf     7    14    16
     4     6  -Inf    20    22
    10    12    19  -Inf     3
    11    18    25     2  -Inf

4.对角线置NaN

A=A+diag(NaN+zeros(1,length(A)))

或者是

A=A+diag(inf+zeros(1,length(A)))-diag(inf+zeros(1,length(A)))

都可以使得对角线为NaN

A =

   NaN    24     1     8    15
    23   NaN     7    14    16
     4     6   NaN    20    22
    10    12    19   NaN     3
    11    18    25     2   NaN

5.对角线为任意数值,这个目前好像只能是双循环解决了

即i=j的时候就是对角线,x是我们想要赋值的任意值

for i=1:length(A)
    for j=1:length(A)
        if i==j
            A=x;
        end
    end
end