interpolate

Полиномиальной интерполяция

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.

Синтаксис

interpolate(xList, yList, X, <F>)
interpolate(nodes, values, ind, <F>)

Описание

interpolate вычисляет интерполяционный многочлен через данные по прямоугольной сетке.

interpolate(xList, yList, X) вызова с xList = [x1, …, xn] и yList = [y1, …, yn] возвращает полином степени меньше, чем n в переменной X, которая интерполирует точки (x 1, y 1), …, (x n, y n).

Этот вызов с 1-мерной сеткой xList эквивалентен соответствующему 'многомерному' вызову interpolate([xList], array(1..n, [yList]), [X]).

Для d - размерная интерполяция, примите, что indeterminates ind = [X 1, …, X d] задан. Интерполяционный многочлен P = poly (…, [X 1, …, X d], F) удовлетворяет

для всех точек в сетке. P является полиномом минимальной степени, удовлетворяющей условия интерполяции, т.е. degree (P, X i) <n i.

Только интерполируя значения в конкретных числовых точках X 1 = v 1, …, X d = v d требуется, мы рекомендуем не вычислить P с символьным indeterminates ind = [X 1, …, X d] и затем оценить P (v 1, …, v d). Это быстрее, чтобы вычислить это значение непосредственно interpolate с ind = [v 1, …, v d]Пример Cf. в качестве примера 1 и Пример 3.

Примеры

Пример 1

Мы рассматриваем 1-мерную проблему интерполяции. К каждому узлу x i значение y сопоставлен i. Интерполяционный многочлен P с P (x i) = y i:

xList := [1, 2, 3]:
yList := [y1, y2, y3]:
P := interpolate(xList, yList, X)

Оценкой P в точке дают:

evalp(P, X = 5/2)

Это значение может также быть вычислено непосредственно без символьного полинома:

interpolate(xList,  yList, 5/2)

delete xList, yList, P:

Пример 2

Мы демонстрируем многомерную интерполяцию. Рассмотрите данные по следующим 2-мерным 2 ×3 сеткам:

XList := [1, 2]: YList := [1, 2, 3]:
values := array(1..2, 1..3, [[1, 2, 3], [3, 2, 1]]):
P := interpolate([XList, YList], values, [X, Y])

Затем, интерполяция по 3-мерным 2 ×3×2 сеткам продемонстрирована:

L1 := [1, 2]: L2 := [1, 2, 3]: L3 := [1, 2]:
values := array(1..2, 1..3, 1..2,
   [[[1, 4], [1, 2], [3, 3]], [[1, 4], [1, 3], [4, 0]]]):
interpolate([L1, L2, L3], values, [X, Y, Z])

delete XList, values, P, L1, L2, L3:

Пример 3

Мы интерполируем данные по 2-мерной сетке:

n1 := 4: L1 := [i $ i = 1..n1]:
n2 := 5: L2 := [i $ i = 1..n2]:
f := (X, Y) -> 1/(1 + X^2 + Y^2):
values := array(1..n1, 1..n2,
                [[f(L1[i], L2[j]) $ j=1..n2] $ i=1..n1]):

Во-первых, мы вычисляем символьный полином:

P := interpolate([L1, L2], values, [X, Y])

Фиксируя значение Y = 2.5, это приводит к полиному в X.

evalp(P, Y = 2.5)

Это может также быть вычислено непосредственно при помощи точки оценки для неопределенного Y:

interpolate([L1, L2], values, [X, 2.5])

Если все indeterminates заменяются точками оценки, соответствующее значение интерполяции возвращено:

interpolate([L1, L2], values, [1.2, 2.5])

delete n1, n2, f, values, P:

Пример 4

Мы демонстрируем интерполяцию по специальному содействующему полю. Рассмотрите следующие данные по 2-мерным 2 ×3 сеткам:

XList := [3, 4]: YList := [1, 2, 3]:
values := array(1..2, 1..3, [[0, 1, 2], [3, 2, 1]]):

Со следующим вызовом эти данные преобразованы в целые числа по модулю 7. Арифметика по этому полю используется:

F := Dom::IntegerMod(7):
P := interpolate([XList, YList], values, [X, Y], F)

Оценка P в узлах решетки воспроизводит присваиваемые значения, преобразованные в поле:

evalp(P, X = XList[2], Y = YList[3]) = F(values[2, 3])

delete XList, YList, values, F, P:

Параметры

xList

Узлы: список [x1, x2, …] отличных арифметических выражений

yList

Значения: список [y1, y2, …] арифметических выражений. Этот список должен иметь ту же длину как xList.

X

Неопределенное или арифметическое выражение. Неопределенным является любой идентификатор (доменного типа DOM_IDENT) или индексируемый идентификатор (типа "_index").

nodes

Список [L 1, …, L d] d перечисляет L i, задающий d - размерная прямоугольная сетка

.

Списки L i могут иметь различные длины n i = |Li |. Элементы каждого i L должны быть отличными.

values

d - размерный array(1..n[1],...,1..n[d], [...]) или hfarray(1..n[1],...,1..n[d], [...]), сопоставляющий значение с каждым узлом решетки:

,

ind

Список d indeterminates или арифметических выражений. Indeterminates являются любой идентификаторами (доменного типа DOM_IDENT) или индексированными идентификаторами (типа "_index").

F

Или Expr или любое поле категории Cat::Field

Возвращенный полином имеет тип poly (..., F).

Для поля Expr по умолчанию все входные данные могут быть произвольными выражениями MuPAD®. Стандартная арифметика по таким выражениям используется, чтобы вычислить полином.

Для F, не являющегося Expr, узлы сетки, а также записи values должны быть элементами F или должны быть конвертируемыми к таким элементам. Преобразование входных данных к элементам F сделано автоматически.

Возвращаемые значения

Интерполяционный многочлен P доменного типа DOM_POLY в indeterminates, заданном ind по содействующему полю F, возвращен. Элементы в ind, которые не являются indeterminates, но арифметическими выражениями, не используются в качестве indeterminates в P, но вводят его коэффициенты: полином “оценен” в этих точках. Если никакой элемент ind не является неопределенным, значение полинома в точке, заданной ind, возвращено. Это - элемент поля F или арифметического выражения если F = Expr.

Алгоритмы

Для d - размерная прямоугольная сетка

заданный списками

с присваиваемыми значениями

,

интерполяционный многочлен в indeterminates X 1, …, X d дают

с Лагранжевыми полиномами

сопоставленный с k-th узел j-th координата.

Смотрите также

Функции MuPAD