exponenta event banner

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

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

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

Кроме того, триангуляция вблизи выпуклой границы корпуса может иметь щелевидные треугольники. Эти треугольники могут скомпрометировать результаты экстраполяции так же, как они могут скомпрометировать результаты интерполяции. Дополнительные сведения см. в разделе Плохие результаты интерполяции вблизи выпуклого корпуса.

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

Сравнение экстраполяции грубых и тонких выборочных данных

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

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

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. The axes 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. The axes 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. The axes contains an object of type surface.

Оценить F2 и постройте график результатов.

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

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

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

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

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

Создайте сетку из образцов точек 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');

Вычислите интерполяцию по оси 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. The axes contains an object of type surface.

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