Методы решения систем линейных алгебраических уравнений (Лабораторная работа № 2), страница 8

C СООБЩЕНИЕ НА ЭКРАН ДИСПЛЕЯ О ЗАВЕРШЕНИИ РАБОТЫ

WRITE(5,353) Z2

353 FORMAT(1X,'ПРОГРАММА ''ITER'' РАБОТУ ОКОНЧИЛА. РЕЗУЛЬТАТЫ РАСЧЕТА

* ЗАПИСАНЫ НА ДИСК В ФАЙЛ '/1X,A8)

STOP

END

Дополнение 5

C ФАЙЛ 'ZEID.FOR'

C ПРОГРАММА 'ZEID' РЕШ. СИСТЕМЫ ЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ AX=B

C МЕТОДОМ УЛУЧШЕННОЙ ИТЕРАЦИИ (МЕТОДОМ ЗЕЙДЕЛЯ).

C М-ПОРЯДОК СИСТЕМЫ УРАВНЕНИЙ. А-КВАДРАТНАЯ МАТРИЦА КОЭФФИЦИЕНТОВ

C (ВО ВХОДНОМ ФАЙЛЕ ДОЛЖНА БЫТЬ РАЗМЕЩЕНА ПО СТРОЧКАМ)

C В-МАТР. ПРАВЫХ ЧАСТЕЙ. С,D-РАБОЧИЕ МАСИВВЫ. XN,XN1-МАТРИЦЫ РЕШЕНИЙ

C СИСТЕМЫ, ПОЛУЧИВШИХСЯ СООТВЕТСТВЕННО НА ШАГЕ n I НА ШАГЕ n-1 ИТЕРАЦИОННОГО

C ПРОЦЕССА. EPS-ЗАДАНН. ОТНОСИТЕЛЬНАЯ ПОГРЕШНОСТЬ ИТЕРАЦИОННОГО ПРОЦЕССА.

C К-ПРИЗНАК ВЫВОДА НА ЭКРАН ПРОМЕЖУТ. ЗНАЧ. ИТЕРАЦИОННЫХ РЕШЕНИЙ (ПРИC ЗНАК ЗАДАЕТСЯ ВО ВХОДН. ДАННЫХ: К=1-ВЫВОД ПРОМЕЖУТОЧНЫХ ЗНАЧЕНИЙ

C РЕШЕНИЙ ИСПОЛН.; К=0-ВЫВОД НЕ ИСПОЛНЯЕТСЯ). N-СЧЕТЧИК НОМЕРА

C ИТЕРАЦИИ)

C ПЕРЕД ВЫПОЛНЕНИЕМ РАСЧЕТА ПО ПРОГРАММЕ 'ITE' ПОЛЬЗОВАТЕЛЬ СОЗДАЕТ НА

C ДИСКЕ ФАЙЛ ВХОДН. ДАННЫХ С ИМЕНЕМ В ВИДЕ 'AAAA.DAT', ГДЕ ВМЕСТО

C СИМВОЛОВ 'AAAA.' ПОЛЬЗ. ВСТАВЛЯЕТ ЧЕТЫРЕ БУКВЫ ИМЯ  СВОЕГО ФАЙЛА

C ВХОДН. ДАННЫХ ПОСЛЕ ПУСКА ПРОГРАММЫ ЭТО ИМЯ ЗАПРАШИВАЕТСЯ ПРОГРАММОЙ

C С ЭКРАНА ДИСПЛЕЯ, И ОНО ДОЛЖНО БЫТЬ ВВЕДЕНО ПОЛЬЗОВАТЕЛЕМ.

C ПОСЛЕ ЗАВЕРШ. РАСЧЕТА ПРОГРАММА ЗАПИСЫВАЕТ РЕЗУЛЬТАТЫ РАСЧЕТА НА ДИСК

C В ФАЙЛ С ИМЕНЕМ 'AAAA.REZ'.

C Z1,Z2 - СИМВОЛЬНЫЕ ПЕРЕМЕННЫЕ (СООТВЕТСТВЕННО ИМЕНА ФАЙЛОВ ВХОДНЫХ

C И ИСХОДЯЩИХ ДАННЫХ)

CHARACTER Z1*8,Z2*8

C     COMPLEX A,B,C,D,XN,XN1,W1

DIMENSION  A(20,20),B(20),C(20),D(20,20),XN(20),XN1(20)

C ЧТЕНИЕ ИМЯ ФАЙЛА ВХОДНЫХ ДАННЫХ С ЭКРАНА ДИСПЛЕЯ

WRITE(5,350)

