За последние 24 часа нас посетили 60268 программистов и 1810 роботов. Сейчас ищут 858 программистов ...

Перемножение матриц

Тема в разделе "Прочие вопросы по PHP", создана пользователем mattxs, 8 мар 2015.

  1. mattxs

    mattxs Новичок

    С нами с:
    8 мар 2015
    Сообщения:
    13
    Симпатии:
    0
    Доброго времени суток, дорогие форумчане!
    Есть проблема с перемножением матриц..
    Алгоритм правильный, но вот выходит ошибка.
    Есть две матрицы $matrix1 и $matrix2
    Необходимо их перемножить, но PHP выдаёт ошибку:
    Код (Text):
    1. Notice: Undefined offset: 3 in C:\xampp\htdocs\task\index.php on line 78
    Насколько я понимаю, она связана с тем, что идёт ссылка на несуществующую строку/столбец в массиве, хотя, вроде, всё правильно..(наверное)..
    Помогите, пожалуйста, понять, в чём дело.
    Вот код функции (будем считать, что матрицы квадратные):
    Код (Text):
    1.  
    2. function MultiplyMatrix($matrix1, $matrix2)
    3.     {
    4.         $product = array(); // Создаём массив значений
    5.         $row = count($matrix1); // Количество строк в первой матрице
    6.         for ($z=0; $z < 1; $z++) {
    7.             $col = count($matrix2[$z]); // Количество строк во втрой матрице
    8.         }
    9.         for ($i=0; $i < $row; $i++) {
    10.             for ($j=0; $j < $col; $j++) {
    11.                 for ($k=0; $k < $col; $k++) {
    12.                     $product[$row][$col] += $matrix1[$row][$k] * $matrix2[$k][$col];
    13.                 }
    14.                 echo $product[$row][$col] . " ";
    15.             }
    16.             echo "<br>";
    17.         }
    18.     }
    P.S. Если у кого есть функция перемножения матриц, поделитесь, пожалуйста!
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  3. mattxs

    mattxs Новичок

    С нами с:
    8 мар 2015
    Сообщения:
    13
    Симпатии:
    0
    Проблему решил, вот код перемножения матриц.
    Код (Text):
    1.  
    2. function matrixmult($m1,$m2){
    3.     $r=count($m1);
    4.     $c=count($m2[0]);
    5.     $p=count($m2);
    6.     if(count($m1[0])!=$p){throw new Exception('Incompatible matrixes');}
    7.     $m3=array();
    8.     for ($i=0;$i< $r;$i++){
    9.         for($j=0;$j<$c;$j++){
    10.             $m3[$i][$j]=0;
    11.             for($k=0;$k<$p;$k++){
    12.                 $m3[$i][$j]+=$m1[$i][$k]*$m2[$k][$j];
    13.             }
    14.         }
    15.     }
    16.     return($m3);
    17. }