Zwei Matrizen miteinander Multiplizieren in PHP. Unterschiedliche Dimensionen, Laufzeitbetrachtung und Ausgabe des zweidimensionalen Arrays.
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
)
)