В этом примере показано, как использовать нормализацию, чтобы улучшиться, интерполяция данных, имеющий разброс заканчивается с griddata
. Нормализация может улучшить результаты интерполяции в некоторых случаях, но в других она может поставить под угрозу точность решения. Использовать ли нормализацию, суждение, сделанное на основе природы интерполируемых данных.
Преимущества: Нормализация ваших данных может потенциально улучшить результат интерполяции, когда независимые переменные имеют различные модули и существенно различные шкалы. В этом случае масштабирование входных параметров, чтобы иметь подобные величины может улучшить числовые аспекты интерполяции. Пример, где нормализация была бы выгодна, то, если x
представляет скорость вращения двигателя в RPMs от 500 до 3 500, и y
представляет загрузку механизма от 0 до 1. Шкалы x
и y
отличайтесь несколькими порядками величины, и у них есть различные модули.
Предостережения: Соблюдите осторожность при нормализации данных, если независимые переменные имеют те же модули, даже если шкалы переменных отличаются. С данными тех же модулей нормализация искажает решение путем добавления направленного смещения, которое влияет на базовую триангуляцию и в конечном счете ставит под угрозу точность интерполяции. Пример, где нормализация ошибочна, то, если оба x
и y
представляйте местоположения и имейте модули метров. Масштабирование x
и y
неравноценно не рекомендуется, потому что должный Восток на 10 м должен быть пространственно тем же самым как должным Севером на 10 м.
Создайте некоторые выборочные данные где значения в y
несколько порядков величины, больше, чем те в x
. Примите тот x
и y
имейте различные модули.
x = rand(1,500)/100; y = 2.*(rand(1,500)-0.5).*90; z = (x.*1e2).^2;
Используйте выборочные данные, чтобы создать сетку точек запроса. Интерполируйте выборочные данные на сетке и постройте результаты.
X = linspace(min(x),max(x),25); Y = linspace(min(y),max(y),25); [xq, yq] = meshgrid(X,Y); zq = griddata(x,y,z,xq,yq); plot3(x,y,z,'mo') hold on mesh(xq,yq,zq) xlabel('x') ylabel('y') hold off
К результату приводит griddata
не очень является гладким и, кажется, является шумным. Отличающиеся шкалы в независимых переменных способствуют этому, поскольку небольшое изменение в размере одной переменной может привести к намного большему изменению в размере другой переменной.
Начиная с x
и y
имейте различные модули, нормируя их так, чтобы у них были подобные величины, должен помочь привести к лучшим результатам. Нормируйте точки выборки с помощью z-баллов и регенерируйте интерполяцию с помощью griddata
.
% Normalize Sample Points x = normalize(x); y = normalize(y); % Regenerate Grid X = linspace(min(x),max(x),25); Y = linspace(min(y),max(y),25); [xq, yq] = meshgrid(X,Y); % Interpolate and Plot zq = griddata(x,y,z,xq,yq); plot3(x,y,z,'mo') hold on mesh(xq,yq,zq)
В этом случае нормализация точек выборки разрешает griddata
вычислить более сглаженное решение.