Matrix Multiplikation in PHP inklusive Code

Zwei Matrizen miteinander Multiplizieren in PHP. Unterschiedliche Dimensionen, Laufzeitbetrachtung und Ausgabe des zweidimensionalen Arrays.

Inhaltsverzeichnis

Hier der Programmcode um zwei Matrizen beliebiger unterschiedlicher Größe zu multiplizieren. Die Skalarmultiplikation ist lediglich ein einziger Befehl, welcher durch drei for Schleifen geschachtelt ist. Dimension der Ergebnis Matrix wird dynamisch berechnet. Laufzeit: Theta n hoch 3

https://de.wikipedia.org/wiki/Skalarmultiplikation

https://de.wikipedia.org/wiki/Landau-Symbole

https://cathyatseneca.gitbooks.io/data-structures-and-algorithms/content/analysis/notations.html

Code

<?php

// Predefined Two Dimensional Arrays / Matrix

$A = array(
 array(2,1,3,4),
 array(1,2,1,1),
 array(2,1,1,1)
);

$B = array(
 array(2,3),
 array(1,4),
 array(1,5),
 array(1,6)
);

// Count of Rows / Columns beginning with Index 0

function Anzahl_Zeilen($MATRIX) {
 return sizeof($MATRIX);
}

function Anzahl_Spalten($MATRIX) {
 return sizeof($MATRIX[0]);
}

// Print the Matrix Dimensions (beginning with Index 0)

echo "Anzahl_Zeilen A ".Anzahl_Zeilen($A)."\n";
echo "Anzahl_Spalten A ".Anzahl_Spalten($A)."\n";

echo "Anzahl_Zeilen B ".Anzahl_Zeilen($B)."\n";
echo "Anzahl_Spalten B ".Anzahl_Spalten($B)."\n";

// Check if the Matrix is calculable

if(Anzahl_Spalten($A) != Anzahl_Zeilen($B)) {
 echo "Error";
 exit(1);
}

// Initialize the Matrix with the matching Result Dimension

for($i = 0; $i < Anzahl_Zeilen($A); $i++) {
 for($j = 0; $j < Anzahl_Spalten($B); $j++) {
  $C[$i][$j] = 0;
 }
}

print_r($C);

// Multiply Function

function MATRIX_MULTIPLY($A, $B) {

 for($i = 0; $i < Anzahl_Zeilen($A); $i++) {
  for($j = 0; $j < Anzahl_Spalten($B); $j++) {
   for($k = 0; $k < Anzahl_Spalten($A); $k++) {
    $C[$i][$j] = $C[$i][$j] + $A[$i][$k] * $B[$k][$j];
    echo "$i $j - ".$C[$i][$j]."\n";
   }
  }
 }

return $C;

}

$C = MATRIX_MULTIPLY($A, $B);

print_r($C);

?>

Ausgabe

Mathiass-MacBook-Pro:Desktop mathias$ php -f matrix.php
Anzahl_Zeilen A 3
Anzahl_Spalten A 4
Anzahl_Zeilen B 4
Anzahl_Spalten B 2
Array
(
    [0] => Array
        (
            [0] => 0
            [1] => 0
        )

    [1] => Array
        (
            [0] => 0
            [1] => 0
        )

    [2] => Array
        (
            [0] => 0
            [1] => 0
        )

)
0 0 - 4
0 0 - 5
0 0 - 8
0 0 - 12
0 1 - 6
0 1 - 10
0 1 - 25
0 1 - 49
1 0 - 2
1 0 - 4
1 0 - 5
1 0 - 6
1 1 - 3
1 1 - 11
1 1 - 16
1 1 - 22
2 0 - 4
2 0 - 5
2 0 - 6
2 0 - 7
2 1 - 6
2 1 - 10
2 1 - 15
2 1 - 21
Array
(
    [0] => Array
        (
            [0] => 12
            [1] => 49
        )

    [1] => Array
        (
            [0] => 6
            [1] => 22
        )

    [2] => Array
        (
            [0] => 7
            [1] => 21
        )

)

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen