В этом примере показано, как использовать нормализацию для улучшения результатов данного , имеющего разброса с помощью griddata
. Нормализация может улучшить результаты интерполяции в одних случаях, но в других она может поставить под угрозу точность решения. Использовать ли нормализацию - это суждение, вынесенное на основе характера интерполируемых данных.
Преимущества: Нормализация ваших данных может потенциально улучшить результат интерполяции, когда независимые переменные имеют различные модули измерения и существенно разные шкалы. В этом случае масштабирование входов, чтобы иметь сходные величины, может улучшить числовые аспекты интерполяции. Пример, где нормализация была бы выгодна, если бы x
представляет скорость вращения двигателя в оборотах от 500 до 3500 и 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
для вычисления более плавного решения.