有没有人知道如何在Java中构造以下矩阵?
我可以看到转置模式,但我可能会走错路。这就是我到目前为止......不要笑: - )
import java.io.*;
public class Diagonal
{
public static void main(String[] args)throws IOException
{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader in = new BufferedReader(isr);
int dim;
do
{
System.out.print("Dimension: ");
dim = Integer.parseInt(in.readLine());
}while(dim<=0);
int[][] matrix = new int[dim][dim];
for(int i=0;i<matrix.length;i++)
{
for(int j=0;j<matrix[i].length;j++)
{
matrix[i][j] = j+1;
}
}
//Transpose
int transpose[][] = matrix;
for(int i=0;i<dim;i++)
{
for(int j=0;j<dim;j++)
{
transpose[j][i] = matrix[i][j];
}
}
//print transpose
for(int i=0;i<transpose.length;i++)
{
for(int j=0;j<transpose[i].length;j++)
{
System.out.print(transpose[i][j]);
}
System.out.println("");
}
}
}
我不确定,但我认为它被称为toeplitz矩阵......
GRTS。
答案 0 :(得分:5)
请注意:m[i][j] = Math.abs(i - j) + 1
。一旦你看到了,创建矩阵非常简单:
private static int[][] createMatrix(int n) {
int[][] m = new int[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
m[i][j] = Math.abs(i - j) + 1;
}
}
return m;
}
你可以尝试一下:
public static void main(String[] args) {
for (int[] row : createMatrix(8)) {
System.out.println(Arrays.toString(row));
}
}
打印:
[1, 2, 3, 4, 5, 6, 7, 8]
[2, 1, 2, 3, 4, 5, 6, 7]
[3, 2, 1, 2, 3, 4, 5, 6]
[4, 3, 2, 1, 2, 3, 4, 5]
[5, 4, 3, 2, 1, 2, 3, 4]
[6, 5, 4, 3, 2, 1, 2, 3]
[7, 6, 5, 4, 3, 2, 1, 2]
[8, 7, 6, 5, 4, 3, 2, 1]
答案 1 :(得分:2)
Toeplitz矩阵意味着给定矩阵中的所有对角线都是常数。你的矩阵是一种特殊类型的Toeplitz矩阵,它是可转置的。 M == MT。查看Circulant Matrices以及......
请注意,您正在尝试查找矩阵,其中所有值都对应于i和j之间的距离(如果您愿意)。因此这样的事情会起作用:
int[][] matrix = new int[dim][dim];
for(int i=0;i<matrix.length;i++)
{
for(int j=0;j<matrix.length;j++)
{
// Figure out distance from i -> j
matrix[i][j] = Math.abs(i - j) + 1;
}
}
答案 2 :(得分:0)
public static void createMatrix(int no) {
int front = 1, last = no, position = 0;
for (int i = 0; i < no; i++) {
for (int j = front; j > 0; j--) {
System.out.print(j);
}
for (int j = 2; j <= last; j++) {
System.out.print(j);
}
front++;
last--;
}
}
输出:
此函数返回如下所示的数组
1, 2, 3, 4, 5, 6, 7, 8
2, 1, 2, 3, 4, 5, 6, 7
3, 2, 1, 2, 3, 4, 5, 6
4, 3, 2, 1, 2, 3, 4, 5
5, 4, 3, 2, 1, 2, 3, 4
6, 5, 4, 3, 2, 1, 2, 3
7, 6, 5, 4, 3, 2, 1, 2
8, 7, 6, 5, 4, 3, 2, 1