1 | MAIN PART Gauss. |
! Программа решения системы линейных | |
! уравнений методом Гаусса-Жордана | |
! Основной раздел | |
2 | BEGIN |
3 | INDEX k,l. |
4 | is : (k=1..n). |
5 | js : (l=1..n). |
6 | ijs : (is; js). |
7 | VARIABLE a DEFINED ON ijs. |
8 | VARIABLE b, x DEFINED ON is. |
9 | INPUT a(FILE='gauss') ON ijs, |
10 | b(FILE='gauss') ON is. |
11 | DOMAIN PARAMETERS n=4. |
12 | COMPUTE Calculate(a ON ijs, b ON is RESULT x ON is). |
13 | OUTPUT x(FILE='gauss.out',TAB(10),'Решение X=',STR(1)) ON is. |
14 | END PART. |
15 | PART Calculate. |
16 | a,b RESULT x |
! Раздел вычислений | |
17 | BEGIN |
18 | INDEX i,j |
19 | so : (ts: (t=1..n); ijs: (is: (i=1..n); js: (j=1..n))). |
20 | s1o:(ts;is). s:so/ts-LEFT(1). s1:s1o/t=2..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=1 ASSUME m=a. |
28 | FOR s1o/t=1 ASSUME r=b. |
29 | sa,sb:s/i=t. sa1,sb1:s1/i=t. |
30 | FOR sa ASSUME m = m[t-1,i=t] / m[t-1,i=t,j=t]. |
31 | FOR sa1 ASSUME r = r[t-1,i=t] / m[t-1,i=t,j=t]. |
32 | FOR sb ASSUME m = m[t-1] - m[t-1,j=t] * m[i=t]. |
33 | FOR sb1 ASSUME r = r[t-1] - m[t-1,j=t] * r[i=t]. |
34 | FOR is ASSUME x = r[t=n]. |
35 | 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.0, 0.0, 0.0, 0.0,
0.0, 1.0, 0.0, 0.0,
0.0, 0.0, 1.0, 0.0,
0.0, 0.0, 0.0, 1.0;
b(k=1..4)= 1.1, 2.2, 3.3, 4.4;(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-34) Вычисления для соответствующих расчетных формул.
(35) Конец раздела.