Многомерная интерполяция.
Yp = linear_interpn(x, val, xp, outmode);
x – сетка аргументов, заданная матрицей [[значения аргументов по размерности 1],... [значения аргументов по размерности N]];
val – массив значений для заданной многомерной сетки. Если N=3 и размерности x[1], x[2] и x[3] равны соответственно nx, ny, nz, то номер элемента (начиная с 0) массива val, соответствующего координатам (i,j,k) будет равен i+nx(j+ny·k);
xp – входные интерполируемые координаты. Задаются матрицей, размерностью n на N, где n – количество интерполируемых точек, N – размерность интерполяции. Координата i-й точки представляется как xp[i][0] …. xp[i][N];
outmode – метод экстраполяции при выходе за сетку: 0 – линейная экстраполяция, 1- константа вне диапазона, 2 – ноль вне диапазона;
linear_interpn – реализует линейную интерполяцию многомерной функции val, зависящей от массива аргументов x в точках с координатами xp.
Yp – функция возвращает массив интерполированных значений, размерностью равной количеству входных точек n (количеству строк входной матрицы xp).
x = [[0, 1, 2, 9], //Аргументы по размерности i [0, 5, 8], //Аргументы по размерности j [0, 3]]; //Аргументы по размерности k //массив значений функции: val = // j = 0 j = 1 j = 2 //|i=0 1 2 3 |i= 0 1 2 3 |i= 0 1 2 3 | [ 0, 0.1, 1.1, 1.2, 3.5, 3.3, 6.1, 6.2, 7.1, 7.2, 9.1, 9.2, //k=0 8.1, 8.3, 5.6, 5.9, 3.7, 3.9, 18.1, 18.3, 15.6, 5.9, 13.7, 13.9]; //k=1 xp = [[1, 5, 3],[3, 2, 1]]; //массив входных точек Yp = linear_interpn(x,val,xp,1);
В результате выполнения данного скрипта переменная Yp получит значение [3.9, 5.6]. Элементы массива Yp равны значению функции в точках с координатами [1, 5, 3] и [3, 2, 1]. Координаты первой точки являются табличными. Определение номера точки в трехмерном массиве значений функции происходит по формуле i+nx(j+ny·k), начиная с 0, где i, j, k – номера, под которыми стоят координаты в своих векторах, а nx, ny, nz – количество элементов в векторах, образующих x. В данном случае [i, j, k] = [1,1,1] так как 1, 5 и 3 являются элементами с номерами 1 в векторах, образующих x; а [nx, ny, nz] = [4, 3, 2]. Таким образом i+nx(j+ny·k) = 1+4(1+3·1) = 17, то есть элемент, соответствующий табличным координатам [1,5,3] находится в массиве значений функции на 17-ом месте и равняется 3.9. Вручную определить значение, соответствующее точке с табличными координатами можно, представив массив условной координатной сеткой в соответствии с номерами искомых координат в векторе аргумента соответствующей размерности, начиная с 0. В приведенном примере вектор аргументов по размерности k состоит из двух элементов, что соответствует группировке массива на две строки. Вектор размерности по j состоит из трех элементов, что соответствует разбиению массива на 3 столбца. И вектор размерности i состоящий из 4 элементов будет соответствовать разбитию каждого столбца на 4 подэлемента. В этом случае координаты 1;5;3, для которых [i, j, k] = [1,1,1], соответствуют элементу 3.9, стоящему на пересечении соответствующих координат. Для значений координат не являющихся табличными выполняется линейная интерполяция по соседним точкам.