tablelookup

Возвращаемое значение на основе интерполяции набора точек данных

Синтаксис

tablelookup(x1d, x2d, x3d, x4d, fd, x1, x2, x3, x4, interpolation = linear|smooth, extrapolation = linear|nearest|error)

Описание

Используйте функцию tablelookup в разделе equations, чтобы вычислить выходное значение путем интерполяции входного значения против набора точек данных. Эта функциональность подобна тому из Simulink® и блоков Интерполяционной таблицы Simscape™. Это позволяет вам включать табличное моделирование непосредственно в ваш авторский блок без потребности соединения внешнего блока Lookup Table к вашей модели.

Поддержки функции tablelookup одномерные, двумерные, 3D, и четырехмерные интерполяционные таблицы. Полный синтаксис:

tablelookup(x1d, x2d, x3d, x4d, fd, x1, x2, x3, x4, interpolation = linear|smooth, extrapolation = linear|nearest|error)

x1d

Набор данных входных значений вдоль первого направления, заданного как одномерный массив. Значения должны быть строго монотонными, или увеличение или уменьшение. Это - обязательный аргумент.

x2d

Набор данных входных значений вдоль второго направления, заданного как одномерный массив. Значения должны быть строго монотонными, или увеличение или уменьшение. Этот аргумент используется только для двумерного и 3D поиска по таблице.

x3d

Набор данных входных значений вдоль третьего направления, заданного как одномерный массив. Значения должны быть строго монотонными, или увеличение или уменьшение. Этот аргумент используется только для 3D поиска по таблице.

x4d

Набор данных входных значений вдоль четвертого направления, заданного как одномерный массив. Значения должны быть строго монотонными, или увеличение или уменьшение. Этот аргумент используется только для 3D поиска по таблице.

fd

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

Для одномерного поиска по таблице fd должен быть одномерным массивом, одного размера как x1d.

Для двумерного поиска по таблице fd должен быть двумерным массивом с размером, совпадающим с размерностями, заданными наборами входных данных. Например, если x1d является 1 m массивом, и x2d является 1 n массивом, то fd должен быть m-by-n матрица.

Для 3D поиска по таблице fd должен быть 3D массивом с размером, совпадающим с размерностями, заданными наборами входных данных. Например, если x1d является 1 m массивом, x2d является 1 n массивом, и x3d является 1 p массивом, то fd должен быть m-by-n-by-p массив.

Для четырехмерного поиска по таблице fd должен быть четырехмерным массивом с размером, совпадающим с размерностями, заданными наборами входных данных. Например, если x1d является 1 m массивом, x2d является 1 n массивом, x3d является 1 p массивом, и x4d является 1 q массивом, то fd должен быть m-by-n-by-p-by-q массив.

x1

Входное значение вдоль первого направления. Его модули должны быть соразмерными с модулями x1d. Это - обязательный аргумент.

x2

Входное значение вдоль второго направления. Его модули должны быть соразмерными с модулями x2d. Этот аргумент используется только для двумерного и 3D поиска по таблице.

x3

Входное значение вдоль третьего направления. Его модули должны быть соразмерными с модулями x3d. Этот аргумент используется только для 3D поиска по таблице.

x4

Входное значение вдоль четвертого направления. Его модули должны быть соразмерными с модулями x4d. Этот аргумент используется только для четырехмерного поиска по таблице.

interpolation = linear|smooth

Дополнительный аргумент, который задает метод приближения для вычисления выходного значения, когда входное значение в области значений, заданной в интерполяционной таблице. Значением по умолчанию является interpolation = linear.

extrapolation = linear|nearest|error

Дополнительный аргумент, который задает метод приближения для вычисления выходного значения, когда входное значение вне области значений, заданной в интерполяционной таблице. Значением по умолчанию является extrapolation = linear.

Значения аргументов interpolation:

  • linear — Для одномерного поиска по таблице, использует линейную функцию. Для двумерного и 3D поиска по таблице, использует расширение линейного алгоритма для многомерной интерполяции, путем выполнения линейной интерполяции в первом направлении, затем во втором направлении, и затем в третьем направлении. Используйте этот метод, чтобы получить лучшую производительность.

  • smooth — Использует измененный алгоритм Акима, описанный в Сглаженном Алгоритме Интерполяции. Используйте этот метод, чтобы произвести непрерывную кривую или поверхность с непрерывными производными первого порядка.

