Экстраполирование данных, имеющий разброс

Факторы, которые влияют на точность экстраполяции

scatteredInterpolant обеспечивает функциональность для приближения значений в точках, которые выходят за пределы выпуклой оболочки. Метод экстраполяции 'linear' основан на приближении наименьших квадратов градиента на контуре выпуклой оболочки. Значения, которые это возвращает для точек запроса вне выпуклой оболочки, основаны на значениях и градиентах на контуре. Качество решения зависит от того, как хорошо вы выбрали свои данные. Если ваши данные грубо выбираются, качество экстраполяции плохо.

Кроме того, триангуляция около контура выпуклой оболочки может иметь подобные щепке треугольники. Эти треугольники могут поставить под угрозу ваши результаты экстраполяции таким же образом, что они могут поставить под угрозу результаты интерполяции. Смотрите Результаты Интерполяции, Плохие Около Выпуклой оболочки для получения дополнительной информации.

Необходимо осмотреть результаты экстраполяции визуально с помощью знания поведения вне области.

Сравнение экстраполяции грубо и точно выбранные данные, имеющий разброс

Этот пример показывает, как интерполировать две различных выборки той же параболической функции. Это также показывает, что лучшее распределение точек выборки приводит к лучшим результатам экстраполяции.

Создайте радиальное распределение точек, расположенных с интервалами 10 градусов независимо приблизительно 10 концентрических кругов. Используйте bsxfun, чтобы вычислить координаты, x=потому чтоθ и y=sinθ.

theta = 0:10:350;
c = cosd(theta);
s = sind(theta);
r = 1:10;

x1 = bsxfun(@times,r.',c);
y1 = bsxfun(@times,r.',s);

figure
plot(x1,y1,'*b')
axis equal

Создайте второй, более грубо распределенный набор точек. Используйте функцию gallery, чтобы создать случайные выборки в области значений, [-10, 10].

x2 = -10 + 20*gallery('uniformdata',[25 1],0);
y2 = -10 + 20*gallery('uniformdata',[25 1],1);
figure
plot(x2,y2,'*')

Выберите параболическую функцию, v(x,y), в обоих наборах точек.

v1 = x1.^2 + y1.^2;
v2 = x2.^2 + y2.^2;

Создайте scatteredInterpolant для каждой выборки v(x,y).

F1 = scatteredInterpolant(x1(:),y1(:),v1(:));
F2 = scatteredInterpolant(x2(:),y2(:),v2(:));

Создайте сетку точек запроса, которые расширяют вне каждой области.

[xq,yq] = ndgrid(-20:20);

Оцените F1 и постройте результаты.

figure
vq1 = F1(xq,yq);
surf(xq,yq,vq1)

Оцените F2 и постройте результаты.

figure
vq2 = F2(xq,yq);
surf(xq,yq,vq2)

Качество экстраполяции не так хорошо для F2 из-за крупной выборки точек в v2.

Экстраполяция 3-D данных

Этот пример показывает, как экстраполировать хорошо выбранный 3-D набор данных с координатной сеткой с помощью scatteredInterpolant. Точки запроса лежат на плоской сетке, которая является абсолютно внешней областью.

Создайте 10 10 10 сетками точек выборки. Точки в каждой размерности находятся в области значений, [-10, 10].

[x,y,z] = ndgrid(-10:10);

Выберите функцию, v (x, y, z), в точках выборки.

v = x.^2 + y.^2 + z.^2;

Создайте scatteredInterpolant, задав линейную интерполяцию и экстраполяцию.

F = scatteredInterpolant(x(:),y(:),z(:),v(:),'linear','linear');

Оцените interpolant по x-y сетке, охватывающей область значений, [-20,20] при повышении, z = 15.

[xq,yq,zq] = ndgrid(-20:20,-20:20,15);
vq = F(xq,yq,zq);
figure
surf(xq,yq,vq)

Экстраполяция возвратила хорошие результаты, потому что функция хорошо выбирается.