Ответ 1
Это не просто удобство использования. Хотя в документации говорится:
Функция
linspace
генерирует линейно разнесенные векторы. это подобно оператору двоеточия:, но дает прямой контроль над количество баллов.
то же самое, основное отличие и преимущество linspace
заключается в том, что он генерирует вектор целых с нужной длиной (или значением по умолчанию 100) и масштабирует ее впоследствии до нужного диапазона. Оболочка :
создает вектор напрямую с помощью приращений.
Представьте, что вам нужно определить края бункера для гистограммы. И особенно вам нужно, чтобы определенный край бункера 0.35
был точно на нем в нужном месте:
edges = [0.05:0.10:.55];
X = edges == 0.35
edges = 0.0500 0.1500 0.2500 0.3500 0.4500 0.5500
X = 0 0 0 0 0 0
не определяет правый край буфера, но:
edges = linspace(0.05,0.55,6); %// 6 = (0.55-0.05)/0.1+1
X = edges == 0.35
edges = 0.0500 0.1500 0.2500 0.3500 0.4500 0.5500
X = 0 0 0 1 0 0
делает.
Ну, это в основном проблема с плавающей запятой. Какую можно избегать linspace
, поскольку разделение целого числа одиночное не является таким деликатным, как совокупная сумма чисел флотирования. Но как отметил Марк Дикинсон в комментариях:
Вы не должны полагаться на какое-либо из вычисленных значений, именно то, что вы ожидаете. Это не то, что нужно для Linspace. На мой взгляд, вопрос о том, насколько вероятно, вы получите проблемы с плавающей запятой и сколько вы можете уменьшить вероятность для них или насколько малы вы можете установить допуски. Использование linspace может уменьшить вероятность возникновения этих проблем, это не безопасность.
Что код linspace
:
n1 = n-1
c = (d2 - d1).*(n1-1) % opposite signs may cause overflow
if isinf(c)
y = d1 + (d2/n1).*(0:n1) - (d1/n1).*(0:n1)
else
y = d1 + (0:n1).*(d2 - d1)/n1
end
Подводя итог: linspace
и двоеточие надежны при выполнении разных задач. linspace
пытается обеспечить (как следует из названия) линейный интервал, тогда как colon
пытается обеспечить симметрию
В вашем специальном случае, когда вы создаете вектор целых чисел, преимущество не linspace
(кроме юзабилити), но когда дело доходит до деликатных задач с плавающей запятой, может быть.
Ответ Сэма Робертса содержит дополнительную информацию и разъясняет дальнейшие вещи, в том числе некоторые утверждения MathWorks относительно оператора двоеточия.