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

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

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

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

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

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

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

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

CALL GAUSS(M,A,B)

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,'ПРОГРАММА ''GAUS'' РАБОТУ ОКОНЧИЛА. РЕЗУЛЬТАТЫ РАСЧЕТА

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

STOP

END

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

C МЕТОДАМ ГАУССА

SUBROUTINE GAUSS(M,A,B)

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

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

C В-МАТРИЦА ПРАВЫХ ЧАСТЕЙ. НА ВХОДЕ МАТРИЦА ПРАВЫХ ЧАСТЕЙ

C ЗАМЕНЯЕТСЯ МАТРИЦЕЙ X РЕШЕНИЯ СИСТЕМЫ.

C     COMPLEX A,B,W

DIMENSION A(20,20),B(20)

C НАЧАЛО МЕТОДО ГАУССА

M1=M-1

C   НАЧАЛО ПРЯМОГО ХОДА

C       ВЫБОР i-ТОГО УРАВНЕНИЯ СИСТЕМЫ, СОДЕРЖАЩЕГО ВЕДУЩИЙ ЭЛЕМЕНТ

DO 4 I=1,M1

W=A(I,I)

C       ДЕЛЕНИЕ i-ТОГО УРАВНЕНИЯ НА ВЕДУЩИЙ ЭЛЕМЕНТ

DO 1 J=I,M

1 A(I,J)=A(I,J)/W

B(I)=B(I)/W

M2=I+1

C       ВЫБОР k-ОГО УРАВНЕНИЯ, ИЗ КОТОРОГО ИСКЛЮЧАЕТСЯ НЕИЗВ. ПЕРЕМЕННАЯ Х(i)

DO 3 K=M2,M

C       ВЫБОР l-ОГО СТОЛБЦА В k-ТОМ УРАВНЕНИИI ДЛЯ ВЫЧИТАНИЯ i-ОГО УРАВН. ОТ k-ОГО

DO 2 L=M2,M

2 A(K,L)=A(K,L)-A(I,L)*A(K,I)

3 B(K)=B(K)-B(I)*A(K,I)

4 CONTINUE

B(M)=B(M)/A(M,M)

C   КОНЕЦ ПРЯМОГО ХОДА. НАЧАЛО ОБРАТНОГО ХОДА

DO 5 I=1,M1

K=M-I

DO 5 J=K,M1

5 B(K)=B(K)-A(K,J+1)*B(J+1)

C КОНЕЦ ОБРАТНОГО ХОДА И МЕТОДА ГАУССА

RETURN

END

Дополнение 3

C ФАЙЛ JORD.FOR

C ПРОГРАММА 'JORD' ПРЕДНАЗН. ДЛЯ РЕШЕНИЯ СИСТ. ЛИН. АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ

C AX=B ПО СХЕМЕ ЖАРДАНА. СОЗДАНА НА КАФЕДРЕ ЭЛЕКТР. СТАНЦИЙ БГПА

C 1.10.94 г.

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

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

C В-МАТРИЦА ПРАВЫХ ЧАСТЕЙ. НА ВЫХОДЕ МАТРИЦА ПРАВЫХ ЧАСТЕЙ

C ЗАМЕНЯЕТСЯ МАТРИЦЕЙ РЕШЕНИЯ СИСТЕМЫ.

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

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

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

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

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

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

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

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

C ДЛЯ РЕШЕНИЯ КОМПЛЕКСНОЙ СИСТЕМЫ НУЖНО ЗАПИСАТЬ ПРОБЕЛ ВМЕСТО

C СИМВОЛА 'C' В ПЕРВОЙ ПАЗИЦЫИ СТРОЧКИ 22 ЭТОЙ ПРОГРАММЫ ПЕРЕД ОПЕРАТОРОМ

C 'COMPLEX A,B' I ЗАНОВО СОБЛЮСТИ ТРАНСЛЯЦИЮ ПРОГРАММЫ

CHARACTER Z1*8,Z2*8

C     COMPLEX A,B,AA

DIMENSION A(9,9),B(9)

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,((A(I,J),J=1,M),I=1,M),(B(I),I=1,M)

CLOSE(UNIT=1)

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

Z2(5:8)='.REZ'

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

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

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

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

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

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

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

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

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

C НАЧАЛО СХЕМЫ ЖАРДАНА

C ВЫБОР i-ТОГО УРАВНЕНИЯ СИСТЕМЫ, КОТОРОЕ СОДЕРЖИТ ВЕДУЩИЙ ЭЛЕМЕНТ

DO 6 I=1,M

IA=I+1

AA=A(I,I)

C ДЕЛЕНИЕ i-ТОГО УРАВНЕНИЯ НА ВЕДУЩИЙ ЭЛЕМЕНТ A(i,i)

IF(I.EQ.M)GO TO 2

DO 1 L=IA,M

1 A(I,L)=A(I,L)/AA

2 B(I)=B(I)/AA

C ВЫБОР k-ТОГО УРАВНЕНИЯ СИСТЕМЫ ДЛЯ ИСКЛ. ИЗ НЕГО НЕИЗВЕСТНОЙ ПЕРЕМ. X(i)

DO 5 K=1,M

IF(I.EQ.K)GO TO 5

IF(I.EQ.M)GO TO 4

C ВЫБОР l-ОГО СТОЛБЦА В k-ТОМ УРАВН. ДЛЯ ВЫЧИТАНИЯ i-ОГО УРАВНЕНИЯ ОТ k-ОГО

DO 3 L=IA,M

3 A(K,L)=A(K,L)-A(K,I)*A(I,L)

4 B(K)=B(K)-A(K,I)*B(I)