Java中的特殊对角矩阵

时间:2014-05-24 15:30:41

标签: java arrays matrix

有没有人知道如何在Java中构造以下矩阵?

matrix

我可以看到转置模式,但我可能会走错路。这就是我到目前为止......不要笑: - )

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。

3 个答案:

答案 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