【问题标题】:Is there a function for checking whether a matrix is diagonally dominant (row dominance)是否有检查矩阵是否对角占优(行占优)的功能
【发布时间】:2013-05-13 18:22:19
【问题描述】:

如果矩阵在对角线上的值在绝对意义上大于该行中所有其他绝对值的总和,则矩阵为diagonally dominant(按行)。列也是如此,只是相反。

matlab 中是否有用于检查这个的函数? (我可以写一个简单的循环,但我正在尝试退出)

【问题讨论】:

  • 稍微更新了定义,使其更加准确。

标签: matlab


【解决方案1】:

为什么要循环?

您可以轻松地形成给定行中绝对值的总和。

sum(abs(A),2)

你能把它和每一行中的绝对对角元素进行比较吗?

abs(diag(A)) >= sum(abs(A),2)

当然,这是不正确的,因为对角线项不应包含在第一个总和中。无论如何,我们可以轻松修复问题。

(2*abs(diag(A))) >= sum(abs(A),2)

最后,我们需要这个测试的结果。以上测试每一行。如果该测试对所有行都为真,则矩阵对角占优。

all((2*abs(diag(A))) >= sum(abs(A),2))

【讨论】:

    【解决方案2】:

    没有我知道的功能。但是,您可以进行没有循环的简单测试。

    %# create an array
    array = magic(3);
    
    %# take the absolute of the array
    absArray = abs(array);
    
    %# To be diagonally dominant, the row and column sums have to be less
    %# than twice the diagonal
    rowSum = sum(absArray,1)';%#' (formatting comment)
    colSum = sum(absArray,2);
    dia    = diag(absArray);
    
    %# test
    isDiagonallyDominantByRow = all(rowSum <= 2 * dia); 
    isDiagonallyDominantByCol = all(colSum <= 2 * dia);
    isTotallyDominant = isDiagonallyDominantByRow && isDiagonallyDominantByCol;
    

    【讨论】:

    • 按照 wiki 的定义,您不应该在同一个测试中同时测试 rowSum 和 colSum。答案可以是 isDiagonallyDominantByRows 或 isDiagonallyDominantByColumns。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    • 2012-07-26
    • 2016-07-29
    • 2015-11-17
    相关资源
    最近更新 更多