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