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

C ПАВЕДАМЛЕННЕ НА ЭКРАН ДЫСПЛЕЯ АБ ЗАКАНЧЭННI РАБОТЫ

WRITE(5,353) Z2

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

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

STOP

END

Дадатак 5

C ФАЙЛ 'ZEID.FOR'

C ПРАГРАМА 'ZEID' РАШ. СIСТЭМЫ ЛIНЕЙНЫХ АЛГЕБРАIЧНЫХ РАУНАННЯУ AX=B

C МЕТАДАМ ПАЛЕПШАНАЙ IТЭРАЦЫI (МЕТАДАМ ЗЭЙДЭЛЯ).

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

C (ВА УВАХОДНЫМ ФАЙЛЕ ПАВIННА БЫЦЬ РАЗМЕШЧАНА ПА РАДКАХ)

C В-МАТР. ПРАВЫХ ЧАСТАК. С,D-РАБОЧЫЯ МАСIВЫ. XN,XN1-МАТРЫЦЫ РАШЭННЯУ

C СIСТЭМЫ, АТРЫМАНЫХ АДПАВЕДНА НА КРОКУ n I НА КРОКУ n-1 IТЭРАЦЫЙНАГА

C ПРАЦЭСУ. EPS-ЗАДАВ. АДНОСНАЯ ПАГРЭШНАСЦЬ IТЭРАЦЫЙНАГА ПРАЦЭСУ.

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

C РАШЭННЯУ ВЫКОНВ.; К=0-ВЫВАД НЕ ВЫКОНВАЕЦЦА). N-ЛIЧЫЛЬНIК НУМАРУ

C IТЭРАЦЫI)

C ПЕРЕД ВЫКАНАННЕМ РАЗЛIКАУ ПА ПРАГРАМЕ 'ITE' КАРЫСТАЛЬНIК СТВАРАЕ НА

C ДЫСКУ ФАЙЛ УВАХ. ДАДЗЕНЫХ З IМЕМ У ВЫГЛЯДЗЕ 'AAAA.DAT', ДЗЕ ЗАМЕСТ

C СIМВАЛАУ 'AAAA.' КАРЫСТ. УСТАУЛЯЕ ЧАТЫРЫ ЛIТАРЫ IМЯ  СВАЙГО ФАЙЛА

C УВАХ. ДАДЗ.. ПАСЛЯ ПУСКУ ПРАГРАМЫ ГЭТАЕ IМЯ ЗАПЫТВАЕЦЦА ПРАГРАМАЙ

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

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

C У ФАЙЛ З IМЕМ 'AAAA.REZ'.

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

C I ВЫХОДНЫХ ДАДЗЕНЫХ)

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 ЧЫТАННЕ IМЯ ФАЙЛА УВАХОДНЫХ ДАДЗЕНЫХ З ЭКРАНА ДЫСПЛЕЯ

WRITE(5,350)

350 FORMAT(1X,'УВЯДЗIЦЕ IМЯ I  ПАШЫР. ВАШАГА ФАЙЛА УВАХОДНЫХ ДАДЗЕН

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

* НА IМЯ)')

READ(5,351)Z1

351 FORMAT(A8)

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

C У АПЕРАТЫУНАЕ ЗАПАМIНЛЬНАЕ УСТРОЙСТВА I ЗАКРЫЦЦЕ ФАЙЛА

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,'УВАХОДНЫЯ ДАДЗЕНЫЯ:'/'Парадак сiстэмы раунанняу: М=',I2/

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

*'Зададзеная адносная хiбнасць: EPS=',F10.8/

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

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

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

C УТВАРЭННЕ МАСIВАУ 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 ЗАСЫЛКА ПАЧАТКОВАГА НАБЛIЖЭННЯ У МАСIУ XN1(M)

DO 6 I=1,M

6 XN1(I)=C(I)

C ЗАСЫЛКА ПАЧАТКОВАГА ЗНАЧЭННЯ ЛIЧЫЛЬНIКА IТЭРАЦЫЙ N

N=0

N1=0

C РАЗЛIК ЧАРГОВАГА n-АГА НАБЛIЖЭННЯ У МАСIВЕ 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 ВЫЛIЧЭННЕ НАЙБОЛЬШАЙ АДНОСНАЙ РАЗЛIЧАНАЙ РОЗНАСЦI 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 ПАВЯЛIЧЭННЕ ЛIЧЫЛЬНIКА IТЭРАЦЫЙ n НА АДЗIНКУ

N=N+1

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

IF(K.EQ.0)GO TO 14

WRITE(5,20)N

20 FORMAT(1X,'       IТЭРАЦЫЯ НУМАР    ',I3)

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

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

14 DO 11 I=1,M

11 XN1(I)=XN(I)

C БЛОК КАНТРОЛЮ ЗАКАНЧЭННЯ ВЫЛIЧЭННЯУ У ВЫПАДКУ ДРЭННАЙ ЗБЕЖНАСЦI

C IТЭРАЦЫЙНАГА ПРАЦЭСУ

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

N1=N

WRITE(5,354)N,EPSZAD,EPSRAZ

354 FORMAT(1X,'ПРАГРАМА ''ZEID'' ВЫКАНАЛА ',I4,' IТЭРАЦЫЙ'/1X,

*'EPSZAD=',2F10.8,'     EPSRAZ=',2F10.8/1X,'ДЛЯ ПРАЦЯГУ РАЗЛIКАУ УВ

*ЯДЗIЦЕ 1, У АДВАРОТНЫМ ВЫПАДКУ - ЛЮБЫ ЗНАК, АКРАМЯ 1')

READ(5,*)N2

IF(N2.NE.1)GO TO 30

C ЦI ТРЭБА ПРАЦЯГВАЦЬ IТЭРАЦЫI ПА УМОВЕ ДАКЛАДНАСЦI

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

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

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

352 FORMAT(/10X,'РЭЗУЛЬТАТЫ РАЗЛIКУ:'/6(G13.6))

CLOSE(UNIT=3)

C ПАВЕДАМЛЕННЕ НА ЭКРАН ДЫСПЛЕЯ АБ ЗАКАНЧЭННI РАБОТЫ

WRITE(5,353) Z2

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

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

STOP

END