Java 如何检查对角线支配矩阵
在Java中,Array是一个对象。它是一种存储相似数据类型值的非原始数据类型。在Java中,矩阵就是一个多维数组,表示多行和多列。
如果矩阵的对角线元素的绝对值大于或等于该行其他元素绝对值的和,则称该矩阵为对角线支配矩阵。在数值分析中解决线性方程组时,这个特性非常有帮助。即使方程的系数不是完全已知的,它也保证解法会收敛到正确的答案。
在这里,我们给出了一个包含一组元素的矩阵,并根据问题陈述我们需要检查对角线支配矩阵。
让我们深入研究一下这篇文章,了解如何使用Java编程语言来实现它。
展示一些示例
示例1
给定矩阵 =
45 22 23
24 99 26
27 28 79
- 对角线元素为:45、29和79
- 第一行:45 >= (22+23)
-
第二行:99 > (24+26)
-
第三行:79 > (27+28)
-
因此给定的矩阵是一个对角线占优的矩阵。
示例2
给定的矩阵=
5 1 2
2 9 7
5 1 7
- 对角元素为:5、9和7
- 第1行:5 > (1+2)
-
第2行:9 > (2+7)
-
第3行:7 > (5+1)
-
因此,给定的矩阵是对角占优矩阵。
示例3
给定矩阵 =
45 22 23
24 19 26
27 28 79
- 对角线元素分别是:45、19和79
- 第一行:45 >= (22+23)
-
第二行:19 < (24+26)
-
第三行:79 > (27+28)
-
在第二行中,你可以看到对角线上的值比该行的其他两个元素的和小。因此,给定的矩阵不是一个对角占优矩阵。
步骤
(解释为第2种方法-用户定义的方法)
-
步骤1 − 函数isDiagonallyDominant接受由2D整数数组matrix表示的2D矩阵。
-
步骤2 − 变量n被设置为矩阵的长度,假设为方阵。
-
步骤3 − 外层for循环遍历矩阵的每一行。
-
步骤4 − 变量sum用于跟踪当前行中除对角元素外的元素的绝对值之和。
-
步骤5 − 内层for循环遍历当前行中的每一列。
-
步骤6 − 如果当前行和列的索引(i和j)不相等,则将该位置的元素的绝对值加到sum中。
-
步骤7 − 如果对角元素的绝对值小于sum,则矩阵不是对角占优的,函数返回false。
-
步骤8 − 如果所有行都处理完成而没有找到非对角占优的行,则函数返回true,表示矩阵是对角占优的。
语法
在Java中,Math.abs()方法返回一个数的绝对值,即不考虑其符号的给定数的非负值。
以下是它的语法 −
Math.abs(inputMatrix[i][j])
其中,’inputMatrix’指的是给定的矩阵。
多种方法
我们提供了不同的解决方法。
- 通过使用矩阵元素的静态初始化
-
通过使用用户自定义的方法
让我们逐个查看程序及其输出。
方法1:通过使用矩阵元素的静态初始化
在这种方法中,程序将初始化矩阵元素。然后根据算法检查给定矩阵是否为对角占优矩阵。
示例
public class Main {
public static void main(String[] args) {
int n = 3;
int[][] inputMatrix = {{7, 2, 1}, {3, 8, 2}, {1, 1, 10}};
//print the given matrix
System.out.println("The given matrix is: ");
for (int i = 0; i < inputMatrix.length; i++) {
for (int j = 0; j < inputMatrix[0].length; j++) {
System.out.print(inputMatrix[i][j] + " ");
}
System.out.println();
}
boolean isDiagonalDominant = true;
for (int i = 0; i < inputMatrix.length; i++) {
int sum = 0;
for (int j = 0; j < inputMatrix[0].length; j++) {
if (i != j) {
sum += Math.abs(inputMatrix[i][j]);
}
}
if (Math.abs(inputMatrix[i][i]) < sum) {
isDiagonalDominant = false;
break;
}
}
if (isDiagonalDominant) {
System.out.println("The given matrix is a diagonal dominant matrix.");
} else {
System.out.println("The given matrix is not a diagonal dominant matrix.");
}
}
}
输出
The given matrix is:
7 2 1
3 8 2
1 1 10
The given matrix is a diagonal dominant matrix.
方法2:使用用户定义的方法
在这种方法中,矩阵元素将在程序中进行初始化。然后通过将矩阵作为参数传递并在方法内部根据算法检查给定的矩阵是否是对角线支配矩阵来调用用户定义的方法。
示例
public class Main {
public static void main(String[] args) {
int n = 3;
int[][] inputMatrix = {{11, 22, 33}, {44, 55, 66}, {77, 88, 99}};
//print the given matrix
System.out.println("The given matrix is: ");
for (int i = 0; i < inputMatrix.length; i++){
for (int j = 0; j < inputMatrix[0].length; j++){
System.out.print(inputMatrix[i][j] + " ");
}
System.out.println();
}
boolean result = isDiagonalAbsoluteValueGreaterThanSum(inputMatrix);
if(result==false)
System.out.println("The given matrix is not a diagonal dominant matrix.");
else
System.out.println("The given matrix is a diagonal dominant matrix.");
}
//user defined method
public static boolean isDiagonalAbsoluteValueGreaterThanSum(int[][] mat) {
int n = mat.length;
for (int a = 0; a < n; a++) {
int sum = 0;
// Sum the absolute values of elements in the current row excluding the diagonal element
for (int b = 0; b < n; b++) {
if (a != b) {
sum += Math.abs(mat[a][b]);
}
}
// Check if the absolute value of the diagonal element is less than the sum
if (Math.abs(mat[a][a]) < sum) {
return false;
}
}
return true;
}
}
输出
The given matrix is:
11 22 33
44 55 66
77 88 99
The given matrix is not a diagonal dominant matrix.
在本文中,我们通过使用Java编程语言来探讨了检查对角线优势矩阵的不同方法。