scatteredInterpolant обеспечивает возможность аппроксимации значений в точках, которые выходят за пределы выпуклого корпуса. 'linear' метод экстраполяции основан на наименьшей квадратной аппроксимации градиента на границе выпуклого корпуса. Значения, возвращаемые для точек запроса за пределами выпуклого корпуса, основаны на значениях и градиентах на границе. Качество решения зависит от качества выборки данных. При грубой выборке данных качество экстраполяции низкое.
Кроме того, триангуляция вблизи выпуклой границы корпуса может иметь щелевидные треугольники. Эти треугольники могут скомпрометировать результаты экстраполяции так же, как они могут скомпрометировать результаты интерполяции. Дополнительные сведения см. в разделе Плохие результаты интерполяции вблизи выпуклого корпуса.
Необходимо визуально проверить результаты экстраполяции, используя свои знания поведения вне домена.
В этом примере показано, как интерполировать две различные выборки одной и той же параболической функции. Это также показывает, что лучшее распределение точек выборки дает лучшие результаты экстраполяции.
Создайте радиальное распределение точек, разнесенных на 10 градусов вокруг 10 концентрических окружностей. Использовать bsxfun чтобы вычислить координаты, cosunи 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

Создайте второй, более грубо распределенный набор точек. Используйте rand функция для создания случайных выборок в диапазоне, [-10, 10].
rng default; x2 = -10 + 20*rand([25 1]); y2 = -10 + 20*rand([25 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 привязанный к сетке набор данных с помощью 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)

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