Умножение матриц в Microsoft Excel — задача, с которой сталкиваются студенты, инженеры и аналитики данных. Но что делать, если размерности матриц не совпадают? Классическое матричное умножение требует, чтобы количество столбцов первой матрицы равнялось количеству строк второй. Однако в реальных расчётах часто возникают ситуации, когда нужно перемножить матрицы 3×2 и 2×4, или даже 4×1 (вектор-столбец) на 1×3 (вектор-строку). В этой статье разберём все возможные сценарии — от стандартных функций до пользовательских решений на VBA.
Многие пользователи ошибочно считают, что Excel не умеет работать с несовпадающими размерностями. На самом деле, инструменты есть — просто их нужно правильно применять. Мы покажем, как обойти ограничения с помощью функции МУМНОЖ, псевдообратных матриц и даже как написать собственную формулу для нестандартных случаев. А ещё вы узнаете, какие ошибки чаще всего допускают при таких вычислениях и как их избежать.
Если вы никогда не работали с матрицами в Excel, начните с простого: проверьте, совпадает ли количество столбцов первой матрицы с количеством строк второй. Например, матрицу А (2×3) можно умножить на матрицу В (3×2), но не наоборот. Если размерности не подходят, придётся использовать обходные пути — и именно их мы подробно разберём ниже.
1. Стандартное умножение матриц: функция МУМНОЖ
Базовый инструмент для матричных вычислений в Excel — функция МУМНОЖ (или MMULT в английской версии). Она работает только при соблюдении условия совместимости размерностей: если первая матрица имеет размер m×n, то вторая должна быть n×k. Результат будет матрицей m×k.
Пример: умножим матрицу А (2×3) на матрицу В (3×2). Для этого:
- Введите матрицу А в диапазон
A1:C2. - Введите матрицу В в диапазон
E1:F3. - Выделите диапазон для результата (например,
H1:I2— 2 строки и 2 столбца). - Введите формулу
=МУМНОЖ(A1:C2; E1:F3)и нажмитеCtrl+Shift+Enter(это формула массива!).
Если вы увидели ошибку #ЗНАЧ!, скорее всего, нарушено условие совместимости размерностей. Например, попытка умножить 3×2 на 3×3 приведёт к ошибке, потому что количество столбцов первой матрицы (2) не равно количеству строк второй (3).
2. Умножение матриц с несовпадающими размерностями: обходные пути
Когда размерности матриц не совпадают, стандартная функция МУМНОЖ бесполезна. Но есть несколько способов обойти это ограничение:
Способ 1: Транспонирование матриц
Если вам нужно умножить А (m×n) на В (k×l), где n ≠ k, попробуйте транспонировать одну из матриц. Например, умножение А (2×3) на В (4×2) невозможно, но если транспонировать В (получится 2×4), то умножение А × В
Способ 2: Использование псевдообратной матрицы
Для квадратных матриц можно использовать функцию МОБР (обратная матрица), но если матрица не квадратная, потребуется псевдообратная матрица (например, с помощью формулы =МУМНОЖ(МОБР(МУМНОЖ(ТРАНСП(А);А));ТРАНСП(А))). Это позволяет "приближённо" решать системы уравнений с несовпадающими размерностями.
Способ 3: Дополнение матриц нулями
Если разница в размерностях небольшая, можно дополнить меньшую матрицу нулевыми строками или столбцами. Например, чтобы умножить 3×2 на 4×3, дополните первую матрицу до 3×4 нулевыми столбцами.
3. Умножение вектора на матрицу (и наоборот)
Частный случай несовпадающих размерностей — умножение вектора (матрицы 1×n или n×1) на матрицу. Здесь важно правильно определить, где вектор-строка, а где вектор-столбец.
Пример 1: Умножение вектора-строки (1×3) на матрицу (3×2).
- Вектор введите в
A1:C1. - Матрицу введите в
A3:B5. - Формула:
=МУМНОЖ(A1:C1; A3:B5)(результат — 1×2).
Пример 2: Умножение матрицы (2×3) на вектор-столбец (3×1).
- Матрицу введите в
A1:C2. - Вектор введите в
E1:E3. - Формула:
=МУМНОЖ(A1:C2; E1:E3)(результат — 2×1).
Критическая ошибка: если перепутать вектор-строку и вектор-столбец, Excel выдаст #ЗНАЧ!, даже если размерности кажутся совместимыми. Всегда проверяйте ориентацию вектора!
4. Умножение матриц через Power Query (для больших данных)
Если вы работаете с большими матрицами (тысячи строк/столбцов), стандартные функции Excel могут тормозить. В этом случае поможет Power Query — инструмент для преобразования данных, встроенный в Excel 2016+.
Алгоритм действий:
- Импортируйте обе матрицы в Power Query (данные → получить данные → из таблицы/диапазона).
- Для первой матрицы добавьте индексный столбец (вкладка "Добавить столбец" → "Индексный столбец").
- Выполните операцию объединения (вкладка "Главная" → "Объединить запросы") по индексам.
- Разверните полученные столбцы и удалите лишние.
- Загрузите результат обратно в Excel.
Этот метод сложнее, чем Power Query обрабатывает данные по частям (потоковая обработка), не загружая всю матрицу в оперативную память. Это позволяет избежать ошибок "Недостаточно памяти" и ускорить вычисления на 30-50% по сравнению с МУМНОЖ.МУМНОЖ, но позволяет работать с данными, которые не помещаются в память Excel. Например, так можно перемножить матрицы 10000×50 и 50×100, что невозможно сделать стандартными средствами.
Почему Power Query лучше для больших матриц?
5. Пользовательская функция на VBA для нестандартных случаев
Если ни один из вышеописанных методов не подходит, можно написать собственную функцию на VBA. Например, для умножения матриц с автоматическим дополнением нулями до совместимых размеров.
Пример кода:
Function CustomMMult(rng1 As Range, rng2 As Range) As Variant
Dim arr1(), arr2(), result()
Dim i As Long, j As Long, k As Long
Dim rows1 As Long, cols1 As Long, rows2 As Long, cols2 As Long
' Определяем размеры матриц
rows1 = rng1.Rows.Count
cols1 = rng1.Columns.Count
rows2 = rng2.Rows.Count
cols2 = rng2.Columns.Count
' Проверяем совместимость
If cols1 <> rows2 Then
' Дополняем нулями до совместимости
If cols1 < rows2 Then
ReDim arr1(1 To rows1, 1 To rows2)
For i = 1 To rows1
For j = 1 To cols1
arr1(i, j) = rng1.Cells(i, j).Value
Next j
For j = cols1 + 1 To rows2
arr1(i, j) = 0
Next j
Next i
cols1 = rows2
Else
ReDim arr2(1 To cols1, 1 To cols2)
For i = 1 To rows2
For j = 1 To cols2
arr2(i, j) = rng2.Cells(i, j).Value
Next j
Next i
For i = rows2 + 1 To cols1
For j = 1 To cols2
arr2(i, j) = 0
Next j
Next i
rows2 = cols1
End If
End If
' Умножение
ReDim result(1 To rows1, 1 To cols2)
For i = 1 To rows1
For j = 1 To cols2
result(i, j) = 0
For k = 1 To cols1
result(i, j) = result(i, j) + rng1.Cells(i, k).Value * rng2.Cells(k, j).Value
Next k
Next j
Next i
CustomMMult = result
End Function
Чтобы использовать эту функцию:
- Нажмите
Alt+F11, чтобы открыть редактор VBA. - Вставьте код в новый модуль (
Insert → Module). - В Excel введите формулу как формулу массива:
=CustomMMult(A1:C2; E1:F3)+Ctrl+Shift+Enter.
⚠️ Внимание: Пользовательские функции VBA могут значительно замедлить работу Excel при больших матрицах (более 100×100). Для оптимизации отключите автоматический пересчёт (Формулы → Параметры вычислений → Вручную) на время работы функции.
6. Частые ошибки и как их исправить
Даже опытные пользователи допускают ошибки при умножении матриц. Вот самые распространённые из них и способы их устранения:
| Ошибка | Причина | Решение |
|---|---|---|
#ЗНАЧ! в МУМНОЖ |
Несовпадение размерностей (кол-во столбцов первой матрицы ≠ кол-ву строк второй) | Проверьте размеры матриц или используйте транспонирование/дополнение нулями |
#ССЫЛКА! |
Неверно указан диапазон (например, A1:C2 вместо A1:B2) |
Дважды проверьте адреса ячеек в формуле |
| Неверный результат (например, все нули) | Забыли нажать Ctrl+Shift+Enter для формулы массива |
Повторите ввод формулы с правильным завершением |
| Excel "зависает" при больших матрицах | Слишком много данных для стандартных функций | Используйте Power Query или разбивайте матрицы на части |
Ещё одна типичная проблема — округление чисел. Excel хранит числа с ограниченной точностью, поэтому при умножении матриц с дробными значениями результат может немного отличаться от теоретического. Чтобы минимизировать погрешность, используйте функцию ОКРУГЛ для итоговой матрицы:
=ОКРУГЛ(МУМНОЖ(A1:C2; E1:F3); 5)
⚠️ Внимание: Если в матрицах есть пустые ячейки, Excel будет воспринимать их как нули. Это может исказить результат, особенно если пустые ячейки означают отсутствие данных, а не нулевые значения. Перед умножением заполните все пустоты явными нулями или используйте функцию ЕСЛИ для игнорирования пустых ячеек.
7. Практическое применение: где это используется?
Умножение матриц с разной размерностью применяется в самых разных областях:
- 📊 Статистика: расчёт регрессионных моделей, где матрица данных (n×m) умножается на вектор коэффициентов (m×1).
- 🤖 Машинное обучение: обучение нейронных сетей, где веса слоёв (k×l) умножаются на входные данные (l×m).
- 🏗️ Инженерия: расчёты напряжений в конструкциях, где матрица жёсткости (n×n) умножается на вектор нагрузок (n×1).
- 💰 Финансы: портфельный анализ, где матрица доходностей активов (m×n) умножается на вектор весов (n×1).
Пример из финансов: предположим, у вас есть доходности 3 акций за 5 лет (матрица 5×3) и веса этих акций в портфеле (вектор 3×1). Умножив их, вы получите годовую доходность портфеля (5×1).
☑️ Подготовка матриц к умножению
8. Альтернативные инструменты для работы с матрицами
Если Excel не справляется с вашей задачей, рассмотрите специализированные инструменты:
- 📉 Python (NumPy): Библиотека NumPy позволяет умножать матрицы любой размерности с высокой точностью. Пример кода:
import numpy as npA = np.array([[1, 2], [3, 4], [5, 6]])
B = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
result = np.dot(A, B)
- 📈 MATLAB: Встроенная поддержка матричных операций, включая псевдообратные матрицы (
pinv). - 📊 Google Sheets: Функция
MMULTработает аналогично Excel, но лучше оптимизирована для совместной работы. - 🖥️ Wolfram Alpha: Онлайн-калькулятор для символьных матричных вычислений (полезно для проверки результатов).
Excel удобен для небольших матриц и интеграции с другими данными, но для серьёзных вычислений (например, матрицы 1000×1000) лучше использовать Python или MATLAB.
FAQ: Ответы на частые вопросы
Можно ли в Excel умножить матрицу 3×2 на матрицу 3×3?
Нет, стандартная функция МУМНОЖ не позволит этого сделать, потому что количество столбцов первой матрицы (2) не равно количеству строк второй (3). Вы можете:
- Транспонировать вторую матрицу (станет 3×3 → 3×3, но это изменит смысл операции).
- Дополнить первую матрицу нулевым столбцом (станет 3×3).
- Использовать псевдообратную матрицу для приближённого решения.
Почему при умножении матриц получаются очень большие или очень маленькие числа?
Это связано с переполнением или антипереполнением — ограничениями на представление чисел в Excel. Максимальное число в Excel — ~1.8×10308, минимальное положительное — ~2.2×10-308. Чтобы избежать проблемы:
- Масштабируйте данные (разделите все элементы матриц на 1000 перед умножением, а результат умножьте на 1000×1000).
- Используйте логарифмы (если умножение заменяется сложением логарифмов).
- Перейдите на инструменты с произвольной точностью (например, Wolfram Alpha).
Как умножить матрицу на число (скаляр)?
Для этого не нужны специальные функции — просто умножьте каждый элемент матрицы на число. Например, если матрица в A1:C2, а скаляр в E1, используйте формулу массива:
=A1:C2 * $E$1
Или для отдельной ячейки:
=A1 * $E$1
Не забудьте растянуть формулу на весь диапазон результата.
Можно ли умножить три матрицы сразу в одной формуле?
Да, функция МУМНОЖ поддерживает цепочки умножений. Например, для матриц A (2×3), B (3×2) и C (2×4):
=МУМНОЖ(МУМНОЖ(A1:C2; E1:F3); H1:K2)
Важно, чтобы размерности были совместимы на каждом этапе: A×B даёт 2×2, а умножение на C (2×4) возможно.
Как проверить, правильно ли я умножил матрицы?
Есть несколько способов верификации:
- Умножьте вручную 2-3 элемента результата и сравните с формулой.
- Используйте онлайн-калькуляторы (например, MatrixCalc).
- Проверьте свойства результата:
- Если умножить матрицу A (m×n) на B (n×k), результат должен быть m×k.
- Умножение на единичную матрицу должно давать исходную матрицу.