Этот пример показывает, как использовать нормализацию, чтобы улучшить результаты интерполяции данных, имеющий разброс с 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
имеют различные модули, нормализуя их так, чтобы у них были подобные значения, должен помочь привести к лучшим результатам. Нормализуйте точки выборки с помощью стандартных отклонений и регенерируйте интерполяцию с помощью griddata
.
% Normalize Sample Points x = (x-mean(x))/std(x); y = (y-mean(y))/std(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
вычислять более сглаженное решение.