Всё — матрица: фундамент модели данных
Почему в MATLAB нет «просто чисел» и как это меняет способ писать код.
В MATLAB любой числовой объект — это двумерный массив. Скаляр — матрица 1×1, вектор — матрица с одной строкой или одним столбцом.
Единая модель данных
В большинстве языков число, массив и матрица — разные сущности. В MATLAB они одно и то же: матрица. Когда вы пишете x = 5, создаётся массив размером 1×1. Это не педантизм, а основа всего языка: раз всё — матрица, то одни и те же операторы и функции работают и для одного числа, и для миллиона. Функция size возвращает размер как пару «строки, столбцы», length — наибольшую размерность, numel — общее число элементов.
x = 5;
size(x) % 1 1 — да, скаляр это матрица 1x1
v = [10 20 30 40];
size(v) % 1 4 — вектор-строка
Вывод:
ans =
1 1
ans =
1 4
Векторы-строки и векторы-столбцы
Это разные объекты, и путаница между ними — источник многих ошибок. Элементы через пробел или запятую дают строку (1×n); через точку с запятой — столбец (n×1). Превратить одно в другое можно транспонированием — оператором апостроф.
row = [1 2 3]; % 1x3, вектор-строка
col = [1; 2; 3]; % 3x1, вектор-столбец
col2 = row'; % транспонирование строки в столбец
Почему это важно? Многие операции (например, матричное умножение) требуют согласованных размеров. Вектор-строка 1×3 и вектор-столбец 3×1 ведут себя по-разному, и MATLAB строго следит за размерностями.
Скаляр, вектор, матрица — один спектр
| Объект | Размер | Пример |
| скаляр | 1×1 | 7 |
| вектор-строка | 1×n | [1 2 3] |
| вектор-столбец | n×1 | [1; 2; 3] |
| матрица | m×n | [1 2; 3 4] |
Как работает под капотом
Внутри MATLAB хранит числовую матрицу как непрерывный блок памяти, заполняемый по столбцам (column-major порядок, как в Fortran). Это объясняет две вещи. Во-первых, линейная индексация A(5) обходит элементы сверху вниз по столбцам, а не слева направо по строкам. Во-вторых, операции, идущие вдоль столбцов, работают с памятью эффективнее. По умолчанию большинство функций агрегируют именно по столбцам — это согласуется с тем, как данные лежат в памяти.
Частые ошибки
- Считать вектор-строку и вектор-столбец взаимозаменяемыми — операции с ними дают разные результаты или ошибку размерности.
- Путать
length(наибольшая размерность) иnumel(всего элементов): для матрицы 3×4 это 4 и 12. - Ожидать, что
A(5)идёт по строкам — MATLAB обходит элементы по столбцам.
Почему единая модель упрощает язык
Стоит задержаться на том, какую выгоду даёт принцип «всё — матрица». В языках, где число, вектор и матрица — разные типы, для каждого нужны свои функции и правила. В MATLAB одна функция sum работает и для скаляра, и для вектора, и для матрицы; один оператор + складывает что угодно совместимых размеров. Это резко сокращает число понятий, которые нужно держать в голове. Вы изучаете правила для матриц — и автоматически знаете их для всех частных случаев. Скаляр — просто матрица 1×1, вектор — матрица с одной короткой стороной, и никаких особых случаев.
Эта же идея объясняет, почему MATLAB так естественно ложится на математику. В линейной алгебре скаляр, вектор и матрица — части одного континуума, связанные операциями. Язык, который повторяет эту структуру, позволяет переносить формулы из учебника в код почти буквально, не отвлекаясь на упаковку данных в подходящие контейнеры.
Размерности как контракт
Привыкайте всё время держать в голове размер каждой переменной — это центральная дисциплина работы в MATLAB. Большинство ошибок здесь — не опечатки в логике, а несоответствие размеров: вы умножаете матрицу 3×2 на матрицу 4×1, и среда справедливо протестует. Опытный пользователь читает выражение и мысленно проверяет размеры на каждом шаге, как бухгалтер сводит дебет с кредитом. Функция size и инспектор Workspace — ваши главные союзники в этой проверке. Когда расчёт даёт неожиданный результат, первый вопрос почти всегда: «а каких размеров получились мои матрицы?».
Итоги
- В MATLAB всё — матрица: скаляр 1×1, вектор 1×n или n×1.
- Строка и столбец — разные объекты; апостроф транспонирует.
- Память column-major: линейная индексация и агрегаты идут по столбцам.