Диапазоны: двоеточие и linspace
Самый употребимый инструмент MATLAB — двоеточие, создающее последовательности чисел.
Оператор-диапазон
a:s:bстроит вектор-строку отaдоbс шагомs.
Двоеточие как генератор
Запись 1:5 создаёт вектор [1 2 3 4 5]. Это не цикл и не специальный объект — это сразу готовый числовой вектор. Шаг по умолчанию равен единице; чтобы задать другой, ставят его в середину: a:s:b. Шаг может быть дробным и отрицательным.
x = 1:5 % 1 2 3 4 5
y = 0:2:10 % 0 2 4 6 8 10
z = 10:-1:7 % 10 9 8 7 (обратный счёт)
Вывод:
x =
1 2 3 4 5
y =
0 2 4 6 8 10
z =
10 9 8 7
linspace: фиксированное число точек
Иногда важен не шаг, а количество точек — например, чтобы построить гладкий график. Тогда удобнее linspace(a, b, n): ровно n точек, равномерно от a до b включительно. Если n опустить, берётся 100.
t = linspace(0, 1, 5) % 0 0.25 0.5 0.75 1
Вывод:
t =
0 0.2500 0.5000 0.7500 1.0000
Когда что выбирать
| Нужно | Инструмент |
| известен шаг | a:s:b |
| известно число точек | linspace(a,b,n) |
| индексы для цикла/среза | 1:n |
Диапазоны — основа индексации и построения графиков. Ось абсцисс почти всегда задают через linspace или двоеточие, а потом вычисляют функцию сразу на всём векторе.
Как работает под капотом
Двоеточие и linspace отличаются способом подсчёта. Диапазон a:s:b может не попасть точно в b, если b-a не делится на шаг нацело; тогда последний элемент будет меньше b. А linspace гарантирует, что и первая, и последняя точки — ровно a и b. Кроме того, при дробном шаге накапливается ошибка округления double, поэтому для гладких осей графиков предпочитают именно linspace.
Колоночные и строчные диапазоны
По умолчанию двоеточие создаёт вектор-строку. Чтобы получить столбец, диапазон транспонируют: (1:5)' даёт вертикальный вектор. Это часто нужно, когда диапазон выступает осью данных, которые лежат по столбцам, или когда его предстоит склеивать с другими столбцами в матрицу. Ещё одна частая идиома — построить по диапазону сразу таблицу значений: x = (0:0.1:10)'; y = sin(x); и затем plot(x, y). Здесь диапазон, транспонирование и векторное вычисление функции складываются в три строки, которые в языке со скалярным мышлением заняли бы целый цикл. Привыкайте видеть в диапазоне не просто «счётчик», а готовую ось будущего расчёта.
Частые ошибки
- Ожидать, что
0:0.1:1даст ровно конец 1.0 — из-за округления последний элемент может «не дойти». - Путать порядок аргументов: в
linspaceтретий аргумент — число точек, а не шаг. - Забыть, что для убывающей последовательности шаг должен быть отрицательным, иначе получится пустой вектор.
Диапазоны как сердце векторного кода
Трудно переоценить, насколько часто двоеточие встречается в реальном коде MATLAB. Им задают ось времени для сигнала, сетку точек для графика, набор индексов для цикла или среза, последовательность параметров для перебора. Фактически почти любой расчёт начинается с того, что двоеточием или linspace создаётся вектор независимой переменной, а затем функция вычисляется на нём целиком. Это прямое продолжение векторного мышления: вместо «для каждого x посчитать y» вы говорите «вот все x — посчитай все y разом».
logspace и логарифмические шкалы
У linspace есть важный родственник — logspace(a, b, n), создающий точки, равномерно распределённые в логарифмическом масштабе (от 10 в степени a до 10 в степени b). Он незаменим, когда величина меняется на много порядков: частотные характеристики фильтров, спектры, диаграммы Боде традиционно строят по логарифмической оси. Если попытаться покрыть диапазон от 1 до миллиона равномерным линейным шагом, почти все точки скучатся в верхней части; логарифмическая сетка распределяет их разумно — поровну на каждый порядок. Понимание, когда нужна линейная, а когда логарифмическая сетка, — признак зрелого инженерного подхода к данным.
Итоги
a:s:b— диапазон с заданным шагом; шаг по умолчанию 1, может быть отрицательным.linspace(a,b,n)— ровно n точек, концы включены.- Для гладких осей графика берите
linspace— он точен на концах.