Значения аргументов extrapolation:

  • linear — Расширяет от ребра области интерполяции линейно. Наклон линейной экстраполяции равен наклону интерполированной кривой или поверхности в ребре области интерполяции. Используйте этот метод, чтобы произвести кривую или поверхность с непрерывным значением и непрерывными производными первого порядка на контуре между областью интерполяции и областью экстраполяции.

  • самый близкий Расширяет от ребра области интерполяции как константа. Значение самой близкой экстраполяции равно значению интерполированной кривой или поверхности в ребре области интерполяции. Используйте этот метод, чтобы произвести кривую или поверхность с непрерывным значением на контуре между областью интерполяции и областью экстраполяции, которая не выходит за предел самой высокой точки в данных или ниже самой низкой точки в данных.

  • ошибка Генерирует ошибку, когда входное значение вне области значений, заданной в интерполяционной таблице.

Функция возвращает выходное значение, в модулях, заданных для fd, путем поиска или оценки табличных значений на основе входных значений:

Когда входные параметры x1, x2, x3 и x4...Функция tablelookup...
Совпадайте со значениями в наборах входных данных, x1d, x2d, x3d и x4dВыводит соответствующее табличное значение, fd
Не совпадайте со значениями в наборах входных данных, но в области значенийИнтерполирует соответствующие табличные значения, с помощью метода, заданного как значение аргумента interpolation
Не совпадайте со значениями в наборах входных данных, и вне области значенийЭкстраполирует выходное значение, с помощью метода, заданного как значение аргумента extrapolation

Проверка ошибок

Следующие правила применяются к наборам данных x1d, x2d, x3d, x4d и fd:

  • Для одномерного поиска по таблице x1d и fd должны быть одномерными массивами, одного размера.

  • Для двумерного поиска по таблице x1d и x2d должны быть одномерными массивами, и fd должен быть матрицей с размером, совпадающим с размерностями, заданными наборами входных данных. Например, если x1d является 1 m массивом, и x2d является 1 n массивом, то fd должен быть m-by-n матрица.

  • Для 3D поиска по таблице x1d, x2d и x3d должны быть одномерными массивами, и fd должен быть 3D массивом с размером, совпадающим с размерностями, заданными наборами входных данных. Например, если x1d является 1 m массивом, x2d является 1 n массивом, и x3d является 1 p массивом, то fd должен быть m-by-n-by-p массив.

  • Для четырехмерного поиска по таблице x1d, x2d, x3d и x4d должны быть одномерными массивами, и fd должен быть четырехмерным массивом с размером, совпадающим с размерностями, заданными наборами входных данных. Например, если x1d является 1 m массивом, x2d является 1 n массивом, x3d является 1 p массивом, и x4d является 1 q массивом, то fd должен быть m-by-n-by-p-by-q массив.

  • x1d, x2d, x3d и значения x4d должны быть строго монотонными, или увеличение или уменьшение.

  • Для сглаженной интерполяции каждый набор данных входных значений должен содержать по крайней мере три значения. Для линейной интерполяции два значения достаточны.

Используя перечисления для опций интерполяции и экстраполяции

Библиотека Foundation включает встроенные перечисления, interpolation.m и extrapolation.m:

classdef interpolation < int32
   enumeration
       linear (1)
       smooth (2)
   end
   methods(Static)
    function map = displayText()
      map = containers.Map;
      map('linear') = 'Linear';
      map('smooth') = 'Smooth';
    end
  end
end
classdef extrapolation < int32
   enumeration
       linear (1)
       nearest (2)
       error (3)
   end
   methods(Static)
    function map = displayText()
      map = containers.Map;
      map('linear') = 'Linear';
      map('nearest') = 'Nearest';
      map('error') = 'Error';
    end
  end
end

Эти перечисления расположены в директории matlabroot \toolbox\physmod\simscape\library\m\+simscape\+enum.

Можно использовать эти перечисления, чтобы объявить параметры компонента, и затем использовать эти параметры в качестве аргументов функции tablelookup. Для получения дополнительной информации смотрите Заданный Пользователями пример Методов Интерполяции и Экстраполяции и Используя Перечисление в Аргументах функции.

Примеры

1D реализация интерполяционной таблицы

Этот пример реализует одномерную интерполяционную таблицу с линейной интерполяцией и экстраполяцией.

component tlu_1d_linear
 inputs
   u = 0;
 end
 outputs
   y = 0;
 end
 parameters (Size=variable)
   xd = [1 2 3 4];
   yd = [1 2 3 4];
 end
 equations
   y == tablelookup(xd, yd, u);
 end
end

xd и yd объявляются как параметры переменного размера. Это позволяет пользователям блока обеспечить свои собственные наборы данных, когда компонент преобразован в авторский блок. Для получения дополнительной информации смотрите Используя Интерполяционные таблицы в уравнениях.

Значения xd должны быть строго монотонными, или увеличение или уменьшение. yd должен иметь тот же размер как xd.

2D реализация интерполяционной таблицы

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

