≪
≫

Модуль MVI_ARI

Интервальная векторно-матричная арифметика

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

Типы

Динамические типы для представления интервальных векторов и матриц, определенные как

type ivector = dynamic array [*] of interval;

imatrix = dynamic array [*] of ivector;

являются частью языкового ядра PASCAL-XSC. Фактические границы индексов устанавливаются при объявлении переменных этих типов.

Операции

Многие базовые интервальные векторно-матричные операции, применяемые в математике, являются в этом модуле предопределенными. В нем предусмотрены унарные операции +, — и четыре основные операции +, —, * и /, каждая с покомпонентным округлением до наименьшего включающего интервала. В некоторых случаях допускаются комбинации операндов разных типов. Операции + и — для интервальных векторов и матриц определяются покомпонентно следующим образом:

с := а ± Ь, где c[i] := a[i] ± b[i],

С := А ± В, где C[i,j] := A[i,j] ± B[i,j],

где а, b и с принадлежат к типу ivector, А, В и С — к типу imatrix.

Операции * и / определяются следующим образом:

s := а * Ь, где s := #* (for i := Ibound(a) to

ubound(a) sum (a[i]*b[i])),^ с := r * а, где c[i] := r * a[i],

с := a * г, где c[i] := a[i] * r,

с := a / г, где c[i] := a[i] / r,

с

:= А* Ь,

где

c[i]

:= A[i] * b,^

С

:= г * А,

где

C[i,j]

:= r * A[i,j],

С

:= А * г,

где

C[i,j]

:= A[i,j] * r,

С

:= А / г,

где

C[i.j]

:= A[i,j] / r,

С

:= А * В,

где

C[i.j]

:= A[i] * B[*,j],*

: скалярное

произведение с максимальной точностью,

где г и s принадлежат к типу interval, а, b и с — к типу ivector, А, В и С — к типу imatrix. Операции со смешанными типами операндов определяются соответствующим образом.

Операции отношения =, О, <, <=, >, >= определяются на основе операций = и <= в соответствии с (RD) (см. стр. 142). Если а и b принадлежат к типу ivector, А и В — к типу imatrix, то

а

А

b

В

a[i] A[i,j]

b[i] для всех i,

B[i,j] для всех i, j.

Операции в правых частях тождеств являются операциями для величин типа interval.

Кроме того, предусмотрены операторы in для отношений «содержится в» и «содержится внутри» и оператор >< для проверки на пустоту

Левый операнд

Правый операнд

integer real

interval

rvector

ivector

rmatrix

imatrix

унарные

integer real

*

*

interval

*

*

*

*

rvector

*>/

+*

о

=, <>, in

+*

ivector

*,/

*,/

о

+*

О

in, V, >< +*, **

rmatrix

*,/

*

+*

о

=, <>, in

+ *

imatrix

*,/

*

*

II t Л o

V

o

in, V, >< +*, **

Операции модуля MVI_AR1 ое{ + , -, *}, v е {=, о, <, <=, >, >=} пересечения интервальных векторов и матриц. Эти операторы определяются покомпонентно.

Операции +* и ** обозначают интервальную оболочку и пересечение интервалов, как описано в разд. 3.2 (модуль I_ARI) для типа interval.

Пример 3.6.1.

Чтобы реализовать метод Рунге-Кутты, упомянутый в разд. 3.4 (модуль MV_ARI), с использованием интервальной арифметики, в исходную программу нужно внести лишь небольшие изменения. Переменные kl, к2, кЗ, к4, Y должны быть объявлены принадлежащими к типу ivcctor, а функция F должна быть определена с результатом типа ivcctor. Если при этом вместо модуля MV_ARI подключить модуль MVI_ARI, операторы

kl := h * F (х, Y);

k2 := h * F (х + h/2, Y + kl/2);

k3 := h * F (x + h/2, Y + k2/2);

k4 := h * F (x + h, Y + k3);

Y := Y + (kl + 2 * k2 + 2 * k3 + k4) / 6;

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

Функции преобразования типа для интервальных векторов

Следующие функции применяются для преобразований между типами rvector и ivector:

Функция

Тип результата

Значение

intval (rvl,rv2)

ivector

