-5

2x2 行列の役割を果たす 2 次元配列があります。その行列のランクを見つけるにはどうすればよいですか。今まで私はこれを持っています:

Scanner input=new Scanner(System.in);

int[][] A = new int[2][2];
int[][] B = new int[2][2];
int[][] C = new int[2][2];

System.out.println("Enter elements for matrix A : ");

for (int i=0 ; i < A.length ; i++)
{
    for  (int j=0 ; j < A[i].length ; j++)
    {
        A[i][j] = input.nextInt();
    }

    System.out.println("Matrix A: ");
    for (int i=0 ; i < A.length ; i++)
    {
        System.out.println();
        for(int j=0 ; j < A[i].length ; j++)
        {
            System.out.print(A[i][j]+" ");
        }
    }
}

その行列 (配列) のランクを見つけるにはどうすればよいですか?

4

2 に答える 2

3

行列を行階層形式に変換することで、行列のランクを見つけることができます。マトリックスの行階層形式は、マトリックスと同じランクになります。行階層形式の行列のランクは、ゼロ以外の行の総数です。ここにある 2x2 の場合、計算は非常に単純です。詳細な説明については、このリンクを参照してください

http://en.wikipedia.org/wiki/Rank_%28linear_algebra%29#Computation

(2x2行列しかないため)高速であるより単純な大雑把なアプローチは、行列の1つの列が他の列の倍数であるかどうかを単純に検出することです。これは、これらの比率が等しいかどうかを (任意の数値許容範囲で) テストすることでおおよそ検出できます (整数ゼロベースの配列インデックスではなく、行列表記を使用)。

 A(1,1)/A(1,2) == A(2,1)/A(2,2)  

いつものようにゼロ分割に注意してください。比率が等しい場合は、列が互いに倍数であるため、行列がフル ランクではないことを示唆しています (つまり、1 または 0 のいずれかです)。すべての行列要素がゼロの場合、ランクはゼロです。

これがニーズに対して粗雑すぎる場合は、上記のリンクで提案されているガウス消去法を使用してください。

于 2012-11-04T18:45:13.863 に答える
0

@Sean Owen: ランクは 0 の場合もあります。

于 2012-11-06T15:13:58.410 に答える