Теперь перейдем к самому сложному, это матричное умножение. Оно совсем не очевидно и не похоже на привычное умножение. Здесь, например, не будет справедливо правило, к которому привыкли с детства, которое звучит так, от перемены мест множителей произведения не меняются. В матричной алгебре это совсем не так. При изменении порядка умножаемых матриц результат сильно изменяется. Соответственно, здесь появляются много особенностей, на которых надо остановиться подробнее. Однако начнем мы с более простого случая, который получил название скалярного произведения двух векторов. Мы помним, что векторы, это матричный объекты и для них тоже возможно матричное умножение. Соответственно, скалярное произведение двух векторов допустимо только тогда, когда два вектора имеют одинаковое количество чисел. Строго говоря, мы производим умножение векторов столбца на вектор строку. И схема матричного умножения двух векторов будет выглядеть следующим образом: первый элемент первого вектора умножается на первый элемент второго вектора. Далее, второй элемент первого вектора умножается на второй элемент второго вектора и так далее. Соответственно, когда мы произвели умножение соответствующих друг другу членов двух векторов, мы находим общую сумму этих произведений, и это общая сумма является результатом скалярного произведения. Сразу стоит вопрос, а зачем это нужно? Такие навороты. На самом деле все эти сложности придуманы для решения сугубо прикладных задач, которых в физике, математике, химии бессчетное количество. В биологии их тоже очень много и в том числе в регрессионном анализе, о который будем сейчас говорить. Мы решим простейшую задачу, взятую абсолютно из бытовых соображений. Представьте себе, что у нас в доме есть следующие электроприборы, есть чайник, есть несколько обогревателей, осушитель, стиральная машина, фен, и в каждой из этих приборов представлен в разном количестве. Каждый из них имеет свою мощность, и встает вполне утилитарная задача, а если все эти приборы одновременно включим в розетку, выдержит ли наша сеть? Но если мы собираемся решать такую задачу на калькуляторе, то что мы делали, мы произвели бы умножения вот этой величины на эту, отправили бы в память это на эту, отправили в память это на эту и так далее, нашли бы сумму этих величин. Это совершенно очевидные действия. Так вот это и есть скалярное произведение. Как это будет выглядеть, это решение этой задачки с использованием языка R. Мы создадим два вектора. Первый вектор, пусть он будет A, в котором мы запишем количество электроприборов. Второй вектор, обозначим его B, это количество ватт, которое потребляет мощность того или иного прибора, а дальше запишем матричную операцию скалярное произведение в виде такого кода. Обратите внимание, здесь мы вводим новый символ, %*%, который и обозначает матричное произведение, и посмотрите, результат перед нами. Вместо того, чтобы производить много однотипных действий, мы записали всего три строчки кода. Именно для этого и нужны матричные операции, когда необходимо сделать много однотипных действий но записать их можно очень кратко. Соответственно, вот это решение в три строчки позволяет нам реализовать задачку, которую мы, если бы занимались вычислениями вручную, потребовала бы от нас очень много действий. В этом и вся прелесть матричной алгебры заключается. Однако, это было простое решение, когда мы умножали два вектора, производили скалярное произведение. Давайте немножко усложним задачку, давайте посмотрим как происходит умножение матрицы на векторах. Это произведение, матричное умножение, матрицы на вектор, возможно только тогда, когда число столбцов в матрице равно количеству чисел в векторе. Посмотрите, возьмем уже имеющуюся у нас матрицу А, который имеет 4 строчки и 3 столбца, и умножим, матрично умножим эту матрицу на вектор C, в котором три элемента. Соответственно, результатам такого матричного умножения будет вектор столбец, состоящий из четырех элементов. Обратите внимание, каждый из этих чисел на самом деле является результатом скалярного произведения, но если бы поменяем местами вектор и матрицу, то система нам выдаст сообщение об ошибке, потому что мы нарушили правила, при котором возможно матричное умножение. Давайте посмотрим, возможно ли умножение вектора на матрицу. Да, такое возможно, но только в том случае, если количество чисел в векторе равно количеству строк в матрице. Соответственно, если мы с вами возьмём вектор, состоящий из четырех элементов, смотрите вот тут десятку добавили, и произведем матричное умножение на имеющуюся матрицу, то да, мы получим результат, который будет состоять из трех элементов, соответствующих количеству столбцов нашей матрицы. Но опять же, если мы поменяем местами эти множители, то нам выдаст сообщение об ошибке, потому что будет нарушено правило умножения вектора на матрицу. Опять же, встает вопрос, зачем все это нужно? Конечно же вся эта история была придумана для решения вот тех самых однотипных, сложных задач на многочисленные вычисления. Представим себе, что вы решили купить четыре товара по следующим ценам: товар первый такую-то цену имеет, товар второй - такую-то цену, третий - такую-то, четвертый - такую-то. Но вот у вас нет доступа к прямому поставщику этих товаров, но есть три посредника, которые выставляют некоторые накрутки. Ну естественно, каждый торгует в пользу себя, поэтому у них есть на первый товар такие-то накрутки. Второй товар, другие накрутки. Как бы нам выяснить, у кого из трех посредников лучше купить товар. Вам поможет матричная алгебра. Сначала мы создадим вектор, состоящий из цен на товары, вот он. Мы объединяем с помощью функции C, объединяем все четыре цены, которые нас интересуют, в один вектор. Дальше создаем матрицу под названием retailer, в которую с помощью функции matrix объединяем величины накруток, вот они, и обратите внимание, мы пишем byrow = true, чтобы вот эту матрицу записать построчно. Ну, нам так удобнее, на самом деле мы могли это сделать как хотели. И разбиваем все на 4 колонки, и соответственно, все действия, которые нам необходимо сделать, это произвести матричные умножения, матрицы retailer на вектор cost. Результат перед вами, смотрите, вот получается, что переплата за все четыре товара составит вот такую статью суммы. С очевидностью нам надо иметь дело с первым ритейлером, потому что он меньше всего накрутки сделает.