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- n матрица.

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

Для четырехмерного поиска по таблице, fd должен быть четырехмерный массив, с размером, совпадающим с размерностями, заданными наборами входных данных. Например, если x1d 1 m массив, x2d 1 n массив, x3d 1 p массив и x4d 1 q массив, затем fd должен быть m- n- p- 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— Расширяет от ребра области интерполяции линейно. Наклон линейной экстраполяции равен наклону интерполированной кривой или поверхности в ребре области интерполяции. Используйте этот метод, чтобы произвести кривую или поверхность с непрерывным значением и непрерывными производными первого порядка за пределами между областью интерполяции и областью экстраполяции.

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

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

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

Когда входные параметры x1x2 , 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- n матрица.

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

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

Интерполяция использует модифицированный алгоритм Акима, как описано в Алгоритме Сплайн-интерполяции. Экстраполяция использует самое близкое значение 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 ExtrapolationMethod . 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

Для просмотра документации необходимо авторизоваться на сайте