Среда разработки Unimod PRO 2 (версия 2.3.40)
 Руководство по программированию
×

LINTERP1 - линейная одномерная интерполяция


Назначение.
Функциональный блок LINTERP1 применяется для вычисления значения функции методом линейной одномерной интерполяции.
Состав структурной переменной.
Переменная со структурным типом LINTERP1 будет добавлена в локальный словарь автоматически при добавлении блока в редактор.
Принцип линейной одномерной интерполяции.
Линейная интерполяция позволяет вычислять промежуточное значение линейной функции по двум известным крайним значениям, между которыми условно проводится прямая линия. Для вычислений используется следующая формула, где x1 и x2 - аргументы, f(x1) и f(x2) - соответствующие им значения функции, а x - аргумент, для которого вычисляется интерполированное значение по формуле:
Например, если для двух аргументов x1=1 и x2=2 известны значения функции F(x1)=10 и F(x2)=20, то для других аргументов, значения которых находятся между x1 и x2, на основании линейной зависимости могут быть вычислены соответствующие значения функции. Пример вычислений схематично продемонстрирован на следующем изображении.
Если известны значения функции для 3-х и более аргументов, графически это будет выглядеть в виде кусочно-линейной функции. В таком случае значения функции вычисляются для отдельного прямолинейного участка, в границы которого входит аргумент X. Данный вариант подробно описан далее в настоящем разделе.
 
Алгоритм выполнения блока.
  • На входы VX и VF передаются ссылки на массивы вещественных чисел. В массиве VX содержатся значения аргументов, а в массиве VF известные значения функции для соответствующих аргументов. В качестве примера зададим массив аргументов VX=[1, 2, 3, 4, 5] и массив соответствующих значений функции VF=[10, 30, 40, 20, 10].
  • На вход VX_SIZE передается количество аргументов из массива VX, на основании которых формируются отдельные участки линейных зависимостей (линейные функций). При этом значение VX_SIZE не должно превышать размерность массивов VX и VF. В нашем примере зададим VX_SIZE=4.
  •  Для заданного аргумента X (например X=2.4) определяется участок линейной зависимости для дальнейших вычислений.
  • В соответствии с выбранной линейной зависимостью для аргумента X вычисляется значение функции:
  • Если аргумент X выходит за диапазон имеющихся значений в массиве VX, на выход F передается значение функции для крайнего аргумента. В вышеуказанном примере при X=0.5 выход F=10, а при X=5 выход F=20.
 
Пример синтаксиса на языке ST.
//вызов функционального блока
Block.LINTERP1(X, VX, VX_SIZE, VF);
//чтение вычисленного значения функции для аргумента X
F := Block.F;       
//чтение кода ошибки
FAULT := Block.FAULT;
Список возможных ошибок на выходе FAULT.
Код ошибки
Краткое описание
1
Массив X не REAL
2
SIZE <=2 или больше размера массива X
3
Ошибка при проверке массива X
4
Ошибка доступа к массиву X
5
Массив F не REAL
6
SIZE <=2 или больше размера массива F
7
Ошибка при проверке массива F
8
Ошибка доступа к массиву F
9
Массивы содержат некорректные данные