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

5 CONTINUE

6 CONTINUE

C КОНЕЦ СХЕМЫ ЖАРДАНА

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

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

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

CLOSE(UNIT=3)

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

WRITE(5,353) Z2

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

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

STOP

END

Приложение 4

C ФАЙЛ ITER.FOR

C ПРОГРАММА 'ITER' ПРЕДН. ДЛЯ РЕШЕНИЯ СИСТЕМЫ ЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ

C УРАВНЕНИЙ AX=B МЕТОДОМ ПРОСТОЙ ИТЕРАЙИИ.

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

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

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

C СИСТЕМЫ, ПОЛУЧИВШИХСЯ СООТВЕТСТВЕННО НА ШАГЕ n И НА ШАГЕ 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

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,'ВЫХОДНОЙ   Ф А Й Л   П Р О Г Р А М М Ы   ITER'//

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

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

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

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

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

370 FORMAT('Матрица правых частей B(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=0.

DO 10 J=1,M

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

W=W+C(I)

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*ABS(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) В МАССИВ 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,'ПРОГРАММА ''ITER'' СОБЛЮЛА ',I4,' ИТЕРАЦИЙ/1X,

*'EPSZAD=',F10.8,'     EPSRAZ=',F10.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,'РЕЗУЛЬТАТЫ РАСЧЕТА:'/(6G13.6))

CLOSE(UNIT=3)