-10, -5, 0, 15, 100,...
Вещественные константы - вещественные числа в диапазоне от -1e+19 до 1e+19. Пример записи вещественных констант: -0.03, 3.14, 0.9999999, 10.44e-5,...
Язык содержит встроенные константы для задания постоянных величин:
p= 3.14159,
e = 2.71828,
g = 9.80665.
Эти константы изображаются следующим образом:
p - @pi; e - @e; g - @g.
Пример:
l:=[-@pi/2, @pi/2];
S = @pi*r^2;
f = (@e^x - @e^(-x))/2;
F = M*@g^2/2.
В UniCalc'e рассматриваются переменные двух типов: целые и вещественные. Тип переменной определяется первым символом ее имени. Имя может состоять из букв латинского и русского алфавита, а также цифр, причем первым символом обязательно должна быть буква. Имена распознаются по первым восьми символам. Большие и малые буквы в имени различаются. Имена целых переменных начинаются с букв i, j, k, l, m, n, для латинского алфавита, и соответственно с букв и, й, к, л, м, н, для русского алфавита. Для больших букв умолчание сохраняется. Остальные переменные считаются вещественными.
sin() синус;
cos() косинус;
asin() арксинус;
acos() арккосинус;
tg() тангенс;
ctg() котангенс;
atan() арктангенс;
ln() натуральный логарифм;
exp() экспонента;
abs() абсолютное значение;
sign() знак числа;
sqrt() квадратный корень;
dif() функция символьного дифференцирования
max(a,b,..,c) максимальное значение;
min(a,b,...,c) минимальное значение;
lower(0 нижнее значение;
upper() верхнее значение;
Пользовательские функции записываются в виде:
имя_функции (список формальных параметров) := выражение;
Допускается использование только арифметических выражений.
Вызов функции:
имя_функции (список фактических параметров);
Пример описания пользовательской функции:
f(x,y) := x^2 + y^2 - 1;
Пример вызова функции:
f(23.1, z+5) = 0;
Любая последовательность символов, заключенная между комбинациями символов "(*" и "*)", является комментарием и может вставляться в любое место программы.
+ операция сложения;
- операция вычитания и унарный минус;
* операция умножения;
/ операция деления;
^ операция возведения в степень.
Арифметические операции по приоритету в порядке убывания располагаются следующим образом: ^, /, *, -, +. Фактически операции "+" и "-" имеют одинаковый приоритет, так же как и /" и "*". Для изменения приоритета операций используются круглые скобки. Результатом операции деления в случае обоих целых операндов является целая часть частного.
OR логическое "ИЛИ";
AND логическое "И";
NOT логическое "НЕ";
-> импликация.
Логические операции по приоритету в порядке убывания располагаются следующим образом: NOT, AND, OR, ->.
= равно;
<> не равно;
< меньше;
> больше;
<= меньше или равно;
>= больше или равно.
Оператор присваивания используется для инициализации переменных и для задания начального интервала переменных. Вид оператора присваивания - := .
Пример операции присваивания:
х := 999;
Y := [5+6*10, 999].
В последних версиях решателя возможно использование массивов произвольной размерности:
<array_name>[index_expr1, index_expr2, ... , index_exprN]
Тип элементов массива определен в имени массива <array_name> согласно правилам, действующим для имен переменных. Индексные выражения <index_expri> должны быть целыми константами или выражениями, результат которых - целое число. Элемент массива - это та же самая переменная, только записанная в специфической форме.
Внешний язык модели полностью идентичен внутреннему, поскольку разработкой модели будет заниматься эксперт - экономист, что, в свою очередь, подразумевает некие навыки программирования. Но, для совместимости с первой версией системы возможно распознавание текста модели макета. Отличие внешнего языка от внутреннего в данном случае состоит в том, что в языке макета не существовало понятия циклов, поскольку вычислитель системы их не поддерживал, т.е. для него не было определено понятие массивов. Таким образом, чтобы описать в формуле зависимость параметра от индексов, нужно было вводить некоторые скобки - разделители, в которых записывались обозначения индексов. Таким образом, на внешнем языке формула, описывающая ограничение, была одна, а во внутреннем языке, после обработки препроцессором, получалось N формул, где N - число сочетаний индексов, используемых в формуле и не выходящих за границы диапазона изменения индекса. Вместо обозначения индекса во внутреннем языке подставлялось его значение.
Пусть существует несколько параметров A, B и С которые зависят от индекса Y, изменяющегося в диапазоне от 1992 до 1995. Параметр С, кроме этого зависит от индекса K, изменяющегося в диапазоне от 1 до 4-х. Также от параметра К зависит параметр D. Между ними существует взаимосвязь:
C{K,Y}=A{Y}+B{Y-1}+D{K+2};
Фигурные скобки {} «показывают» препроцессору, что перед ним переменная, которая зависит от индексов, находящихся в этих скобках. После трансляции на внутренний язык получается система уравнений:
C[1,1993]=A[1993]+B[1992]+D[3];
C[1,1994]=A[1994]+B[1993]+D[3];
C[1,1995]=A[1995]+B[1994]+D[3];
C[2,1993]=A[1993]+B[1992]+D[4];
C[2,1994]=A[1994]+B[1993]+D[4];
C[2,1995]=A[1995]+B[1994]+D[4];
Но все это сделано для распознавания «старых» моделей. Эту формулу также можно записать в виде, применяемом в нынешней версии.
Рис.2. Структура системы.
Учитывая специфику задачи и возможности операционной системы, разрабатываемая система должна иметь следующую структуру, показанную на рис.2
Вычислитель системы - UniCalc - реализован в виде динамически связываемой библиотеки (DynamicLinkLibrary), которая экспортирует функции и переменные. Вычислитель основан на принципах недоопределенной математики и разрабатывается в Академгородке в Новосибирске.
База данных реализована в формате DB, т.е. в формате Paradox. В этом формате, в основном, хранятся значения экономических параметров, т.е. входные и выходные данные. Ограничения параметров, т.е. система неравенств, уравнений представлена в виде текстового файла, поскольку данная информация не упорядочивается и не структурируется.
Макропрепроцессор реализован в виде функций, находящихся в основном модуле системы, и функций динамически связываемой библиотеки. Такая реализация обусловлена проблемой совместимости с первой версией системы - функции библиотеки DLL служат для конвертирования модели из старого формата.
Входные и выходные данные экономической модели хранятся в базе данных, реализованной в формате Paradox. В ней хранятся данные по экономическим параметрам, т.е. их описания и значения, и по структуре модели.
Инфологическая модель подразумевает собой описание предметной области, которую следует представить в виде некоторой структуры базы данных, без привязки к какой-либо системе управления базами данных, имеет целью упорядочить информацию о предметной области, ее составе, и включает в себя следующие описания:
· предметной области;
· объектов и связи между ними;
· лингвистическое;
· ограничения целостности;
· алгоритмических связей между показателями объектов;
· информационных потребностей пользователя.
Под предметной областью подразумевается какая-либо область человеческой деятельности, вызывающая интерес для исследования. В данном случае предметной областью является макроэкономика РФ в целом и макроэкономика составляющих ее районов.
Рис.3. Структура объектов базы данных.
Рис.4. Связи между объектами.
База данных описывает экономическую модель, поэтому одним из объектов, входящих в базу, является объект «Экономическая модель». Объект «Экономическая модель» описывает файловую структуру экономической модели. Признаками данного объекта являются
· обозначение модели - статический атрибут, который показывает, под каким псевдонимом выступает экономическая модель в различных выходных формах системы, например, в форме с деревом модели;
· описание модели - статический атрибут, целью которого является пояснение - какую, собственно, часть макроэкономики описывает данная модель. В частности, это может быть представление макроэкономики какого-нибудь региона;
· путь к базе данных модели - динамическое свойство;
· название файла ограничений (файл, содержащий систему уравнений и неравенств для данной модели) - динамический атрибут.
Кроме этого в базе существуют объекты, которые описывают логическую структуру модели.
Объект «Экономический параметр». Синонимом данного объекта также является «экономическая переменная». Объект имеет следующие свойства: