<?php
/**
* php实现n阶矩阵相乘
*
* 5 2 4 2 4 24 34
* 3 8 2 x 1 3 = 20 40
* 6 0 4 3 2 24 32
* 0 1 6 19 15
*
*/
class matrix
{
private $a;
private $b;
public function createA(...$a)
{
$this->a[] = $a;
}
public function createB(...$b)
{
$this->b[] = $b;
}
public function check()
{
if (count($this->a[0]) != count($this->b))
throw new Exception('MATRIX A OR B ERROR');
}
public function multi()
{
$res = [];
// check matrix right
$this->check();
foreach ($this->a as $a) {
$tmp = [];
$b_l = count($this->b[0]);
for ($i = 0; $i < $b_l; $i ++) {
foreach ($a as $k => $a2) {
$tmp[$i] += $a2 * $this->b[$k][$i];
}
}
$res[] = $tmp;
}
return $res;
}
}
$matrix = new matrix();
$matrix->createA(5, 2, 4);
$matrix->createA(3, 8, 2);
$matrix->createA(6, 0, 4);
$matrix->createA(0, 1, 6);
$matrix->createB(2, 4);
$matrix->createB(1, 3);
$matrix->createB(3, 2);
$res = $matrix->multi();
print_r($res);
矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义 [1] 。一般单指矩阵乘积时,指的便是一般矩阵乘积。一个m×n的矩阵就是m×n个数排成m行n列的一个数阵。由于它把许多数据紧凑地集中到了一起,所以有时候可以简便地表示一些复杂的模型,如电力系统网络模型。