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) Конец раздела.