【发布时间】:2013-05-13 18:22:19
【问题描述】:
如果矩阵在对角线上的值在绝对意义上大于该行中所有其他绝对值的总和,则矩阵为diagonally dominant(按行)。列也是如此,只是相反。
matlab 中是否有用于检查这个的函数? (我可以写一个简单的循环,但我正在尝试退出)。
【问题讨论】:
-
稍微更新了定义,使其更加准确。
标签: matlab
如果矩阵在对角线上的值在绝对意义上大于该行中所有其他绝对值的总和,则矩阵为diagonally dominant(按行)。列也是如此,只是相反。
matlab 中是否有用于检查这个的函数? (我可以写一个简单的循环,但我正在尝试退出)。
【问题讨论】:
标签: matlab
为什么要循环?
您可以轻松地形成给定行中绝对值的总和。
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))
【讨论】:
没有我知道的功能。但是,您可以进行没有循环的简单测试。
%# 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;
【讨论】: