Сглаживание предполагает использование набора значений y (и возможно x) и возвращение нового набора значений y, который является более гладким, чем исходный набор. В отличие от регрессии и интерполяции, обсужденных ранее, сглаживание приводит к новому набору значений y, а не к функции, которая может оценивать значения между заданными точками данных. Таким образом, если Вас интересуют значения y между заданными значениями y, необходимо использовать интерполяцию или регрессию.
Всякий раз, когда в любой из функций, описанных в этом разделе, используются векторы, убедитесь, что каждый элемент в векторе определён. Так как каждый элемент в векторе должен иметь значение, Mathcad присваивает значение 0 любым элементам, которые явно не определены.
Функция medsmooth — наиболее устойчивая из трех, так как в меньшей степени подвержена влиянию зашумленных данных. Эта функция использует сглаживание с помощью скользящей медианы, вычисляет остатки, сглаживает остатки тем же самым образом и суммирует эти два сглаженных вектора вместе. Более подробно:
- Вычисление medsmooth (vy, n) начинается со сглаживания скользящей медианой исходного вектора vy. Сглаженный вектор мы будем называть . Его i-ый элемент дается выражением: vy'i = median(vyi-(n-1)/2,...vyi,...vyi+(n-1)/2).
- Затем вычисляются остатки: vr = vy - vy'.
- Вектор остатков, vr, сглаживается с использованием процедуры, описанной на шаге 1. Это дает сглаженный вектор остатков vr'.
- Функция medsmooth возвращает сумму из этих двух сглаженных векторов: medsmooth(vy, n) = vy' + vr'.
Обратите внимание, что medsmooth будет оставлять первые и последние (n-1)/2 точки неизменяемыми. На практике длина окна сглаживания n должна быть мала по сравнению с длиной набора данных.
Функция ksmooth использует гауссово ядро, чтобы вычислить локально взвешенные средние значения исходного вектора vy. Это сглаживание наиболее полезно, когда данные взяты в точках, отделяемых друг от друга интервалами приблизительно равной ширины. Если длина интервалов существенно изменяется, следует использовать адаптивное сглаживание подобное supsmooth.
Для каждого vyi в n-мерном векторе vy функция ksmooth возвращает новый vy'i, даваемый формулой
где
и b — параметр сглаживания. Его величина обычно устанавливается в несколько раз больше величины интервала между точками данных на оси x и определяется тем, насколько большое окно желательно использовать при сглаживании.
Функция supsmooth использует симметричную линейную процедуру сглаживания методом наименьших квадратов по правилу k-ближайших соседей, чтобы выполнить локальную линейную аппроксимацию исходных данных. В отличие от ksmooth, который использует фиксированную ширину полосы сглаживания для всех исходных данных, supsmooth адаптивно выбирает различную ширину полосы сглаживания для различных частей данных.
medsmooth (vy, n) |
Возвращает m-мерный вектор, созданный сглаживанием vy с помощью скользящей медианы. vy есть m-мерный вектор вещественных чисел. n — ширина окна, по которому происходит сглаживание. n должно быть нечетным числом, меньшим, чем число элементов в vy. |
Е ksmooth (vx, vy, b) |
Возвращает n-мерный вектор, созданный сглаживанием при помощи гауссова ядра данных из vy. vy и vx — n-мерные векторы вещественных чисел. Параметр b управляет окном сглаживания и должен быть установлен в несколько раз больше величины интервала между точками x. |
Е supsmooth (vx, vy) |
Возвращает n-мерный вектор, созданный локальным использованием симметричной линейной процедуры сглаживания методом наименьших квадратов по правилу k-ближайших соседей, в которой k выбирается адаптивно. vy и vx — n-мерные векторы вещественных чисел. Элементы vx должны быть расположены в порядке возрастания. |
Рисунок 13: Сглаживание зашумленных данных с помощью supsmooth.
|