Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OdinDiplom / OdinDiplom / Osnova.doc
Скачиваний:
4
Добавлен:
16.04.2013
Размер:
3.07 Mб
Скачать
      1. Язык модели

Под языком экономической модели понимается совокупность правил описания ограничений, т.е. формат записи уравнений и неравенств

Этот язык можно разделить на внешний и внутренний. Под внешним языком подразумевается форма записи, которой придерживается экономист - разработчик. Внутренний язык - это формат записи, который «понимает» вычислитель системы. Фактически, в системе внешний язык идентичен внутреннему, но, чтобы добиться совместимости с первой версией (макетом), предусмотрена возможность распознавания текста модели макета.

        1. Внутренний язык - язык вычислителя UniCalc

Язык UniCalc - это правила по которым записывается модель для решателя UniCalc.

На языке решателя UniCalc пользователь можете записать модель в виде совокупности выражений, включающих переменные, константы, стандартные математические функции, пользовательские функции. Язык решателя максимально приближен к общепринятой математической нотации. Каждое выражение должно заканчиваться символом ";".

Алфавит входного языка решателя UniCalc состоит из всех букв латинского алфавита и русского алфавита, всех цифр и набора специальных символов: +, -, *, /, ^, (, ), [, ], =, <, <=, >, >=, <>, :=, ,, ;, and, or, not, ->, (*, *).

Имена служат для обозначения переменных и функций. Имя может состоять только из букв и цифр, причем первым символом обязательно должна быть буква.

Переменные в UniCalc’е рассматриваются двух типов: целые и вещественные. Тип переменной принимается по умолчанию. Имена целых переменных начинаются с букв i, j, k, l, m, n для латинского алфавита, и соответственно - с букв и, й, к, л, м, н для русского алфавита. Остальные переменные считаются вещественными. Большие и малые буквы в имени различаются.

          1. Константы

В системе определены константы двух типов: целые и вещественные. Целые константы - целые числа в диапазоне от -2147483646 до 2147483646. Пример записи целого числа:

-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.

          1. Переменные

В UniCalc'e рассматриваются переменные двух типов: целые и вещественные. Тип переменной определяется первым символом ее имени. Имя может состоять из букв латинского и русского алфавита, а также цифр, причем первым символом обязательно должна быть буква. Имена распознаются по первым восьми символам. Большие и малые буквы в имени различаются. Имена целых переменных начинаются с букв i, j, k, l, m, n, для латинского алфавита, и соответственно с букв и, й, к, л, м, н, для русского алфавита. Для больших букв умолчание сохраняется. Остальные переменные считаются вещественными.

          1. Стандартные математические функции

sin() синус;

cos() косинус;

asin() арксинус;

acos() арккосинус;

tg() тангенс;

ctg() котангенс;

atan() арктангенс;

ln() натуральный логарифм;

exp() экспонента;

abs() абсолютное значение;

sign() знак числа;

sqrt() квадратный корень;

dif() функция символьного дифференцирования

max(a,b,..,c) максимальное значение;

min(a,b,...,c) минимальное значение;

lower(0 нижнее значение;

upper() верхнее значение;

          1. Пользовательские функции

Пользовательские функции записываются в виде:

имя_функции (список формальных параметров) := выражение;

Допускается использование только арифметических выражений.

Вызов функции:

имя_функции (список фактических параметров);

Пример описания пользовательской функции:

f(x,y) := x^2 + y^2 - 1;

Пример вызова функции:

f(23.1, z+5) = 0;

          1. Комментарии

Любая последовательность символов, заключенная между комбинациями символов "(*" и "*)", является комментарием и может вставляться в любое место программы.

          1. Арифметические операции

+ операция сложения;

- операция вычитания и унарный минус;

* операция умножения;

/ операция деления;

^ операция возведения в степень.

Арифметические операции по приоритету в порядке убывания располагаются следующим образом: ^, /, *, -, +. Фактически операции "+" и "-" имеют одинаковый приоритет, так же как и /" и "*". Для изменения приоритета операций используются круглые скобки. Результатом операции деления в случае обоих целых операндов является целая часть частного.

          1. Логические операции

OR логическое "ИЛИ";

AND логическое "И";

NOT логическое "НЕ";

-> импликация.

Логические операции по приоритету в порядке убывания располагаются следующим образом: NOT, AND, OR, ->.

          1. Операции отношения

= равно;

<> не равно;

< меньше;

> больше;

<= меньше или равно;

>= больше или равно.

          1. Оператор присваивания

Оператор присваивания используется для инициализации переменных и для задания начального интервала переменных. Вид оператора присваивания - := .

Пример операции присваивания:

х := 999;

Y := [5+6*10, 999].

          1. Переменные - массивы

В последних версиях решателя возможно использование массивов произвольной размерности:

<array_name>[index_expr1, index_expr2, ... , index_exprN]

Тип элементов массива определен в имени массива <array_name> согласно правилам, действующим для имен переменных. Индексные выражения <index_expri> должны быть целыми константами или выражениями, результат которых - целое число. Элемент массива - это та же самая переменная, только записанная в специфической форме.

        1. Внешний язык

Внешний язык модели полностью идентичен внутреннему, поскольку разработкой модели будет заниматься эксперт - экономист, что, в свою очередь, подразумевает некие навыки программирования. Но, для совместимости с первой версией системы возможно распознавание текста модели макета. Отличие внешнего языка от внутреннего в данном случае состоит в том, что в языке макета не существовало понятия циклов, поскольку вычислитель системы их не поддерживал, т.е. для него не было определено понятие массивов. Таким образом, чтобы описать в формуле зависимость параметра от индексов, нужно было вводить некоторые скобки - разделители, в которых записывались обозначения индексов. Таким образом, на внешнем языке формула, описывающая ограничение, была одна, а во внутреннем языке, после обработки препроцессором, получалось N формул, где N - число сочетаний индексов, используемых в формуле и не выходящих за границы диапазона изменения индекса. Вместо обозначения индекса во внутреннем языке подставлялось его значение.