|
|
|
|
|
|
|
|
Init_Const - программа получения констант вещественной арифметики ЭВМ Invert3dMatrix - программа обращения трехдиагональных матриц общего вида, включая плохо обусловленные (подробное описание). Lin2dsysccmSolver - программа обращения двухдиагональных матриц, вычисления определителя и решения системы линейных алгебраических уравнений с двухдиагональной матрицей коэффициентов (подробное описание). Lin3dsysccmSolver - программа обращения трехдиагональных матриц, решения систем линейных алгебраических уравнений с трехдиагональной матрицей коэффициентов, а также вычисления определителя матрицы (подробное описание). LinsysccmSolver - программа нахождения матрицы, обратной прямоугольной, вычисления определителя и решения системы линейных алгебраических уравнений с заполненными матрицами коэффициентов (подробное описание). PseudsysccmSolver - программа решения систем линейных уравнений AX=Y со слабовырожденной матрицей A (у A имеется лишь одно нулевое собственное значение) (подробное описание). Программа Init_Const определяет константы вещественной арифметики ЭВМ:
Структура:
Обращение: CALL INIT_CONST, если вывод вычисленных констант не требуется; Выходные данные: Вещественные константы e_8, e_0, e_1, e_2=e_1/beta
и целые константы beta,u,l,t.
Подпрограмма-функция GTEXP - выделение мантиссы и порядка вещественного числа.
Подпрограмма-функция CHEXP - восстановление вещественного числа по его мантиссе и порядку.
Пусть, например, ЭВМ есть IBM PC. Известно, что машинные константы
компьютеров такого типа есть: beta=2,t=53,l=-1021,u=1024.
PROGRAM TEST
IMPLICIT REAL*8 (A-H, O-Z)
INTEGER RADIX
COMMON /F499_RCONST/ OVFLO,UNDFLO,EPS,EPSMIN
COMMON /F499_ICONST/ RADIX,MAXEXP,MINEXP,MANTSZ
CALL INITP
D1=GTEXP(1D0,I)
DE=GTEXP(EPS,J)
DO=GTEXP(OVFLO,L)
DU=GTEXP(UNDFLO,K)
D=1D0
PRINT1,D,D1,I,EPS,DE,J,UNDFLO,DU,K,OVFLO,DO,L,
1 FORMAT(10X,'ЧИСЛО',10X,':',6X,'МАНТИССА',6X,': ПОРЯДОК',/,
* 25('-'),
* '+',20('-'),'+',8('-'),4(/,E24.15E3,' :',F19.16,' : ',I5),/)
CALL SUB(D1,I,DE,J,DO,L,DU,K)
STOP
END
C
SUBROUTINE SUB(D,I,DE,J,DO,L,DU,K)
IMPLICIT REAL*8 (A-H, O-Z)
D1=CHEXP(D,I)
EPS=CHEXP(DE,J)
OVFL=CHEXP(DO,L)
UNDF=CHEXP(DU,K)
PRINT1,D,I,D1,DE,J,EPS,DE,K,UNDF,DO,L,OVFL
1 FORMAT(6X,'МАНТИССА',6X,': ПОРЯДОК:',10X,'ЧИСЛО',/,20('-'),
* '+',8('-'),'+',25('-'),4(/,F19.16,' : ',I5,' :',E24.15E3))
RETURN
END
Таблица 1 констант вещественной арифметики ЭВМ:
The constants of mashin`s arithmetic ...
MAXEXP= 1024 OVFLO= 1.797693134862316E+308
MINEXP= -1021 UNDFLO= 2.225073858507201E-308
RADIX= 2 EPS= 2.220446049250313E-016
MANTSZ= 53 EPSMIN= 1.110223024625157E-016
Таблица 2 выделенных мантисс и порядков вещественных чисел:
1=1/beta*beta^1,e_1=1/beta*beta^{2-t},e_0=1/beta*beta^l и
e_8=(1-1/beta^t)*beta^u
ЧИСЛО : МАНТИССА : ПОРЯДОК
------------------------+--------------------+--------
.100000000000000E+001 : .5000000000000000 : 1
.222044604925031E-015 : .5000000000000000 : -51
.222507385850720E-307 : .5000000000000000 : -1021
.179769313486232E+309 : .9999999999999999 : 1024
Таблица 3 восстановленных по мантиссам и порядкам вещественных чисел:
1/beta*beta^1=1,1/beta*beta^{2-t}=e_1,1/beta*beta^l=e_0 и
(1-1/beta^t)*beta^u=e_8
МАНТИССА : ПОРЯДОК: ЧИСЛО
-------------------+--------+-------------------------
.5000000000000000 : 1 : .100000000000000E+001
.5000000000000000 : -51 : .222044604925031E-015
.5000000000000000 : -1021 : .222507385850720E-307
.9999999999999999 : 1024 : .179769313486232E+309
Программа Invert3dMatrix - обращение трехдиагональных матриц C_3. Структура:
Обращение: CALL Invert3dMatrix(M,A,INF,R1,R2,R,IZ)
_ _
| q_1 r_2 0|
| p_2 q_2 \ |
C_3=| \ \ r_M |; (1)
| 0 p_M q_M |
- -
Используется метод критических компонент [2-5].
Lin2dsysccmSolver - ОБРАЩЕНИЕ ДВУХДИАГОНАЛЬНЫХ МАТРИЦ
И РЕШЕНИЕ СИСТЕМ ЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ
С ДВУХДИАГОНАЛЬНОЙ МАТРИЦЕЙ КОЭФФИЦИЕНТОВ Программа Lin2dsysccmSolver - обращение двухдиагональных матриц C_2 и решение систем линейных уравнений C_2X=Y (метод критических компонент [2-5]). Структура:
Обращение: CALL Lin2dsysccmSolver(M,R,N,INF,IM,JM,B,DET)
_ _
| q_1 r_2 0|
| q_2 \ |
C_2=| \ r_M |;
| 0 q_M |
- -
Y_1 Y_2 ... Y_{IM}
_ _
| b_{11} b_{12} ... b_{1IM} |
| b_{21} b_{22} ... b_{2IM} |
B=| : : : : |. (**)
| b_{N1} b_{N2} ... b_{NIM} |
- -
Выходные данные:
Используется метод критических компонент [2-5]. Пример Вычислить решения системы [1,4]:
_ _ _ _
| 7/5 11/3 | | y_1 |
| 7/5 11/3 | | y_2 |
| \ \ | X= | : |, (1)
| 7/5 11/3 | | : |
| 7/5 | | y_M |
- - - -
y_i=(152i+118)/(15(2i+1)(2i+3)),y_M=7/(5(2M+1)),i=1,2,...,M-1.
Вычисление обратной матрицы и определителя матрицы системы (1).
Ниже приводится текст программы решения этой задачи, а также
таблица - результаты работы программы.
PROGRAM TEST
IMPLICIT REAL*8 (A-H, O-Z)
INTEGER RADIX
DIMENSION A(10,10),XB(10,5),R(15),X(10)
COMMON /F499_RCONST/ OVFLO,UNDFLO,EPS,EPSMIN
COMMON /F499_ICONST/ RADIX,MAXEXP,MINEXP,MANTSZ
CALL INIT_CONST
M=3
N=10
DET=1D0
JM=-1
IM=1
2 JM=JM+1
INF=1
DO I=1,3
R(2*I)=1D0
R(2*I-1)=2D0
X(I)=XB(I,1)
ENDDO
XB(1,1)=2D0
XB(2,1)=7D0/6D0
XB(3,1)=1D0/3D0
CALL Lin2dsysccmSolver(M,R,N,INF,IM,JM,XB,DET)
IM=M
IF(JM.EQ.0) GOTO 2
PRINT 7
7 FORMAT('Решение системы (1) и обращение (двухдиагональной)'
*' матрицы этой системы'/' (Программа Lin2dsysccmSolver)'/
*' Решение Обратная матрица')
write(6,5) (X(I),(XB(I,J),J=1,IM),I=1,M)
write(6,6) INF,DET
5 FORMAT(D10.3,' : ',3d10.3)
6 FORMAT(' INF=',I3,', DET=',d10.4)
STOP
END
Таблица решения системы (1) и обратной матрицы к матрице системы.
Решение Обратная матрица
.100D+01 : .100D+01 -.200D+01 .400D+01
.500D+00 : .000D+00 .100D+01 -.200D+01
.333D+00 : .000D+00 .000D+00 .100D+01
INF= 0, DET= .1000D+01
Lin3dsysccmSolver - ОБРАЩЕНИЕ ТРЕХДИАГОНАЛЬНЫХ МАТРИЦ
И РЕШЕНИЕ СИСТЕМ ЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ
С ТРЕХДИАГОНАЛЬНОЙ МАТРИЦЕЙ КОЭФФИЦИЕНТОВ Программа Lin3dsysccmSolver - обращение трехдиагональных матриц C_3 и решение систем линейных уравнений C_3X=Y (метод критических компонент [2-5]). Структура:
Обращение: CALL Lin3dsysccmSolver(M,R,N,INF,IM,JM,B,A,DET)
_ _
| q_1 r_2 0|
| p_2 q_2 \ |
C_3=| \ \ r_M |;
| 0 p_M q_M |
- -
Y_1 Y_2 ... Y_{IM}
_ _
| b_{11} b_{12} ... b_{1IM} |
| b_{21} b_{22} ... b_{2IM} |
B=| : : : : |. (*)
| b_{N1} b_{N2} ... b_{NIM} |
- -
Выходные данные:
Используется метод критических компонент [2-5]. Пример: Вычислить решения системы [1,4]:
_ _ _ _
| 6 3 | | 9 |
| 4 6 \ | | 13 |
| \ \ 3 | X= | : |, (1)
| 4 6 2 | | 13 |
| 4 6 | | 10 |
- - - -
Вычислить обратную матрицу и определитель матрицы системы (1).
Ниже приводится текст программы решения этой задачи, а также
таблица - результаты работы программы.
PROGRAM TEST
IMPLICIT REAL*8 (A-H, O-Z)
INTEGER RADIX
DIMENSION A(10,10),XB(10,5),R(15),X(10)
COMMON /F499_RCONST/ OVFLO,UNDFLO,EPS,EPSMIN
COMMON /F499_ICONST/ RADIX,MAXEXP,MINEXP,MANTSZ
CALL INIT_CONST
M=3
N=10
det=1.
JM=-1
IM=1
3 JM=JM+1
inf=-1
DO I=1,3
R(3*I)=3D0
R(3*I-1)=6D0
R(3*I-2)=4D0
X(I)=XB(I,1)
ENDDO
XB(1,1)=10D0
XB(2,1)=13D0
XB(3,1)=9D0
CALL Lin3dsysccmSolver(M,R,N,INF,IM,JM,XB,A,DET)
IM=M
IF(JM.EQ.0) GOTO 3
PRINT 8
8 FORMAT('Решение системы (1) и обращение (трехдиагональной)'
*' матрицы этой системы'/' (Программа Lin3dsysccmSolver)'/
*' Решение Обратная матрица')
write(6,5) (X(I),(XB(I,J),J=1,IM),I=1,M)
write(6,6) INF,DET
5 FORMAT(D10.3,' : ',3d10.3)
6 FORMAT(' INF=',I3,', DET=',d10.4)
STOP
END
Таблица решения системы (1) и обратной матрицы к матрице системы.
Решение Обратная матрица
.100D+01 : .333D+00 -.333D+00 .222D+00
.100D+01 : -.250D+00 .500D+00 -.333D+00
.100D+01 : .125D+00 -.250D+00 .333D+00
INF= 0, DET= .7200D+02
LinsysccmSolver - ОБРАЩЕНИЕ ПРЯМОУГОЛЬНЫХ МАТРИЦ И РЕШЕНИЕ СИСТЕМ
ЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ С ЗАПОЛНЕННЫМИ МАТРИЦАМИ КОЭФФИЦИЕНТОВ Программа LinsysccmSolver - обращение матрицы A и решение систем линейных уравнений AX=Y (метод критических компонент [2-5]). Структура:
Обращение: CALL LinsysccmSolver(M,A,N,INF,IM,JM,B,R,DET)
_ _
| a_{11} a_{12} .. a_{1N} |
| a_{21} a_{22} .. a_{2N} |
A=| : : \ : |;
| a_{M1} a_{M2} .. a_{MN} |
- -
Выходные данные:
Используется метод критических компонент [2-5]. Пример: Вычислить решения системы [1,4]:
_ _ _ _
| 1 1/2 .. 1/M | | y_1 |
|1/2 1/3 .. 1/(M+1)| | y_2 |
| : : : | X= | : |, (1)
|1/M 1/(M+1) .. 1/(2M) | | y_M |
- - - -
y_i=sum^M_{k=1}[1/(k(k+i-1))], i=1,2,...,M.
Вычислить обратную матрицу и определитель матрицы системы (1).
Ниже приводится текст программы решения этой задачи, а также
таблица - результаты работы программы.
PROGRAM TEST
IMPLICIT REAL*8 (A-H, O-Z)
INTEGER RADIX
DIMENSION A(10,10),XB(10,5),R(15),X(10)
COMMON /F499_RCONST/ OVFLO,UNDFLO,EPS,EPSMIN
COMMON /F499_ICONST/ RADIX,MAXEXP,MINEXP,MANTSZ
CALL INIT_CONST
M=3
N=10
DO NUM=2,3
det=1.
JM=-1
IM=1
4 JM=JM+1
IJ=0
DO I=1,3
DO J=1,3
D=I+J-1
A(IJ+J,1)=1D0/D
ENDDO
IJ=IJ+3
X(I)=XB(I,1)
ENDDO
XB(1,1)=7D0/6D0
XB(1,1)=XB(1,1)*XB(1,1)
XB(2,1)=3D0/4D0
XB(3,1)=21D0/40D0
INF=NUM
CALL LinsysccmSolver(M,A,M,INF,IM,JM,XB,R,DET)
IM=M
IF(JM.EQ.0) GOTO 4
PRINT 9
9 FORMAT('Решение системы (1) и обращение матрицы (общего'
*' вида) этой системы'/' (Программа LinsysccmSolver)'/
*' Решение Обратная матрица')
write(6,5) (X(I),(XB(I,J),J=1,IM),I=1,M)
write(6,6) INF,DET
ENDDO
5 FORMAT(D10.3,' : ',3d10.3)
6 FORMAT(' INF=',I3,', DET=',d10.4)
STOP
END
Таблица решения системы (1) и обратной матрицы к матрице системы.
Решение Обратная матрица
.100D+01 : .900D+01 -.333D+00 .222D+00
.500D+00 : -.360D+02 .500D+00 -.333D+00
.333D+00 : .300D+02 -.250D+00 .333D+00
INF= 0, DET= .4630D-03Программа PseudsysccmSolver - решение систем линейных уравнений AX=Y со слабовырожденной матрицей A (у A имеется лишь одно нулевое собственное значение). Используется метод критических компонент [2-5]. Структура:
Обращение: CALL PseudsysccmSolver(M,A,N,INF,IM,B,R,C,P)
_ _
| a_{11} a_{12} .. a_{1N} |
| a_{21} a_{22} .. a_{2N} |
A=| : : \ : |;
| a_{M1} a_{M2} .. a_{MN} |
- -
Выходные данные:
Используется метод критических компонент [2-5] и метод псевдообратных матриц [7]. Пример: Вычислить решения системы [8]:
_ _ _ _
| 1 1 1 | X= | 2 | (1)
| 2 -1 2 | | 1 | .
- - - -
Ниже приводится текст программы решения этой задачи, а также
результаты работы программы.
PROGRAM TEST
IMPLICIT REAL*8 (A-H, O-Z)
INTEGER RADIX
DIMENSION A(10,10),XB(10,5),R(15),X(10)
COMMON /F499_RCONST/ OVFLO,UNDFLO,EPS,EPSMIN
COMMON /F499_ICONST/ RADIX,MAXEXP,MINEXP,MANTSZ
CALL INIT_CONST
M=3
N=10
DET=0.
INF=2
A(1,1)=1D0
A(2,1)=2D0
A(3,1)=1D0
A(4,1)=-1D0
A(5,1)=1D0
A(6,1)=2D0
XB(1,1)=2D0
XB(2,1)=1D0
CALL LinsysccmSolver(2,A,3,INF,1,0,XB,R,DET)
PRINT*,'Решение системы (1):'
write(6,'(3d10.3)') (XB(J,1),J=1,M)
6 FORMAT(' INF=',I3,', DET=',d10.4,/,44('-'))
print*,'inf=',inf
STOP
END
Решение системы (1):
.500D+00 .100D+01 .500D+00
INF= 0
Литература:
|
|
|
|
|
|




