1
ВВОДНОЕ ЛАБОРАТОРНОЕ ЗАНЯТИЕ
«ОСВОЕНИЕ ИНТЕРФЕЙСА ENGEE»
1 Цель работы
Получение общего представления о среде математических вычислений
Engee –особенностей интерфейса, функциональных основных возможностей,
формирования навыков практической работы в среде Engee, математических вы-
числений, моделирования, разработки приложений и анализа данных.
2 Краткие теоретические сведения
2.1 Что такое Engee?
Engee – это российская платформа корпоративного уровня для разработки
сложных технических систем и алгоритмов с применением современной методо-
логии модельно-ориентированного проектирования.
Российская платформа Engee применяется для решения широкого диапа-
зона задач: от математики, машинного обучения, оптимизации и ИИ, продолжая
прикладными инженерными задачами в области ТАУ, физического моделирова-
ния, цифровой обработки сигналов, радиокоммуникаций, РЛС, навигации и про-
чих в таких отраслях промышленности, как образование, авиация, космос, ОПК,
финансовая отрасль, автомобилестроение, радиоэлектронная отрасль, транспорт
и пр.
Среда математических вычислений Engee разработана с учетом много-
летнего опыта выполнения исследовательских задач с целью обеспечить инжене-
ров наиболее удобной и интуитивно понятной средой для решения повседневных
задач. Парадигма low-code и основные принципы организации среды позволяют
2
минимизировать рутину и автоматизировать многие процессы для ускорения раз-
работок.
Особенности среды математических вычислений:
1) мультиязычность – среда не ограничивает пользователя одним языком и
позволяет использовать огромное мировое наследие для решения своих задач;
2) поддерживаемые языки:
Engee (jl);
Python;
MATLAB;
С/С++, dll/lib;
3) десятки предустановленных расчетных библиотек;
4) быстрая скорость работы среды – Engee построена на базе языка Julia, ко-
торый является одним из самых быстрых, он принципиально быстрее MATLAB и
Python, может быть сравним с C и Fortran;
5) единое вычислительное пространство для организаций и предприятий;
6) визуализация и научная графика;
7) удобные и эргономичные расчетные интерактивные скрипты, LaTex,
MarkDown; разработано на основе опыта лучших мировых сред разработки инже-
нерного ПО;
8) парадигма Low-code Apps для типовых задач – среда не требует знания
языков программирования и обладает огромным функционалом для инженеров и
ученых;
9) качественная документация и поддержка.
2.2 Интерфейс Engee
Для входа в личный кабинет Engee необходимо открыть ресурс –
https://engee.com/account/login. Если пользователь не был ранее зарегистрирован,
3
необходимо пройти регистрацию. Личный кабинет пользователя представлен на
рисунке 1.
Рисунок 1 – Личный кабинет Engee
Чтобы перейти к рабочему пространству Engee, необходимо нажать кнопку
Старт Engee (рисунок 2). Если сессия Engee уже запущена и пользователь вер-
нется на страницу позже, то кнопка Старт Engee сменится на Открыть Engee.
Чтобы остановить личный экземпляр сервера Engee, необходимо нажать кнопку
Стоп.
Рисунок 2 – Кнопка старта
4
При запуске сессии Engee открывается рабочее пространство, которое вклю-
чает следующие элементы:
холст – это рабочая область, на которой строятся модели;
раздел программной разработки – набор инструментов для работы с ко-
дом, состоящий из редактора скриптов , командной строки и окна диагно-
стики модели ;
раздел файлов и переменных – набор инструментов для работы с фай-
лами и переменными, состоящий из файлового браузера и окна переменных
;
приложения – набор приложений, состоящий из инспектора данных, ре-
дактора цифровых фильтров. эти приложения открываются в отдельной вкладке
браузера;
библиотека блоков – набор блоков, из которых собираются модели;
раздел управления симуляцией – набор опций для управления моде-
лями. на этой панели запускаются , останавливаются , компилируются
модели и настраивается время их симуляции;
генерация кода – инструмент для генерации кода из моделей. генерация
реализована для языков си, chisel и verilog (hdl). подробнее о генерации кода в
engee читайте в статье;
панель навигации по моделям – панель для выбора нужной модели и
перемещения по иерархии внутри конкретной модели;
окно физических переменных – это инструмент, который помогает про-
верять начальные условия и целевые значения моделей;
раздел настроек и визуализации – набор инструментов, состоящий из
окна настроек и окна графиков ;
личный кабинет – переход в личный кабинет пользователя;
документация – переход в документацию engee.
настройки интерфейса – набор опций для настройки рабочего простран-
ства. включает в себя выбор языка, раскладку интерфейса и многое другое;
5
обратная связь – инструмент для отправки предложений, сообщений об
ошибках или запросов на новые функции. также с его помощью можно перезапу-
стить ядро engee;
сделать скриншот – инструмент для сохранения снимков в форматах png
и svg. также поддерживаются закладки, которые позволяют быстро перемещаться
между моделями и их уровнями вложенности;
настройка масштаба – регулирует масштаб холста, не влияя на масштаб
интерфейса или браузера;
строка состояния – отображает текущее состояние модели, выбранный
решатель, время симуляции и ее прогресс. также она позволяет переходить к
вкладкам окна настроек .
Важно! Для отображения инструментов моделирования включите
настройку Среда моделирования в Настройках интерфейса , как показано
на рисунке 3.
Рисунок 3 – Настройка среда моделирования
2.3 Переменные в среде Engee
Для ввода команд можно использовать командную строку или редактор
скриптов. Командная строка – это инструмент для выполнения широкого
спектра задач, от исполнения кода до создания сложных моделей в Engee. Благо-
даря поддержке популярных текстовых редакторов, интеграции с Git и различ-
ными режимами работы, а также многочисленным командам управления, команд-
ная строка интегрируется во все сценарии работы Engee.
6
Для выполнения команды её необходимо ввести в командном окне сразу по-
сле подсказки engee>. Для отправки их на исполнение – нажать клавишу Enter
(листинг 1). Напоминание! Engee построена на базе языка Julia.
Листинг 1 – Пример простого вычисления
engee> 3*5
15
Если результат вычислений специально не присваивать какой-нибудь пере-
менной, то Julia просто демонстрирует его, но не сохраняет результат операции.
Знак равенства (=) в Julia – это оператор присваивания, означающий, что
результат вычисления (выражение справа от знака равенства) присваивается пе-
ременной (которая слева от знака) (листинг 2).
Если ввести x = 3 + 4, Julia сперва вычисляет 3 + 4, а затем присваивает
результат (7) переменной x.
Листинг 2 – Пример присваивания
engee> m=3*5
15
engee> m=m+1
16
Все созданные переменные отображаются в окне для переменных (слева).
Для того чтобы открыть окно переменных, необходимо нажать на кнопку {x} (Пе-
ременные) на панели инструментов в левой части экрана (рисунок 4).
Рисунок 4 – Рабочая область (переменные)
7
Когда исполняется команда без точки с запятой в конце, Julia выводит ре-
зультат операции в самом командном окне. Если добавить точку с запятой в ко-
нец команды, то результат выполнения этой команды не будет отображаться.
Результат не появится в окне Командная строка, но его можно увидеть его в окне
Переменные.
Переменным можно давать любые названия, с которыми будет удобно ра-
ботать. В Julia очень мало технических ограничений на названия переменных:
названия должны начинаться с буквы, цифры или знака подчеркивания (_) и со-
держать в себе только буквы (латинского, русского или других алфавитов), цифры
и разрешенные знаки. Переменные Julia чувствительны к регистру.
Для очистки истории командной строки можно воспользоваться ко-
мандой Ctrl+L. Вызов этой команды не очищает историю предыдущих ко-
манд.
В Julia есть встроенные константы, например pi хранит значение числа π, а
также встроено множество функций, например abs (абсолютное значение) или
exp (экспонента).
2.4 Векторы и матрицы
Некоторые типы переменных в Julia являются коллекциями, одним из видов
типов данных-коллекций являются массивы. Такие переменные содержат в себе
много чисел, строк и любых других элементов. Можно складывать в массивы раз-
ные данные, характеризующие один общий объект.
Для создания массивов, хранящих несколько значений, используются квад-
ратные скобки (листинг 3).
Листинг 3 – Создание массива
x = [3 5]
1×2 Matrix{Int64}: 3 5
8
Если разделять элементы массива при помощи пробелов Julia объединяет их
в коллекцию типа Matrix – тип коллекций, имеющий одно или несколько измере-
ний и некоторые собственные методы работы. Если, однако, разделить числа за-
пятыми или точкой с запятой, то Julia создаст коллекцию типа Vector (ли-
стинг 4).
Листинг 4 – Создание вектора
x = [3 5]
1×2 Matrix{Int64}: 3 5
Если совместить в одном объявлении разделители в виде пробелов и в виде
точки с запятой, то можно создать матрицу, то есть массив с несколькими стро-
ками и столбцами. Задавая матрицу значений, принято описывать ее построчно,
строка за строкой (листинг 5).
Листинг 5 – Создание матрицы 2х3
x = [3 4 5; 6 7 8]
2×3 Matrix{Int64}:
3 4 5
6 7 8
print(x)
[3 4 5; 6 7 8]
Элементы в квадратных скобках могут быть числами, переменными или ре-
зультатами вычислений каких-либо математических выражений.
Если нужно создать более длинный вектор, вводить числа одно за другим
уже не практично. Более удобный способ задания упорядоченных последователь-
ностей состоит в том, чтобы использовать оператор : для определения диапазона,
заданного границами интервала. Шаг между числами по умолчанию равен 1.
Если написать y = 5:8 или y=[5:8], то будем создан не вектор, а объект типа
диапазон (range). Он будет хранить не сами элементы диапазона, а их функцию-
генератор (листинг 6).
9
Листинг 6 – Создание функции-генератора
y = [5:8]
1-element Vector{UnitRange{Int64}}:
5:8
Если после диапазона добавить точку с запятой (;), то будет получен век-
тор-столбец чисел (листинг 7).
Листинг 7 – Создание вектора-столбца
y = [5:8;]
4-element Vector{Int64}:
5
6
7
8
Оператор диапазона (:) по умолчанию создает ряд чисел с шагом 1, однако
можно указать любой другой шаг (листинг 8).
Листинг 8 – Создание вектором в диапазоне с шагом 2
x = [20:2:26;]
4-element Vector{Int64}: 20 22 24 26
В Julia есть много функций для создания часто требуемых стандартных мат-
риц, например, состоящих из случайных чисел (листинг 9).
Листинг 9 – Использование функции rand
x = rand(2,2)
2×2 Matrix{Float64}:
0.19708 0.546564
0.489922 0.983707
print(x)
[0.19708032071070547 0.5465642655617113;
0.4899215996759634 0.9837071394460919]
10
Аргумент вида (2,2) в команде rand(2, 2) означает, что команда должна
вернуть матрицу размером 2 на 2 элемента, содержащую равномерно распре-
деленные от 0 до 1 случайные числа.
Если передать в функцию инициализации матриц одно число (n), то будет
получен одномерный вектор.
Если указать два аргумента (n, m), будет создана матрица с n строками и
m столбцами.
Тот же синтаксис, что и rand, используют многие другие функции создания
массивов. К примеру, функции zeros и ones создают матрицы, целиком запол-
ненные нулями или единицами соответственно.
Можно получить значения из матрицы при помощи индексов, но нужно учи-
тывать порядок размерностей: строка, столбец. Слово end можно использовать
тогда, когда нужно получить последний элемент строки или столбца массива (ли-
стинг 10).
Листинг 10 – Обращение к элементам массива
x=data[6,3]
9.0698
y=data[end,3]
5.3002
Оператор двоеточие (:) можно использовать в качестве индекса массива. То-
гда он обозначает, что нужно вернуть «все элементы по некоторой размерности
массива».
Так что код x = A[:,1] создаст вектор-столбец, в котором содержатся все
элементы из первого столбца матрицы A.
Добавление точки перед оператором (.*, .^, ./) превращает его в опера-
цию над массивами, что позволяет применять их конкретному элементу мас-
сива.
11
2.5 Построение графиков
Два вектора одинаковой длины можно вывести на график (рисунок 5), ис-
пользуя их как координаты точек, при помощи функции plot (листинг 11).
Листинг 11 – Построение графика
plot(sample,mass1)
Рисунок 5 – Результирующий график
Результат – график с вектором sample по оси X и mass1 по оси Y.
В функцию plot можно передать еще много параметров, устанавливающих
цвет и стиль линий и маркеров.
plot(x, y, color=:red, linestyle=:dash, mark-
ershape=:o)
Указанная команда выводит пунктирную линию (linestyle=:dash) красного
цвета (color=:red) с маркерами в виде кругов (marker=:o).
У всех аргументов есть укороченные версии команд, и такой же график
можно построить другим образом, как показано в листинге 12 (рисунок 6).
Листинг 12 – Построение графика
plot(x, y, c=:red, s=:dash, m=:o)
12
Рисунок 6 – Результирующий график
Чтобы каждый новый график строился на уже существующем графическом
полотне, его построение нужно осуществлять при помощи модифицированной ко-
манды: после нее должен стоять восклицательный знак (!). Пример показан в
листинге 13 (рисунок 7).
Листинг 13 – Построение нескольких графиков на одном полотне
plot(sample, mass2, c=:red, s=:dash, m=:o)
plot!(sample,mass1,c=:black,m=:square,la=0)
Рисунок 7 – Результирующий график
13
Прописать заголовок графика (и другие параметры аннотации) можно при
помощи дополнительных аргументов функции plot либо через функции-модифи-
каторы. Например, через параметр title или через функцию title!. Этой функции
нужно передать текст заголовка графика как аргумент. Текстовые строки в Julia
хранятся в двойных кавычках (").
2.6 Функции в Engee
В языке Julia функция представляет собой объект, который сопоставляет
кортеж значений аргументов с возвращаемым значением. Базовый синтаксис
определения функций в Julia следующий:
function f(x,y)
x + y
end
Эта функция принимает два аргумента, x и y, и возвращает значение послед-
него вычисленного выражения: x + y.
Есть и второй, более сжатый синтаксис для определения функции в Julia.
Традиционный синтаксис объявления функций, показанный выше, эквивалентен
следующей компактной форме присваивания:
f(x,y) = x + y
В форме присваивания тело функции должно быть одним выражением. Вы-
зывается функция всегда с помощью употребления ее имени вместе со спис-
ком значений параметров, взятым в круглые скобки.
Значение, возвращаемое функцией, – это значение последнего вычис-
ленного выражения, которое по умолчанию является последним выраже-
нием в теле определения функции. В примере функции f из раздела Создание
функций это значение выражения x + y. В качестве альтернативы ключевое слово
14
return заставляет функцию немедленно выполнить возврат, предоставляя выраже-
ние, значение которого возвращается.
Пример в листинге 14 – функция quadratic, которая вычисляет корни квад-
ратного уравнения. Аргументами функции являются коэффициенты a, b и c.
Листинг 14 – Функция quadratic
function quadratic(a,b,c)
D = b^2 - 4*a*c
if D < 0
return "действительных корней нет"
elseif D == 0
return -b/2a
else
return ((-b+sqrt(D))/2a, (-b-sqrt(D))/2a)
end
end
Пример вызова функции представлен на рисунке 8.
Рисунок 8 – Вызов функции quadratic
3 Порядок выполнения работы
1. Проработать необходимый теоретический материал, опираясь на сведе-
ния и указания, представленные в предыдущем пункте. Все разработанные при-
меры разобрать на практике, проведя аналогичные операции в среде Engee (для
графиков изменить оформление).
15
2. ОБЯЗАТЕЛЬНО! Пройти ознакомительный курс по ссылке:
https://engee.com/helpcenter/stable/ru/courses/engee-onramp.html. В качестве под-
тверждения прохождения приложить сертификат об успешном прохождении.
3. Выполнить задание согласно варианту.
3.1 Вычислить значения функции f(x) на отрезке [a; b] с шагом h. Написать
функцию в редакторе скриптов. Оформить подпись ФИО, группа, вариант.
Таблица 1 – Варианты заданий
Вариант f(x) a b h
𝑥2
1 0.7 7.5 0.45
1 + 0,25√𝑥
𝑥 3 − 0,3𝑥
2 2.06 8.1 1.2
√1 + 2𝑥
2𝑒 −𝑥
3 0 1.5 0.15
2𝜋 + 𝑥 3
𝑐𝑜𝑠𝜋𝑥 2
4 -1 0 0.1
√1 − 3𝑥
𝑥
5 𝑒2 1.4 5 0.5
1 + 𝑥2
−2𝑥
6 𝑒 + 𝑥4 + 1 3.2 6.6 0.7
7 (𝑒 + 𝑥)sin(𝜋√𝑥 − 1) 0.25 2.25 0.2
𝑥 3 − 0,3𝑥
8 𝑥 3 − 3𝑥 + 0 4.5 0.5
√1 + 2𝑥
2𝑒 −2𝑥
9 sin(𝑥) + 0 1.6 0.25
3𝜋 + 𝑥 3
𝑠𝑖𝑛𝜋𝑥 4
10 -1 0 0.1
√1 − 14𝑥
cos(𝑥)𝜋 2
11 -1 0 0.1
√1 − 𝑥
3
2𝑒 −𝑥
12 2𝑥 + 𝑥 + 1.4 5 0.5
2 + 𝑥3
7
𝑥 3 − 0,3𝑥
13 𝑥 − sin(3𝑥) + 3.2 6.6 0.7
√1 + sin(2𝑥)
14 ln(𝑥) + 7𝑥 5 + sin(2𝑥)5 0.25 2.25 0.2
(2 ln(4𝑥))
15 e−6x + 0.7 7.5 0.45
6𝑥 5
sin(x) ∗ ln(𝑥)𝜋 2
16 2.06 8.1 1.2
√1 − cos(𝑥)
17 sin(𝑥) + cos(7𝑥)𝑒 5𝑥 + sin(2𝑥)5 0 1.5 0.15
16
Продолжение таблицы 1.
Вариант f(x) a b h
𝑥
18 𝑒2 -1 0 0.1
1 + sin(𝑥)2
sin(𝑥)2 cos(𝜋𝑥)2
19 1.4 5 0.5
ln(√1 − 3𝑥)
𝑡𝑔(2𝑥)
20 0.7 7.5 0.45
1 + sin(𝑥)2
Важно! Если в процессе вычислений требуется поэлементно умножить, раз-
делить или возвести в степень элементы вектора или матрицы, то для этого ис-
пользуются операторы:
.* – поэлементное умножение;
./ и .\ – поэлементные деления;
.^ – поэлементное возведение в степень.
3.2 Построить график функции: настроить его оформление, добавить под-
пись осей и название графика.
4. Оформить отчет.
4 Содержание отчета
Цель работы; разобранные примеры из пункта 2; сертификат о прохождении
ознакомительного курса; решенное задание по варианту; выводы по работе. К от-
чету приложить сам сертификат, а также скрипт выполненного задания по вари-
анту.