Возможности системы Аналитик – С для решения математических задач
1 Историческая справка
В 1967 году на выставке в Лондоне Советский Союз продемонстрировал серийно выпускаемую ЭВМ, получившую название машины для инженерных расчётов (сокращённо «МИР-1»), в которой было реализовано ступенчатое микропрограммирование. Там же эта ЭВМ была куплена американским «голубым гигантом» - фирмой IBM. Как выяснилось позже, американцы купили машину лишь для того, чтобы доказать своим конкурентам, запатентовавшим в 1963 году принцип ступенчатого микропрограммирования, что русские давно об этом принципе знали и реализовали в серийно выпускаемой ЭВМ.
Разработчики ЭВМ «МИР-1» (Институт кибернетики АН СССР) получили Государственную премию. Среди них: академик АН СССР (научный руководитель проекта), , .
В 1969 году в производство была запущена более совершенная ЭВМ «МИР-2». За ней поледовала и «МИР-3».
Проектируя МИРы, разработчики ставили дерзкую задачу – сделать машинный язык возможно более близким ко входному (математическому) языку. Такой язык АНАЛИТИК был создан и поддержан оригинальной аппаратно-микропрограммной системой, практически реализующей аппаратурную трансляцию программ. По скорости выполнения аналитических преобразований им не было равных в мире. «МИР-2», например, успешно соревновалась с универсальными ЭВМ обычной архитектуры, превосходящими ее по быстродействию и ёмкости памяти в сотни раз!
Реализованная в ЭВМ этой серии первая отечественная система аналитических вычислений (САВ) получила признание мирового научного сообщества и составила серьезную конкуренцию предшествующей ей программной реализации символьных вычислений в системе компьютерной алгебры (СКА) REDUCE, созданной в начале 60-х годов .
Впоследствии идея АНАЛИТИКА была возрождена в Maple (как признают авторы разработки), отдельные компоненты которого в качестве составной части входят в такие известные пакеты, как Matlab и MathCAD.
Рост уровня входных языков – общая тенденция в программировании. Основная цель – сократить время на разработку программ и передать формальные, рутинные операции по их переводу на машинный язык и распределению памяти самой ЭВМ.
В условиях современной России, не имеющей отечественной системы аналитических вычислений, факт многообразия существующих зарубежных систем компьютерной алгебры является слабым утешением. В первую очередь потому, что программная реализация (с их использованием) алгоритмов, например, аналитической теории автоматического управления зачастую затруднительна, а в ряде случаев и невозможна.
Отдавая отчет в том, что дальнейшее отставание в этой области не способствует паритету и безопасности России (в оборонном и технологическом плане), в Саратовском государственном техническом университете (СГТУ) была предпринята попытка возрождения отечественной школы САВ. Проект получил условное название «АНАЛИТИК-С».
Работа над проектом велась выпускниками специальности «Управление и информатика в технических системах» Саратовского государственного технического университета на протяжении многих лет (начиная с 1991 года) и, пройдя этап программной реализации на Паскале, вышла на программную реализацию в среде ИНТЕРНЕТ на языке PHP (сначала 2-ой версии, а сейчас 4-ой). Развитие и сопровождение САВ «АНАЛИТИК-С» осуществлялось, в основном, силами студентов в день научно-производственной работы (8 и 9 семестры) и в период дипломного проектирования.
В связи с переходом научного руководителя проекта в Саратовский государственный аграрный университет (СГАУ) имени , работа над проектом продолжается силами аспирантов СГТУ и аспирантов и студентов СГАУ имени .
2 Краткая характеристика среды
WEB-сервис среды аналитических вычислений «АНАЛИТИК-С» (WEB 2.0) представляет собой среду программирования вычислений как с числами (команда «выполнить»), так и с символами (команда «пусть»), базирующуюся на идеях языка АНАЛИТИК украинской школы символьных вычислений. Предметная область среды очерчена кругом научных интересов руководителя проекта, отражённых в его монографиях и учебниках. Среда размещена на научно-образовательном портале по адресу http://www. tki-analitik. ru.
Среда программирования численных и аналитических вычислений «АНАЛИТИК-С» позволяет программировать численные и аналитические вычисления с данными, заданными в числовой или символьной форме, с использованием операций сложения, вычитания, умножения, деления, возведения в степень, извлечения корня заданной степени, дифференцирования и интегрирования. Ядро среды аналитических вычислений «АНАЛИТИК-С» содержит программно реализованные гиперболические функции, комбинаторные функции, константы и системные переменные, многозначные функции, обратные тригонометрические функции, операции над матрицами, операции над многочленами, операции над числами, тригонометрические функции, а также операторы цикла и условные операторы. Указанная среда снабжена следующими пакетами прикладных программ: «Абстрактная математическая модель информационно-управляющих систем», «Линейная алгебра», «Анализ», «Синтез», «Распознавание образов алгебраических формул» и т. д.
Среда реализована на языке сценариев PHP 4.0 под управлением Apache. Свободный доступ к среде осуществляется с помощью любого из известных браузеров (в рамках лицензии Apache 2.0). Функционально среда имеет командное и графическое окна, а также окно вывода результатов. Запрограммированный пользователем вычислительный фрагмент (скрипт) может быть сохранён на компьютере пользователя с возможностью последующего запуска в очередном сеансе среды аналитических вычислений «АНАЛИТИК-С», для чего сохранённый скрипт должен быть скопирован в командное окно. Среда является открытой.
3 Алфавит языка АНАЛИТИК-С
Алфавит языка включает:
1.Прописные и строчные буквы кириллицы и латинского алфавита.
2.Арабские цифры от 0 до 9;
3.Специальные знаки:
+ - / * = . ; [ ] ( ) { } ^
Среди них знаки операций:
- операция присваивания «=»,
- сложение «+»;
- вычитание «-»;
- умножение «*»;
- деление «/»;
- возведение в степень «^»;
- извлечение корня степени r «»;
- взятие производной порядка r «^(r)»;
- взятие r-кратного интеграла «^{r}»;
- взятие наибольшего целого слева на числовой оси от иррационального числа «[…]».
и разделители (скобки: круглые, квадратные, фигурные; точка; запятая; точка с запятой; пробелы).
Из символов алфавита формируются лексемы (базовые конструкции) языка:
1.Идентификаторы.
2.Зарезервированные слова, которые не могут использоваться в качестве идентификаторов
3.Команды.
4.Операторы, из которых составляются специализированные библиотеки прикладных программ (TOOLBOX’ы).
4 Идентификаторы
Идентификаторы – это имена переменных, программ, констант. Идентификаторы могут иметь произвольную длину. Идентификатор всегда начинается с буквы, за которой могут следовать другие буквы, в том числе повторяющиеся, (с учётом регистра) и цифры.
Пробелы и зарезервированные слова не могут использоваться в качестве идентификаторов.
Длина идентификатора не ограничена.
Зарезервированные слова, которые не могут использоваться в качестве идентификаторов приведены в таблицах 1 – 7.
Таблица 1
Гиперболические функции | |
ch(x) | Гиперболический косинус |
cth(x) | Гиперболический котангенс |
sh(x) | Гиперболический синус |
th(x) | Гиперболический тангенс |
Комбинаторика | |
plac(n, m) | Число размещений из n по m, n>m |
comb(n, m) | Число сочетаний из n по m, n>m |
fact(n) | Факториал – число перестановок из n элементов (n –любое положительное число) |
Константы и системные переменные | |
avost | Значение машинной бесконечности (прерывание) |
J | Мнимая единица |
realmin | Наименьшее число с плавающей точкой (2-1022) |
realmax | Наибольшее число с плавающей точкой (21023) |
ans | Переменная, хранящая результат последней операции и обычно вызывающая его отображение на экране дисплея |
eps | Погрешность операций над числами с плавающей точкой (2-52) |
E | Системная константа е = 2, 7182 |
NaN | Указание на нечисловой характер данных |
pi | Число = 3.1415926 |
Многозначные функции | |
sgn(n) | Сигнум-функция (возвращает –1, если аргумент < 0; 1, если аргумент > 0; 0, если аргумент = 0) или символьное выражение |
Обратные тригонометрические функции | |
acs(x) | Арккосинус |
asn(x) | Арксинус |
actn(x) | Арккотангенс |
atn(x) | Арктангенс |
Операции над матрицами | |
invert(А) | Вычисление обратной матрицы, где А – исходная матрица |
sled(A) | Вычисление следа матрицы |
eig | Вычисление собственных чисел матрицы |
rank(A) | Вычисление ранга матрицы (индекса управляемости матрицы Крылова) |
determ(А) | Детерминант матрицы А |
poly | Нахождение коэффициентов характеристического многочлена квадратной матрицы общего вида |
kryl(А) | Преобразование к матрице Крылова-Люенбергера, где А – исходная матрица |
frob(А) | Преобразование к матрице Фробениуса, где А – исходная матрица |
hess(А) | Преобразование к матрице Хессенберга, где А – исходная матрица |
silvestr | Формирование и вычисление определителей Сильвестра |
vronsk | Формирование и вычисление определителя Вроньского |
ones(n, m) | Формирование единичной матрицы (вектора) размерами nґm |
zeros(n, m) | Формирование нулевой матрицы (вектора) размерами nґm |
diag(n, m,k…) | Формирование диагональной матрицы с элементами n, m,k…на главной диагонали |
cdiag | Формирование скалярной матрицы |
shurkohn | Формирование матрица Шура-Кона |
jakobi | Формирование матрицы Якоби |
ctrb | Формирование матрицы управляемости (матрицы Крылова) |
obsv | Формирование матрицы наблюдаемости (транспонированной матрицы Крылова) |
form(P) | Формирование матрицы P=(A+En)(A-En)-1, где А – исходная матрица |
formshur(P) | Формирование матрицы P=(AT-En)W(A-En), где А – исходная матрица, W – матрица Шура-Кона |
gurviz гурвиц | Формирование матрицы Гурвица |
oprgur | Формирование и вычисление определителей Гурвица |
simm | Формирование симметрической матрицы 0,5(A+AT) |
cossimm | Формирование кососимметрической матрицы 0,5(A-AT) |
andreevgram | Формирование матрицы Андреева-Грама |
vander | Формирование матрицы Ван-дер-Монда |
givens | Формирование матрицы вращения Гивенса |
podobie | Формирование матрицы подобия |
kinemat | Формирование матрицы кинематического подобия |
sqmatr | Формирование квадратного корня из матрицы |
hauss | Формирование матрицы отражения Хаусхолдера |
funk | Формирование функциональной матрицы |
trans(А) | Формирование транспонированной матрицы |
vander(А) | Формирование матрицы Вандермонда, где А – заданная матрица-строка |
hankel(А) | Формирование ганкелевой матрицы, где А – заданная матрица-строка |
toeplitz(А) | Формирование теплицевой матрицы, где А – заданная матрица-строка |
norm(A) | Функция вычисляет нормы матрицы (вектора). Если задать norm(A), то результатом будет наибольшая сингулярная величина матрицы; если задать norm(A,'1'), то будет вычислена первая норма; если norm(A,'2'), то – вторая; если norm(A,'inf'), то – норма по бесконечности; если norm(A,'-inf'), то – норма по минус бесконечности; если norm(A,'g'), то – гильбертова норма; если norm(A,'e'), то – евклидова норма |
Операции над многочленами | |
conform | Формирование многочлена, полученного из исходного в результате конформного преобразования z = (s+1)/(s –1) |
ermit | Формирование полиномов Эрмита-Билера из исходного полинома |
silvestr | Формирование непрерывной дроби из положительной пары полиномов (алгоритм Стильтьеса анализа устойчивости) |
Операции над функциями | |
diff | Дифференцирование функций |
integr | Интегрирование функций |
macloren | Разложение в ряд Маклорена |
teilor | Разложение в ряд Тейлора |
Операции над числами | |
sqr(n) | Арифметический корень, где n – любое положительное число |
log(n) | Логарифм десятичный, где n – любое положительное число |
lgn(n) | Логарифм натуральный, где n – любое положительное число |
rand(n, m) | Матрица случайных чисел размерами nґm |
abs(n) | Модуль, где n – любое число |
ent(n) | Операция взятия целой части действительного числа |
Показательные и логарифмические функции | |
log(),ln() | Логарифмическая функция |
^ | Показательная функция |
exp(n) | Экспоненциальная функция, где n – любое число |
Тригонометрические функции | |
cos(x) | Косинус |
ctan(x) | Котангенс |
sin(x) | Синус |
tan(x) | Тангенс |
5 Синтаксис командного окна
Команды
(запуск команды производится нажатием на клавишу ENTER)
Команды можно давать как на русском, так и на английском языках (англ. вариант приведен в круглых скобках):
1)пусть (let) – команда вычислений с символьными данными.
Варианты задания команды: пусть {A=B} или let {A=B}, разделённые пробелом, где А – символьная переменная, В – выражение в символьном виде, вычисленное в командном окне до подачи этой команды (расположенное в командном окне выше данной команды), «=» - операция присваивания;
2)вычислить (calculate) – команда вычислений с численными данными;
3)точность (precision) – команда количества значащих цифр, выводимых на экран после десятичной точки. Варьируется от 3-х (по умолчанию) до 12;
4)вывести (print) – команда вывода сообщения или результата вычислений на экран.
Варианты задания команды: вывести {А} или print{A};
5)«/» (rem) – обозначение комментария,
Обозначения разделителей,
используемых в командном окне
«.» – фиксированная точка в представлении числа.
«,» – запятая, используется для разделения параметров функции.
«;» – точка с запятой, применяется внутри квадратных скобок для отделения строк матрицы. Также применяется в операторах: plot(график), integr, modalcontrol, krylov и т. д. – для разделения переменных и выражений.
« » – пробел, используется для разделения элементов строки матрицы.
«:» – двоеточие – формирователь упорядоченных числовых последовательностей, которому ставится в соответствие оператор
«Начальное значение: шаг: конечное значение»
(если шаг не задан, то по умолчанию он принимается равным единице).
Циклы
В командном окне допустимо использование операторов цикла. Синтаксис неявного оператора цикла имеет вид:
цикл (cycle)
тело цикла (a body of cycle) – пусть {}
повторить (repeat) {}
(в фигурных скобках задается число повторений).
Например:
пусть {А=1}
цикл
пусть {А=А+1}
повторить {2}
вывести {A}
Если число повторений неизвестно, рекомендуется в тело цикла помещать условный оператор, описание которого приводится ниже.
Условные операторы
В командном окне допустимо использование операторов условного перехода если (if)…иначе (else)…конец (end).
Синтаксис и выполняемые действия этих операторов аналогичны соответствующим операторам других распространённых языков программирования. Синтаксис операторов выглядит следующим образом:
если (if) {условие}
выполняемое действие
конец_если (end_if)
иначе (else)
выполняемое действие
конец_иначе (end_else)
Известны полная и неполная структуры этого оператора:
1) if (логическое условие) then (оператор(Ы) присваивания) else (оператор(Ы) присваивания);
2) if (логическое условие) then (оператор(Ы) присваивания).
Например:
если {a>b}
вывести {a}
конец_если
иначе
вывести {b}
конец_иначе
6 Синтаксис графического окна
Каждая графическая команда открывает графическое окно со своим интерфейсом.
Команда «график (plot)» – построение графика функции одной переменной.
Варианты задания команды: график {X;Y;A;V;W} или plot {X;Y;A;V;W}, где X – обозначение оси абсцисс; Y – обозначение оси ординат; A – обозначение независимой переменной; [V, W] – диапазон изменения независимой переменной.
Например:
график {cos(t)*exp(sin(t));sin(t)*cos(t);t;0;7}
Результат:
Рис. 9.3.
7 СПЕЦИАЛИЗИРОВАННЫЕ ПАКЕТЫ ПРИКЛАДНЫХ ПРОГРАММ
I. АБСТРАКТНАЯ МАТЕМАТИЧЕСКАЯ МОДЕЛЬ ИУС (символьные операции для переходов от описания в форме «вход-выход» к описанию в форме Коши и обратно)
Таблица 2
№ п/п | Идентифи-катор | Реализуемые функции |
1 | кrylov | Переход от формы «вход-выход» с производными от управлений к неканонической форме Крылова-Люенбергера |
2 | io2frob | Переход от формы «вход-выход» с производными от управлений к неканонической форме Фробениуса |
3 | nkryl2kryl | Переход от неканонической формы Крылова-Люенбергера к канонической форме Крылова-Люенбергера |
4 | nfrob2kryl | Переход от неканонической формы Фробениуса к канонической форме Крылова-Люенбергера |
5 | kryl2frob | Переход от канонической формы Крылова-Люенбергера к канонической форме Фробениуса |
6 | frob2io | Переход от канонической формы Фробениуса к форме «вход-выход» без производных от управлений |
7 | kryl2io | Переход от канонической формы Крылова-Люенбергера к форме «вход-выход» без производных от управлений |
II. ЛИНЕЙНАЯ АЛГЕБРА
Таблица 3
№ п/п | Идентификатор | Реализуемые функции | Программная реализация |
1 | poly | Нахождение коэффициентов характеристического многочлена квадратной матрицы Данилевского | poly {C}, где С – заданная квадратная матрица чисел. Возвращает коэффициенты характеристического полинома матрицы С. |
2 | eig | Нахождение собственных чисел квадратной матрицы, приведенной к форме Хессенберга | eig {A}, где А – заданная квадратная матрица чисел. Возвращает собственные числа А. |
III. АНАЛИЗ
Таблица 4
№ п/п | Идентификатор | Реализуемые функции |
1 | polin | Вычисление корней полинома |
2 | lagrsilv | Нахождение коэффициентов интерполяционного полинома Лагранжа-Сильвестра |
3 | triusolve | Интегрирование нестационарных верхнетреугольных систем в аналитическом виде |
4 | lapposolve | Интегрирование нестационарных линейных систем в случае Лаппо-Данилевского |
5 | kaushy | Тождество Коши |
6 | control | Анализ управляемости в численном и символьном виде |
7 | decompose | Алгоритм декомпозиции на полностью управляемую и полностью неуправляемую подсистемы в численном и символьном виде |
8 | grub | Анализ грубости свойства асимптотической устойчивости гурвицева полинома |
9 | leadanalysis | Анализ приводимости по в символьном виде |
10 | matrlyapun | Формирование матричного тождества |
11 | stable | Анализ устойчивости при постоянно действующих возмущениях в численном виде |
12 | structgrub | Анализ структурной грубости |
13 | c2d | Переход от непрерывной модели к дискретной |
14 | curvbuild | Построение кривой накопления отклонений для стационарных линейных систем |
IV. СИНТЕЗ
Таблица 5
№ п/п | Идентификатор | Реализуемые функции |
1 | мodalcontrol | Задача модального управления |
2 | leadsynt | Синтез приводимых систем |
3 | btransform | Метод билинейных преобразований конструирования решений матричного уравнения в задаче |
4 | finitecontrol1 | Решение задачи финитного управления в непрерывном случае (перевод в начало координат) |
5 | finitecontrol2 | Решение задачи финитного управления в непрерывном случае (перевод в заданное конечное состояние) |
6 | dfinitecontrol1 | Решение задачи финитного управления в дискретном случае: алгоритм программного управления |
7 | dfinitecontrol2 | Решение задачи финитного управления в дискретном случае: алгоритм управления по принципу обратной связи |
8 | riccati | Алгоритм Бьюси-Джозефа решения уравнения Риккати |
V. РАСПОЗНАВАНИЕ ОБРАЗОВ МАТЕМАТИЧЕСКИХ ФОРМУЛ
Таблица 6
№ п/п | Идентификатор | Реализуемые функции | Программная реализация |
1 | viet | Распознавание образов алгебраических формул в символьно заданном выражении | viet {А}, где А – символьное выражение, которое необходимо упростить (если это возможно). |
VI. ТЕХНИЧЕСКАЯ РЕАЛИЗАЦИЯ ЗАКОНОВ УПРАВЛЕНИЯ
НА АППАРАТНЫХ ПЛАТФОРМАХ МИКРОСИСТЕМНОЙ ТЕХНИКИ
Таблица 7
№ п/п | Идентификатор | Реализуемые функции | Программная реализация |
1 | anadigm | Техническая реализация символьно заданного закона управления на аппаратной платформе программируемых аналоговых интегральных схем (ПАИС) производства компании Anadigm | anadigm (M), где M - маска с выдавленными из неё алгебраическими формулами, полученная в результате работы программы viet |
В наше время язык существует как система компьютерной алгебры (версии 1993, 2000, 2007 и 2010 годов) и разрабатывается Институтом проблем математических машин и систем НАН Украины и Полтавским национальным техническим университетом им. Ю. Кондратюка.
Список литературы:


