Модуль I_ARI
Интервальная арифметика
В этом модуле предусмотрены все операции, функции и процедуры, необходимые для интервальных вычислений.
Тип
Тип interval определяется как
type interval = record inf, sup : real end;
и является частью языкового ядра PASCAL-XSC. Он основан на представлении вещественного интервала х в форме
что эквивалентно множеству {у ет инфинум (нижнюю границу), интервала х.
6 IR^inf у С ^SUp}, где inf обознача-а sup — супремум (верхнюю границу)
Операции
Результаты всех предопределенных арифметических операций принадлежат типу interval. Предусмотрены унарные операции +, — и четыре основные бинарные операции +, —, * и /, каждая с округлением до наименьшего включающего интервала. Операции отношения =, О, <, <=, > и >= интерпретируются как соответствующие операции для множеств. Они обозначают следующие отношения:
равно;
не равно;
строгое подмножество слева;
подмножество слева;
строгое подмножество справа; подмножество справа.
Эти операции определяются на основе операций = и <= согласно (RD) (см. стр. 142). Если хну принадлежат типу interval, то
х <= у <=> (x.inf >= y.inf) and (x.sup <= y.sup).
Кроме того, данный модуль содержит операцию in для отношений «принадлежит» и «содержится в» между операндами типов real и interval и между двумя операндами типа interval соответственно. Операция in удовлетворяет условию
х in у <=> (x.inf > y.inf) and (x.sup < y.sup).
Операция >< проверяет два интервала на пустоту пересечения. Интервалы х и у не пересекаются, если х П у = 0 (пустому множеству). Операции +* и ** вычисляют интервальную оболочку и пересечение интервалов соответственно. Результатом действия операции +* является наименьший интервал, включающий оба операнда, а операции ** — пересечение интервалов. Если пересечение равно пустому множеству, фиксируется ошибка.
|
Левый операнд |
Правый операнд |
|
|
integer real |
interval |
|
|
унарный |
+,- |
|
|
integer real |
+* |
о in, = , <> +* |
|
interval |
II t л о V |
о in, V, >< +*, ** |
Операции модуля I_AR1 о Е { + , -, *, /},
V € {=, О, <. <=, >, >=}
Пример 3.2.1.
Если переменные а и b типа interval определены как
а = [-1,3];
b = [3,4];
то операции +, —, *, X, +* и ** возвращают следующие результаты:
|
Выражение |
Результат |
||
|
а |
+ |
b |
[2,7] |
|
а |
— |
ь |
[-5,0] |
|
а |
* |
ь |
[-4,12] |
|
а |
+* |
ь |
[-1-4] |
|
а |
** |
ь |
[3,3] |
|
а |
>< |
ь |
false |
Функции преобразования
Следующие функции используются для преобразований между типами real и interval:
|
Функция |
Тип результата |
Значение |
|
intval (rl,r2) |
interval |
Интервал c inf = rl и sup = r2 |
|
intval (г) |
interval |
Интервал c inf = sup - r |
|
inf (i) |
real |
Нижняя граница i |
|
sup (i) |
real |
Верхняя граница i |
г, rl, г2 — выражения типа real, i — выражение типа interval : предполагается, что rl <= г2, иначе фиксируется ошибка.
Совмещение операции присваивания
Преобразование значения типа real в значение типа interval можно осуществить с помощью совмещенной операции присваивания:
|
Присваивание |
Значение |
|
i := г |
i := intval (г) |
1 — переменная типа interval, г — выражение типа real
Предопределенные функции
Все математические функции PASCAL-XSC, применяемые для вещественных аргументов, могут использоваться с интервальными аргументами. Эти интервальные функции F удовлетворяют соотношению F(i) D f(i) = = {/(г) : г Е г}. Кроме того, предусмотрены функции для вычисления средней точки и диаметра (оценки длины) интервала. Для использования в локализационных методах предусмотрена функция blow, вычисляющая эпсилон-расширение (см. [52]).
|
Функция |
Тип результата |
Значение |
|
|
sqr (i) |
interval |
i2 = = {r2 : r E i} |
Интервальный квадрат |
|
sqrt (i) |
interval |
/i |
Квадратный корень |
|
exp (i) |
interval |
ei |
Экспонента |
|
exp2 (i) |
interval |
2* |
Показательная функция с основанием 2 |
|
exp 10 (i) |
interval |
10* |
Показательная функция с основанием 10 |
|
In (i) |
interval |
ln(i) |
Натуральный логарифм |
|
log2 (i) |
interval |
log2(i) |
Логарифм по основанию 2 |
|
log 10 (i) |
interval |
ig(i) |
Логарифм по основанию 10 |
|
sin (i) |
interval |
sin(i) |
Синус |
|
cos (i) |
interval |
cos(i) |
Косинус |
|
tan (i) |
interval |
tg(i) |
Тангенс |
|
cot (i) |
interval |
ctg(i) |
Котангенс |
|
arcsin (i) |
interval |
arcsin (i) |
Арксинус |
|
arccos (i) |
interval |
arccos (i) |
Арккосинус |
|
arctan (i) |
interval |
arctg(i) |
Арктангенс |
|
arctan2 (il,i2) |
interval |
arctg(il/i2) |
Арктангенс |
|
arccot (i) |
interval |
arcctg(i) |
Арккотангенс |
|
sinh (i) |
interval |
sh(i) |
Гиперболический синус |
|
cosh (i) |
interval |
ch(i) |
Гиперболический косинус |
|
tanh (i) |
interval |
th(i) |
Гиперболический тангенс |
|
coth (i) |
interval |
cth(i) |
Гиперболический котангенс |
|
arsinh (i) |
interval |
arsh(i) |
Обратный гиперболический синус |
|
arcosh (i) |
interval |
arch(i) |
Обратный гиперболический косинус |
|
artanh (i) |
interval |
arth(i) |
Обратный гиперболический тангенс |
|
arcoth (i) |
interval |
arcth(i) |
Обратный гиперболический котангенс |
|
abs (i) |
interval |
Rl = = {|r| :rei} |
Абсолютная величина |
|
mid (i) |
real |
m — = #*(0.5*inf(i) + 0.5*sup(i)) |
Средняя точка интервала i + |
|
Функция |
Тип результата |
Значение |
|
diam (i) blow (i,r) |
real interval |
d = sup(i) — > Диаметр интервала i -> inf(i) | Эпсилон-расширение |
i, il, i2 — выражения типа interval, г, m, d — выражения типа real J : у := (1 + г) * 1 — г * 1;
blow := intval (pred(inf(у)), succ(sup(y)));
Области определения и множества значений предопределенных функций зависят от реализации и описываются в руководстве пользователя.
Пример 3.2.2.
Если переменные а и b типа interval определены как
а := intval (—1,3);
b := intval (2);
то результатами функций abs, sqr, mid и diam будут следующие значения:
|
Выражение |
Результат |
|
abs (a) |
[0,3] |
|
abs (b) |
[2,2] |
|
sqr (a) |
[0,9] |
|
sqr (b) |
[4,4] |
|
mid (a) |
1 |
|
diam (a) |
4 |
Процедуры ввода-вывода
В этом модуле предусмотрены процедуры
procedure read (var f: text; var a: interval);
procedure write (var f: text; a: interval);
с необязательным параметром-файлом и произвольным количеством параметров ввода-вывода, но без спецификаций формата.
Интервал i = [я, у] должен вводиться в форме
[х,у]
или в форме
В первом случае значения х и у округляются до следующего меньшего и следующего большего чисел типа real соответственно (т. е. производится округление до наименьшего включающего интервала). Второй случай является сокращенной записью для г = [гг,гг]. Если число х точно не представимо, генерируется наименьший интервал, включающий х.
Вывод интервального значения производится с интервальным округлением (х округляется вниз, а у — вверх) в форме
[я, у]
с real-форматом для чисел х и у, принятым по умолчанию (он зависит от реализации).
Пример 3.2.3.
Если int — значение типа interval, то операторы
read (int);
writein (int);
считывают входные данные
0.245
и выводят интервал
[ 2.4499...99Е-001, 2.4500...01Е-001 ],
если число 0.245 точно не представимо. В зависимости от реализации может использоваться другое представление чисел типа real.