检查矩阵是否在 python 中对角占优势
checking if a matrix is diagonally dominant in python
我知道我的代码是错误的,因为 np.sum(abs(X),axis=1)) 也对对角线值求和,因此我的代码总是 return 'NOT diagonally dominant' .我尝试输入 '-np.diag(X)' 但我收到一条错误消息。提前致谢!
import numpy as np
A=np.array([[ 40., 7., 5.],
[ 5., 90., 7.],
[20., 7., 50.]])
def dd(X):
Sum_values_in_given_row = np.sum(abs(X),axis=1)
if np.all(((abs(np.diag(X)))) >= np.sum(abs(X),axis=1)):
print 'matrix is diagonally dominant'
else:
print 'NOT diagonally dominant'
return
dd(A)
怎么了
matrix = [[ 40., 7., 5.],
[ 5., 90., 7.],
[20., 7., 50.]]
def dd(mat):
for numb, i in enumerate(mat):
if mat[numb][numb]<sum(i)-mat[numb][numb]:
return False
return True
print(dd(matrix))
如果 |Aii|,矩阵 A 是对角占优的≥ ∑j≠i |Aij|,或等价地,2|Aii| ≥ ∑j |Aij|.
def is_diagonally_dominant(x):
abs_x = np.abs(x)
return np.all( 2*np.diag(abs_x) >= np.sum(abs_x, axis=1) )
# ^^
要确定一个矩阵是否对角占优,你必须检查不包括对角系数的行系数之和是否大于对角系数。显然,您将绝对值作为测试的一部分。您没有这样做,而是包括了对角线系数。正如您提到的,您应该用对角系数减去每个元素的总和以确保检查正确,但出于某种原因您没有将其放入代码中:
def dd(X):
D = np.diag(np.abs(X)) # Find diagonal coefficients
S = np.sum(np.abs(X), axis=1) - D # Find row sum without diagonal
if np.all(D > S):
print 'matrix is diagonally dominant'
else:
print 'NOT diagonally dominant'
return
请注意,代码利用广播来方便地用相应的对角系数减去行总和。
我知道我的代码是错误的,因为 np.sum(abs(X),axis=1)) 也对对角线值求和,因此我的代码总是 return 'NOT diagonally dominant' .我尝试输入 '-np.diag(X)' 但我收到一条错误消息。提前致谢!
import numpy as np
A=np.array([[ 40., 7., 5.],
[ 5., 90., 7.],
[20., 7., 50.]])
def dd(X):
Sum_values_in_given_row = np.sum(abs(X),axis=1)
if np.all(((abs(np.diag(X)))) >= np.sum(abs(X),axis=1)):
print 'matrix is diagonally dominant'
else:
print 'NOT diagonally dominant'
return
dd(A)
怎么了
matrix = [[ 40., 7., 5.],
[ 5., 90., 7.],
[20., 7., 50.]]
def dd(mat):
for numb, i in enumerate(mat):
if mat[numb][numb]<sum(i)-mat[numb][numb]:
return False
return True
print(dd(matrix))
如果 |Aii|,矩阵 A 是对角占优的≥ ∑j≠i |Aij|,或等价地,2|Aii| ≥ ∑j |Aij|.
def is_diagonally_dominant(x):
abs_x = np.abs(x)
return np.all( 2*np.diag(abs_x) >= np.sum(abs_x, axis=1) )
# ^^
要确定一个矩阵是否对角占优,你必须检查不包括对角系数的行系数之和是否大于对角系数。显然,您将绝对值作为测试的一部分。您没有这样做,而是包括了对角线系数。正如您提到的,您应该用对角系数减去每个元素的总和以确保检查正确,但出于某种原因您没有将其放入代码中:
def dd(X):
D = np.diag(np.abs(X)) # Find diagonal coefficients
S = np.sum(np.abs(X), axis=1) - D # Find row sum without diagonal
if np.all(D > S):
print 'matrix is diagonally dominant'
else:
print 'NOT diagonally dominant'
return
请注意,代码利用广播来方便地用相应的对角系数减去行总和。