N×Nの行列に与えられた二つの製品を求めています
以下に示すように、次のように、乗算処理が行われます。
1.アウト、アウトマトリックス2の第1の行列1行
2行と列の乗算値1
3.左列の行列は、2値2(再帰的な手順)を乗じたものです
1および4 VALUE3(再帰的な手順)を乗算した行列の残りの列
マトリックス1およびマトリックス2の残りの部分は、残りのvalue4(再帰的な手順)を乗じたものです
前記結果値1は〜value4アレイに結合します
注規則コードを書くとき、値1は値1、値2、VALUE3、value4は数であり、空の配列または非空の二次元配列でなければなりません
PHPで実装され、一般的な考え方は難しいことではありませんが、合併結果の詳細に細心の注意を払います:
1 <?PHP 2 3 クラスMatrixProduct 4 { 5 保護 $の行列1、$の行列2 。 6 保護され ます$ result ; 7 8 パブリック 関数 __construct($の行列1、$の行列2 ) 9 { 10 $この - >行列1 = $行列1 。 11 $この - >行列2 = $行列2 。 12 $この - >結果= $この - > matrixProduction($この - >行列1、$この - > 行列2)。 13 } 14 15 パブリック 関数ショー() 16 { 17 foreachの($この - >結果として $行){ 18 foreachの($行 として $データ){ 19 のprintf( '%5D'、$データ)。 20 } 21は、 エコー PHP_EOLを、 22 } 23 } 24 25 保護 関数 popRow(&$行列) 26 { 27 リターン 空($行列)?[]:[ array_shift($行列)]。 28 } 29 30 保護 機能 popColumn(&$行列) 31 { 32 $列 = []; 33 foreachの($行列 として $キー =>&$行){ 34件の $データ = array_shift($行)。 35 なら(エンプティ($データ)|| 空($行)){ 36 未設定($行列 [ $キー])。 37 } 38 $列 [] = [ $データ]。 39 } 40 リターン $列。 41 } 42 43 保護 機能 countProduction($行、$列) 44 { 45 のために($ iは= 0、$合計 = 0; $ iが < カウント($行を [0])。$ I ++ ){ 46 $の和 + = $行 [0] [ $ I ] * $列 [ $ I ] [0 ]。 47 } 48 リターン $和; 49 } 50 51 保護 機能合併($値1、$の値2、$のVALUE3、$のvalue4 ) 52 { 53 であれば(空の($値2)&& 空($ VALUE3 )){ 54 リターン $値1 。 55 } 他{ 56 $ array12 = array_merge([ $値1 ]、!IS_ARRAY($の値2)[?$の値2 ]:$の値2 [0]?[])。 57 もし(!IS_ARRAY($ VALUE3 )){ 58 $ array34 = array_merge([ $の値3 ]、!IS_ARRAY($のvalue4)?[ $のvalue4 ]:$のvalue4 [0]?[])。 59 リターン [ $ array12、$ array34 ]。 60 } 他{ 61 のために($ I = 0、$ array34 = []; $ iは < カウント($のVALUE3を ;)$ iが ++ ){ 62 $ array34 [] = array_merge($のVALUE3 [ $ I ]、$ value4を [ $ I ] ?? []); 63 } 64 リターン array_merge([ $ array12 ]、$ array34 )。 65 } 66 } 67 } 68 69 保護 機能 matrixProduction($の行列1、$の行列2 ) 70 { 71 $行 = $この - > popRow($の行列1 )。 72 $列 = $この - > popColumn($の行列2 )。 73 なら(エンプティ($行)|| 空の($列)){ 74 リターン[]。 75 } 76 77 $の値1 = $この - > countProduction($行、$列)。 78 $の値2 = $この - > matrixProduction($行、$の行列2 )。 79 $のVALUE3 = $この - > matrixProduction($の行列1、$列)。 80 の$ value4 = $この - > matrixProduction($の行列1、$の行列2 )。 81 82 リターン $この - >合併($値1、$ value2を、$の値3、$のvalue4 )。 83 } 84 } 85 86 $の行列1 = [ 87 、[1、2、3、4]、 88 [1、2、3、4]、 89 [1、2、3、4]、 90 [1、2、3 、4]、 91 ]。 92 93 $行列2 = [ 94 、[1、2、3、4]、 95 [5、6、7、8] 96 [9、10、11、12]、 97 [13、14、15、16 ] 98 ]。 99 100 $生産 = 新しい MatrixProduct($の行列1、$の行列2 )。 101 $生産 - >ショー();