350 FORMAT(1X,'ВВЕДИТЕ ИМЯ И  РАСШИР. ВАШЕГО ФАЙЛА ВХОДНЫХ ДАННЫХ

* В ВИДЕ:'/1X,'"AAAA.DAT"( ДЛЯ ЭТОГО ЗАМЕНИТЕ СИМВОЛЫ "AAAA"

* НА ИМЯ)')

READ(5,351)Z1

351 FORMAT(A8)

C ОТКРЫТИЕ ФАЙЛА ВХОДН. ДАННЫХ, ЧТЕНИЕ ВХОДНЫХ ДАННЫХ С ДИСКА

C В ОПЕРАТИВНОЕ ЗАПОМИНАЮЩЕЕ УСТРОЙСТВО И ЗАКРЫТИЕ ФАЙЛА

OPEN(UNIT=1,FILE=Z1,STATUS='OLD')

READ(1,*)M,K,EPS,((A(I,J),J=1,M),I=1,M),(B(I),I=1,M)

CLOSE(UNIT=1)

C ОТКРЫТИЕ ФАЙЛА ДЛЯ ВЫХОДНЫХ  ДАННЫХ, ЗАПIСЬ ВХОДНЫХ ДАННЫХ В

C ВЫХОДНОЙ ФАЙЛ

Z2(1:4)=Z1(1:4)

Z2(5:8)='.REZ'

OPEN(UNIT=3,FILE=Z2,STATUS='NEW')

WRITE(3,360)M,K,EPS,((A(I,J),J=1,M),I=1,M)

360 FORMAT(10X,'ВЫХОДНОЙ   Ф А Й Л   П Р АОГ Р А М М Ы   ZEID'//

*10X,'ВХОДНЫЕ ДАННЫЕ:'/'Порядок системы уравнений: М=',I2/

*'Признак вывода промежуточных результатов на экран: К=',I2/

*'Заданная относительная погрешность: EPS=',F10.8/

*'Матрица коэффициентов A(M,M) системы:'/(10F8.4))

WRITE(3,370)(B(I),I=1,M)

370 FORMAT('Матрица правых частей В(M):'/(10F8.4))

C ОБРАЗОВАНИЕ МАССИВОВ C(M),D(M,M)

DO 5 I=1,M

DO 4 J=1,M

IF(I.EQ.J)GO TO 3

D(I,J)=-A(I,J)/A(I,I)

GO TO 4

3 D(I,J)=0.

4 CONTINUE

5 C(I)=B(I)/A(I,I)

C ЗАСЫЛКА НАЧАЛЬНОГО ПРИБЛИЖЕНИЯ В МАССИВ XN1(M)

DO 6 I=1,M

6 XN1(I)=C(I)

C ЗАСЫЛКА НАЧАЛЬНОГО ЗНАЧЕНИЯ СЧЕТЧИКА ИТЕРАЦИЙ N

N=0

N1=0

C РАСЧЕТ ОЧЕРЕДНОГО n-ОГО ПРИБЛИЖЕНИЯ В МАСИВЕ XN(M)

9 DO 7 I=1,M

W=C(I)

DO 10 J=1,M

10 W=W+D(I,J)*XN(J)

7 XN(I)=W

C ВЫЧИСЛЕНИЕ НАИБОЛЬШЕЙ ОТНОСИТЕЛЬНОЙ РАССЧИТАННОЙ РАЗНИЦЫ EPSRAZ

EPSRAZ=0.

DO 8 I=1,M

W=ABS(XN(I)-XN1(I))

IF(EPSRAZ.GT.W)GO TO 8

EPSRAZ=W

EPSZAD=EPS*XN(I)

8 CONTINUE

C УВЕЛИЧЕНИЕ СЧЕТЧИКА ИТЕРАЦИЙ n НА ЕДИНИЦУ

N=N+1

C ВЫВОД ПРОМЕЖУТОЧНЫХ ЗНАЧЕНИЙ РЕШЕНИЯ НА ЭКРАН

IF(K.EQ.0)GO TO 14

WRITE(5,20)N

20 FORMAT(1X,'      ИТЕРАЦИЯ НОМЕР    ',I3)

WRITE(5,*)(XN(I),I=1,M)

C ПЕРЕСЫЛКА ЗНАЧЕНИЙ ПОСЛЕДНЕЙ ИТЕРАЦИИ С МАССИВА XN(M) В МАССIВ XN1(M)

14 DO 11 I=1,M

11 XN1(I)=XN(I)

C БЛОК КОНТРОЛЯ ОКОНЧАНИЯ ВЫЧИСЛЕНИЙ В СЛУЧАЯ ПЛОХОЙ СХОДИМОСТИ

C ИТЕРАЦИОННОГО ПРОЦЕССА

IF((N-N1).LT.50)GO TO 12

N1=N

WRITE(5,354)N,EPSZAD,EPSRAZ

354 FORMAT(1X,'ПРОГРАММА ''ZEID'' СОБЛЮЛА ',I4,' ИТЕРАЦИЙ/1X,

*'EPSZAD=',2F10.8,'     EPSRAZ=',2F10.8/1X,'ДЛЯ ПРОДОЛЖЕНИЯ РАСЧЕТА

*ВВЕДИТЕ 1, В ОБРАТНОМ СЛУЧАЕ - ЛЮБОЙ ЗНАК, КРОМЕ 1')

READ(5,*)N2

IF(N2.NE.1)GO TO 30

C НАДО ЛИ ПРОДОЛЖАТЬ ИТЕРАЦИИ ПО УСЛОВИЮ ТОЧНОСТИ

12 IF(EPSRAZ.GT.EPSZAD)GO TO 9

C ЗАПIСЬ РЕЗУЛЬТАТОВ  РАСЧЕТА В ВЫХОДНОЙ ФАЙЛ И ЗАКРЫТИЕ ФАЙЛА

30 WRITE(3,352)(XN(I),I=1,M)

352 FORMAT(/10X,'РЕЗУЛЬТАТЫ РАСЧЕТА:'/6(G13.6))

CLOSE(UNIT=3)

C СООБЩЕНИЕ НА ЭКРАН ДИСПЛЕЯ О ЗАВЕРШЕНИИ РАБОТЫ

WRITE(5,353) Z2

353 FORMAT(1X,'ПРОГРАММА ''ZEID'' РАБОТУ ОКОНЧИЛА. РЕЗУЛЬТАТЫ РАСЧЕТА

* ЗАПИСАНЫ НА ДИСК В ФАЙЛ '/1X,A8)

STOP

END