マトリックス相乗のアルゴリズム

4421 ワード

長い間ブログを書いていませんでした.人が鬱憤になりそうです.転職してからいろいろと心配しています.Androidを作ると言っていましたが、結果はいろいろな計算方法をやらせてもいいです.少し知識を勉強したほうがいいです.
    今日はマトリックス相乗のアルゴリズムについて話します.計算アルゴリズムは簡単です.つまり3つのforサイクルです.
    まず、行列を乗り合うという概念を言いますが、実は大学の時には線形代数の中で述べられていますが、今までは先生に返していると思います.
    余計なことを言わないでください.行列とは、つまり二次元の配列で、例えばint[5][6]というように、行列であり、5行6列という意味です.
    マトリクスAの列数がマトリクスBの行数と等しい場合のみA×Bこそ意味があります.一つのm×nの行列 a(m,n)は左にnを乗じる.×pのマトリクスb(n,p)は、mを得ることができます.×pのマトリクスc(m,p)左乗:前乗ともいいます.左側(つまり乗号前)に乗ることです.例えば、A左乗EはAEです.
   コンピュータでは、行列は実際には二次元配列である.1つのm行n列の行列は、1つのn行p列の行列と乗算でき、得られた結果は、1つのm行p列の行列であり、そのi行目j列位置の数は、最初の行列i行目のn個の数と、第2の行列j列目のn個の数とが乗算された後に得られたn個の乗算の和である.たとえば、次の式は、1つの2行2列の行列に2行3列の行列を掛けたもので、その結果は2行3列の行列となります.
    アルゴリズム:
  
 1 //    

 2     public static float[][] Mul(float[][] a, float[][] b) {

 3         //    a    b     

 4         if(a[0].length != b.length) {

 5             return null;

 6         } 

 7         //         ,axb    a    b   

 8         float[][] result = new float[a.length][b[0].length]; 

 9         // a       

10         for(int i=0; i<a.length; i++) {

11             // b       

12             for(int j=0;j<b[0].length; j++) {

13                 //c       

14                 float c = 0;

15                 // i j    a  i   n   b  j   n        ,  n a   ,  b   ,a    b     

16                 for(int k=0; k<a[0].length; k++) {

17                     c += (a[i][k]*b[k][j]);

18                 }

19                 result[i][j] = c;

20             }

21         }

22         return result;

23     }
 
    コードの注釈ははっきりしています.主に定義をつかんで、3つのforサイクルです.もしあなたの二次元配列がfloatタイプではないなら、対応する変更ができます.cと返却値を一緒に変更することを覚えています.
    ここまでにしましょう