是否有检查矩阵是否对角占优势的函数(行优势)

时间:2010-03-31 14:19:35

标签: matlab

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

matlab中是否有一个函数可以解决这个问题? (我可以写一个简单的循环,但我试图退出那些)

2 个答案:

答案 0 :(得分:16)

为什么要循环?

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

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))

答案 1 :(得分: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;