| 1 | MAIN PART Gauss. |
| ! Программа решения системы линейных | |
| ! уравнений методом Гаусса-Жордана | |
| ! Основной раздел | |
| 2 | BEGIN |
| 3 | INDEX k,l. |
| 4 | ks : (k=1..n). |
| 5 | ls : (l=1..n). |
| 6 | kls : (ks; ls). |
| 7 | VARIABLE a DEFINED ON kls. |
| 8 | VARIABLE b, x DEFINED ON ks. |
| 9 | INPUT a(FILE='gauss') ON kls, |
| 10 | b(FILE='gauss') ON ks. |
| 11 | DOMAIN PARAMETERS n=4. |
| 12 | COMPUTE Calculate(a ON kls, b ON ks RESULT x ON ks). |
| 13 | OUTPUT x(FILE='gauss.out',TAB(10),'Решение :',STR(1)) ON ks. |
| 14 | END PART. |
| 15 | PART Calculate. |
| 16 | a,b RESULT x |
| ! Раздел вычислений | |
| 17 | BEGIN |
| 18 | INDEX i,j |
| 19 | so : (ijs: (is: (i=1..n); js: (j=1..n));ts: (t=0..n)). |
| 20 | s1o:(ts;is). s:so/ts-LEFT(1). s1:s1o/t=1..n. |
| 21 | VARIABLE a DEFINED ON ijs. |
| 22 | VARIABLE b, x DEFINED ON is. |
| 23 | VARIABLE m DEFINED ON so. |
| 24 | VARIABLE r DEFINED ON s1o. |
| 25 | DOMAIN PARAMETERS n=4. |
| 26 | DISTRIBUTION INDEX i=2..8, j=1. |
| 27 | FOR so/t=0 ASSUME m=a. |
| 28 | FOR s1o/t=0 ASSUME r=b. |
| 29 | sa,sb:s/i=t. sa1,sb1:s1/i=t. |
| 30 | MACRO INDEX ti [t-1,i=t]. |
| 31 | MACRO INDEX tij [ti,j=t]. |
| 32 | FOR sa ASSUME m = m[ti] / m[tij]. |
| 33 | FOR sa1 ASSUME r = r[ti] / m[tij]. |
| 34 | FOR sb ASSUME m = m[t-1] - m[t-1,j=t] * m[i=t]. |
| 35 | FOR sb1 ASSUME r = r[t-1] - m[t-1,j=t] * r[i=t]. |
| 36 | FOR is ASSUME x = r[t=n]. |
| 37 | END PART. |
Рассмотрим эту программу более подробно (используемые ниже номера совпадают с нумерацией строк программы).
(1) Заголовок главного раздела программы Gauss.
(2) Начало главного раздела.
(3) Описание индексов областей.
(4-6) Определяются одномерные области is, js и многомерная область ijs, на которых определены начальные данные задачи.
(7-8) Описание переменных a, b и x. a - матрица коэффициентов системы, b - столбец свободных членов, х - результат решения системы.
(9-10) Ввод начальных данных из файла gauss.dat, содержащего следующие строки:
a(k=1..4,l=1..4)= 1.1161, 0.1254, 0.1397, 0.1490,
0.1582, 1.1675, 0.1768, 0.1871,
0.1968, 0.2071, 1.2168, 0.2271,
0.2368, 0.2471, 0.2568, 1.2671;
b(k=1..4)= 1.5471, 1.6471, 1.7471, 1.8471;(11) Задание параметра областей (размерности матрицы коэффициентов системы и столбец свободных членов).
(12) Вызов раздела Calculate, осуществляющего расчет.
(13) Вывод результата в файл gauss.out.
(14) Конец главного раздела.
(15) Заголовок простого раздела Calculate.
(16) Обозначение входных (a, b) и выходных (x) параметров раздела.
(17) Начало простого раздела.
(18) Описание индексов областей.
(19) Определяется многомерная область so, состоящая из областей ts и ijs. Область ijs в свою очередь состоит из is и js.
(20) Определяются безусловная область s1o и области s, s1 с помощью операций модификации области.
(21-22) Описание переменных, являющихся параметрами раздела.
(23-24) Описание переменных m и r, участвующих в расчете.
(25) Задание размерности областей.
(26) Описание индексов распределения.
(27-28) Задание начальных значений m и r.
(29) Описание вспомогательных условных областей sa, sb, sa1, sb1.
(30-31) Описания индексных конструкций.
(32-36) Вычисления для соответствующих расчетных формул.
(37) Конец раздела.
