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

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

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

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

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

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

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

Создайте радиальное распределение точек, расположенных с интервалами 10 градусов независимо приблизительно 10 концентрических кругов. Используйте bsxfun вычислить координаты, x=cosθ и 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

Figure contains an axes object. The axes object contains 36 objects of type line.

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

rng default;
x2 = -10 + 20*rand([25 1]);
y2 = -10 + 20*rand([25 1]);
figure
plot(x2,y2,'*')

Figure contains an axes object. The axes object contains an object of type line.

Произведите параболическую функцию, 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)

Figure contains an axes object. The axes object contains an object of type surface.

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

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

Figure contains an axes object. The axes object contains an object of type surface.

Качество экстраполяции не так хорошо для 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)

Figure contains an axes object. The axes object contains an object of type surface.

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