マトリックス相乗のアルゴリズム
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列の行列となります.
アルゴリズム:
コードの注釈ははっきりしています.主に定義をつかんで、3つのforサイクルです.もしあなたの二次元配列がfloatタイプではないなら、対応する変更ができます.cと返却値を一緒に変更することを覚えています.
ここまでにしましょう
今日はマトリックス相乗のアルゴリズムについて話します.計算アルゴリズムは簡単です.つまり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と返却値を一緒に変更することを覚えています.
ここまでにしましょう