Интервальный вектор iv, где iv[i] = intval(rvl[i], rv2[i]/*)

intval (rv)

ivector

Интервальный вектор iv, где iv[i] = intval(rv[i])

inf (iv)

rvector

Вектор rv нижних границ, где rv[i] = inf(iv[i])

sup (iv)

rvector

Вектор rv верхних границ, где rv[i] — sup(iv[i])

rv, rvl, rv2 — выражения типа rvector, iv — выражение типа ivector : предполагается, что rvl <= rv2, иначе фиксируется ошибка.

Функции преобразования типа для интервальных матриц

Следующие функции применяются для преобразований между типами rmatrix и imatrix:

Функция

Тип результата

Значение

intval (гМ1,гМ2)

imatrix

Интервальная матрица iM, где iM[i,j] =

= intval(rMl [i, j], rM2[i, j]) (*)

intval (гМ)

imatrix

Интервальная матрица iM, где iM[i,j] = intval(rM[i,j])

inf (iM)

rmatrix

Матрица rM нижних границ, где rM[i,j = inf(iM[i,j])

sup (iM)

rmatrix

Матрица гМ верхних границ, где rM[i, j] = sup(iM[i,j)

гМ, гМ1, гМ2 — выражения типа rmatrix, iM — выражение типа imatrix bb : предполагается, что гМ1 <= гМ2, иначе фиксируется ошибка.

Совмещение операции присваивания

Покомпонентная инициализация переменных типов ivector и imatrix и преобразование типов из rvector в ivector и из rmatrix в imatrix могут осуществляться с помощью совмещенной операции присваивания:

Присваивание

Значение

iv

:= r

iv[j]

:=

intval

(r)

j = lb(iv),...

,ub(iv)

iv

:= i

iv[j]

; =

i

j = lb(iv),...

,ub(iv)

iv

:= rv

iv

: =

intval

(rv)

iM

:= r

iM[j,k]

:=

intval

(r)

j = lb(iM,l),. k = lb(iM,2),

..,ub(iM,l)

...,ub(iM,2)

iM

:= i

iM[j,k]

:=

i

j = lb(iM,l),. k = lb(iM,2),

..,ub(iM,l)

. ..,ub(iM,2)

iM

:= rM

iM

:=

intval

(rM)

i — выражение типа interval, iv — переменная типа ivector, iM — переменная типа imatrix, г — выражение типа real, rv — выражение типа rvector, гМ — выражение типа rmatrix

Предопределенные функции

Предусмотрены функции id и null для порождения единичной матрицы и нулевой матрицы или нулевого вектора, а также функция transp для транспонирования матриц. Функции mid, diam и blow вычисляют среднюю точку, диаметр и эпсилон-расширение для каждой компоненты.

Функция

Тип результата

Значение

null (iv)

rvector

Нулевой вектор с тем же индексным диапазоном, что и у iv

null (iM)

rmatrix

Нулевая матрица с теми же индексными диапазонами, что и у iM

null (iMl,iM2)

rmatrix

Нулевая матрица с теми же индексными диапазонами, что и у произведения iMl х iM2

id (iM)

rmatrix

Единичная матрица с теми же индексными диапазонами, что и у iM

id (iMl,iM2)

rmatrix

Единичная матрица с теми же индексными диапазонами, что и у произведения iMl х iM2

mid (iv)

rvector

Вектор средних точек rv, где rv[i] = mid(iv[i])

diam (iv)

rvector

Вектор диаметров rv, где rv[i] = diam (iv[i])

mid (iM)

rmatrix

Матрица средних точек гМ, где rM[i,j = mid(iM[i,j])

diam (iM)

rmatrix

Матрица диаметров гМ, где = diam(iM[i, j)

transp (iM)

imatrix

Транспонированная матрица iMt для матрицы iM с элементами

iMt[i,j] = iMj, i]

blow (iv,r)

ivector

Вектор эпсилон-расширений ive, где ive[i] = bkw(iv[i],r)

blow (iM,r)

imatrix

Матрица эпсилон-расширений iMe, где = blow(iM[i, j], r)

г — выражение типа real, iv, ive — выражения типа ivector, iM, iMl, iM2, iMt, iMe — выражения типа imatrix

Пример 3.6.2.

Интервальное включение для значения невязки

D — Е - R х А,

упомянутого в разд. 3.4 (модуль MV_ARI), можно вычислить, используя модуль MVI_ARI, переменные A, D и R типа imatrix и оператор

D := id (А) - R * А;

Наиболее точно включающую интервальную матрицу можно вычислить с помощью высокоточного выражения (см. разд. 2.4.4):

D := ## ( id (А) - R * А );

Процедуры ввода-вывода

В этом модуле предусмотрены процедуры

procedure read (var f: text; var a: ivector);

procedure read (var f: text; var A: imatrix);

procedure write (var f: text; a: ivector);

procedure write (var f: text; A: imatrix);

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

Интервальный вектор или интервальная матрица вводятся покомпонентно в соответствии с правилами ввода значений типа interval. Матрица вводится строка за строкой. Вывод интервального вектора или интервальной матрицы также выполняется покомпонентно в соответствии с форматом вывода для интервалов, принятым по умолчанию.

 
Посмотреть оригинал