【问题标题】:Special diagonal matrix in JavaJava中的特殊对角矩阵
【发布时间】:2014-07-13 20:20:53
【问题描述】:

有人知道如何用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("");   
      }      
   }
}

我不确定,但我认为它被称为托普利兹矩阵......

Grts.

【问题讨论】:

  • 请注意:m[i][j] = Math.abs(i - j) + 1
  • 正是,spot的值反映了与i->j的“距离”。你所拥有的有点反向-Circulant matrix
  • 谢谢大家!现在已经看到了曙光;-)

标签: java arrays matrix


【解决方案1】:

请注意: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]

【讨论】:

  • 哇!我盯着这个看了大约一个小时……我自己不可能找到这个:-)。谢谢!
【解决方案2】:

Toeplitz 矩阵意味着给定矩阵中的所有对角线都是常数。您的矩阵是一种特殊类型的 Toeplitz 矩阵,可以转置。 M == 公吨。也请查看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;   
    }
}

【讨论】:

    【解决方案3】:
    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 
    

    【讨论】:

      猜你喜欢
      • 2013-08-04
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-21
      • 2016-03-19
      • 1970-01-01
      相关资源
      最近更新 更多