Обращение матрицLA52. Обращение симметричной матрицы А с ненулевыми главными минорами на основе LTDL - разложения. LA50Программа LA50 вычисляет матрицу C, обратную к матрице A (C=A-1). Матрица A должна быть предварительно преобразована в произведение двух треугольных матриц L и U при помощи программы LA10. Программа LA10 должна закончиться без ошибок (Error=0).
Вызов программы CALL LA50(AF, T) Параметры программы AF - входной и выходной параметр;
Пример !Обращение матрицы program TestLA50 use ConvertCyr use NML implicit none integer, parameter:: n=4 real:: A(n,n), AF(n,n), D, Z(n,n) integer:: T(n), Er data A/1.0, 1.1, 1.2, 1.4, 1.1, 1.1, 1.2, 1.3, 1.2, 1.2, 1.2, 1.3, 1.4, 1.3, 1.3, 1.3/ integer i, j !begin call LA10(A, AF, T, D, Er) if (Er>0) then print *, WinToDos('Матрица особенная. Программа остановлена.') stop end if call LA50(AF, T) Z=matmul(A,AF) print 10 print 11, ((A(i,j), j=1,n), i=1,n) print 12 print 13, ((Z(i,j), j=1,n), i=1,n) print 14, D 10 format(/' The initial matrix:'/) 11 format(8x,<n>F5.1) 12 format(/' The resulting identity matrix:'/) 13 format(8x,<n>F11.7) 14 format(/' Determinant =',E15.7) end The initial matrix: 1.0 1.1 1.2 1.4 1.1 1.1 1.2 1.3 1.2 1.2 1.2 1.3 1.4 1.3 1.3 1.3 The resulting identity matrix: 0.9999983 0.0000078 0.0000061 -0.0000154 0.0000004 1.0000042 0.0000045 -0.0000080 0.0000004 0.0000042 1.0000045 -0.0000233 -0.0000149 0.0000042 0.0000197 0.9999768 Determinant = -0.9999890E-04
Вернуться к оглавлению Скачать LA50 LA52Программа LA52 предназначена для обращения симметричной матрицы с ненулевыми главными минорами с помщью изменённого метода квадратных корней. Преимущество этого метода состоит в том, что требуется только n рабочих ячеек, не нужно никакой единичной матрицы, не извлекаются никакие квадратные корни, выполняется только n делений. Алгоритм основан на решении уравнения
Алгоритм 66б из [Б9]
Вызов программы CALL LA52(A, Error) Параметры программы A - входной и выходной параметр;
Пример !Обращение симметричной матрицы program TestLA52 use ConvertCyr use NML implicit none integer, parameter:: n=4 real:: A(n,n), AA(n,n), Z(n,n) integer:: T(n), Er data A/1.0, 1.1, 1.2, 1.4, 1.1, 1.1, 1.2, 1.3, 1.2, 1.2, 1.2, 1.3, 1.4, 1.3, 1.3, 1.3/ integer i, j !begin AA=A call LA52(AA, Er) if (Er>0) then print *, WinToDos('Матрица особенная. Программа остановлена.') stop end if forall(i=2:n, j=1:n-1, i>j) AA(i,j)=AA(j,i) Z=matmul(A,AA) print 10 print 11, ((A(i,j), j=1,n), i=1,n) print 12 print 13, ((Z(i,j), j=1,n), i=1,n) 10 format(/' The initial matrix:'/) 11 format(8x,<n>F5.1) 12 format(/' The resulting identity matrix:'/) 13 format(8x,<n>F11.7) end The initial matrix: 1.0 1.1 1.2 1.4 1.1 1.1 1.2 1.3 1.2 1.2 1.2 1.3 1.4 1.3 1.3 1.3 The resulting identity matrix: 0.9999983 -0.0000074 -0.0000062 -0.0000078 0.0000004 0.9999889 -0.0000047 -0.0000042 0.0000004 -0.0000111 0.9999954 -0.0000042 0.0000004 -0.0000111 -0.0000047 0.9999958
|