Вычисление приближенного значения некоторой функции
В данной демонстрации посмотрим на возможности вычисления приближенных значений функции при помощи Engee и изучим основные блоки, применяемые для решения этой задачи.
Анализ блоков
Блок Prelookup вычисляет номер и долю интервала, которые определяют, как его входное значение u соотносится с набором опорных точек.

Блок Interpolation Using Prelookup наиболее эффективен при использовании блока Prelookup. Блок Prelookup вычисляет индекс и долю интервала, которые определяют, как его входное значение u относится к набору данных точек разрыва. Полученные значения индекса и дроби подаются в блок Interpolation Using Prelookup для интерполяции n-мерной таблицы. Оба блока имеют интегрированные алгоритмы.

Блок n-D Lookup Table вычисляет приближенное значение некоторой функции. Данный блок и его разновидности сопоставляют входные данные с таблицей выходных значений, используя методы интерполяции и экстраполяции.

Блок Direct Lookup Table (n-D) индексирует n-мерную таблицу для извлечения скаляра, вектора или двумерной матрицы. Первый индекс выбора соответствует верхнему (или левому) порту ввода. Вы можете указать данные таблицы в качестве входных данных блока или определить данные таблицы в диалоговом окне блока. Количество входных портов и размер выхода зависят от количества размеров таблицы и выбранного выходного среза.

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

Теперь добавим инициализацию таблиц и точек поиска для модели. Начнём с блоков Direct Lookup Table (n-D) и 2-D Lookup Table, а также подключим библиотеки, необходимые для обработки и визуализации данных.
# Подключение библиотек
using DataFrames
using Plots
Points2D = [1, 2, 3]; # Точки индексации
Matrix2D = [4 50 6; 16 19 20; 10 18 23] # Таблица
# Точки для чтения
X = 1;
Y = 2;
idx = [X,Y];
# Точки для чтения
X = 1;
Y = 2;
idx = [X,Y];
Теперь проинициализируем Prelookup и Interpolation Using Prelookup, а также построим график отношения точек к таблице.
Value1 = 10:10:110; # Точки
Value2 = sqrt.(collect(1:11) * collect(1:11)'); # Таблица
plot(Value1, Value2)
Последний блок, у которого не объявлены параметры инициализации, – это 1-D Lookup Table.
Points1D = 1:1:100; # Точки индексации
Matrix1D = sin.(1:2:200); # Таблица
A = 50; # Амплитуда генератора сигналов
plot(Points1D,Matrix1D)
Запустим модель с заданными параметрами.
function run_model( name_model, path_to_folder )
Path = path_to_folder * "/" * name_model * ".engee"
if name_model in [m.name for m in engee.get_all_models()] # Проверка условия загрузки модели в ядро
model = engee.open( name_model ) # Открыть модель
model_output = engee.run( model, verbose=true ); # Запустить модель
else
model = engee.load( Path, force=true ) # Загрузить модель
model_output = engee.run( model, verbose=true ); # Запустить модель
engee.close( name_model, force=true ); # Закрыть модель
end
return model_output
end
res = run_model("Lookup_Table","/user/start/examples/base_simulation/lookup_table")
Рассмотрим результаты моделирования, содержащиеся в переменной res.
В первом случае мы считали столбец из Matrix2D.
df = collect(res["Direct Lookup Table (n-D).1"]);
println(df[1,2])
Во втором случае мы считали значения из Matrix2D в ячейки [X,Y].
df = collect(res["2-D Lookup Table.1"])
println(df[1,2])
В третьем случае из Interpolation Using Prelookup мы считываем по данным от Prelookup.
df = collect(res["Interpolation Using Prelookup.1"])
plot(df[!,2])
И в последнем случае мы считываем синусоиду из 1-D Lookup Table.
df = collect(res["1-D Lookup Table (mod.).1"])
plot(df[!,2])
Вывод
В результате этой демонстрации мы показали, как использовать различные блоки вычисления приближенного значения некоторой функции.
А также реализовали две функции:
- запуска модели;
- парсинга CSV с записанной в него матрицей.