component tlu_2d
 inputs
   u1 = 0;
   u2 = 0;
 end
 outputs
   f = 0;
 end
 parameters (Size=variable)
   x1d = [1 2 3 4];
   x2d = [1 2 3];
   fd = [1 2 3; 3 4 5; 5 6 7; 7 8 9];
 end
 equations
   f == tablelookup(x1d, x2d, fd, u1, u2, interpolation=smooth, extrapolation=nearest);
 end
end

x1d, x2d и fd объявляются как параметры переменного размера. x1d и значения вектора x2d должны быть строго монотонными, или увеличение или уменьшение. Для сглаженной интерполяции каждый вектор должен иметь по крайней мере три значения. Размер матрицы fd должен совпадать с размерностями векторов x2d и x1d.

Интерполяция использует измененный алгоритм Акима, как описано в Сглаженном Алгоритме Интерполяции. Экстраполяция использует самое близкое значение fd для u1 из области значений и значения u2.

Заданные пользователями методы интерполяции и экстраполяции

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

import simscape.enum.*
component tlu_2d_enum
 inputs
   u1 = 0;
   u2 = 0;
 end
 outputs
   f = 0;
 end
 parameters (Size=variable)
   x1d = [1 2 3 4];
   x2d = [1 2 3];
   fd = [1 2 3; 3 4 5; 5 6 7; 7 8 9];
 end
 parameters
   interp = interpolation.linear; % Interpolation method
   extrap = extrapolation.linear; % Extrapolation method
 end
 equations
   f == tablelookup(x1d, x2d, fd, u1, u2, interpolation=interp, extrapolation=extrap);
 end
end

Компонент импортирует встроенные перечисления, и затем использует их, чтобы объявить два дополнительных параметра: interp (Interpolation method) и extrap (Extrapolation method). Функция tablelookup использует эти параметры в качестве аргументов, чтобы задать методы интерполяции и экстраполяции. Для получения дополнительной информации смотрите Используя Перечисление в Аргументах функции.

Блок, сгенерированный от этого компонента, будет иметь Interpolation method и параметры Extrapolation method, обоих со значением по умолчанию Linear. Пользователь блока может выбрать любые другие опции интерполяции и экстраполяции.

Используя интерполяционную таблицу с модулями

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

component TtoP
 inputs
   u = {0, 'K'}; % temperature
 end
 outputs
   y = {0, 'Pa'}; % pressure
 end
 parameters (Size=variable)
   xd = {[100 200 300 400] 'K'};
   yd = {[1e5 2e5 3e5 4e5] 'Pa'};
 end
 equations
   y == tablelookup(xd, yd, u);
 end
end

xd и yd объявляются как параметры переменного размера с модулями. Это позволяет пользователям блока обеспечить свои собственные наборы данных, когда компонент преобразован в авторский блок, и также выбрать соразмерные модули из раскрытия в диалоговом окне авторского блока. Для получения дополнительной информации смотрите Используя Интерполяционные таблицы в уравнениях.

Значения xd должны быть строго монотонными, или увеличение или уменьшение. yd должен иметь тот же размер как xd.

Сглаженный алгоритм интерполяции

Для сглаженной интерполяции функция использует измененный алгоритм Акима. Для одномерной сглаженной интерполяции алгоритм Акима, описанный в [1], производит непрерывную кривую с непрерывными производными первого порядка. Это также пытается сохранить наклон и избежать волнистостей, где данные предлагают плоскую область.

Алгоритм интерпретирует данные как плоскую область каждый раз, когда существует три или больше последовательных колинейных точки в табличных данных. Это затем соединяет те три или больше точки с прямой линией. Колинейные точки не должны быть горизонталью. Чтобы гарантировать, что область между двумя точками данных является плоской, вставьте дополнительную точку данных между теми двумя точками.

Следующие графические показы различие между Акима и интерполяцией сплайна.

Когда две плоских области с различными наклонами встречаются, не возможно избежать волнистости при поддержании гладкости. Исходный алгоритм Акима дает равные веса точкам с обеих сторон, таким образом равномерно деля волнистость. Измененный алгоритм, используемый в этой функции, дает больше веса стороне, где наклон ближе к нулю. Эта модификация уделяет первостепенное значение стороне, которая ближе к горизонтали, которая более интуитивна (см. затем графический).

Для многомерной интерполяции метод Акима расширен путем вычисления смешанных производных в узлах решетки с помощью взвешенного среднего конечных разностей, как описано в [2].

Ссылки

[1] Акима, Хироши. "Новый метод интерполяции и плавной кривой, соответствующей на основе локальных процедур". Журнал ACM (JACM), 17.4, 1970, стр 589-602.

[2] Акима, Хироши. "Метод двумерной интерполяции и сглаженной поверхности, соответствующей на основе локальных процедур". Коммуникации ACM, 17.1, 1974, стр 18-20.

Представленный в R2012a