Текст подпрограммы и версий ( Фортран ) ass1r.zip , ass1d.zip |
Тексты тестовых примеров ( Фортран ) tass1r.zip , tass1d.zip |
Текст подпрограммы и версий ( Си ) ass1r_c.zip , ass1d_c.zip |
Тексты тестовых примеров ( Си ) tass1r_c.zip , tass1d_c.zip |
Текст подпрограммы и версий ( Паскаль ) ass1r_p.zip , ass1e_p.zip |
Тексты тестовых примеров ( Паскаль ) tass1r_p.zip , tass1e_p.zip |
Решение систем линейных алгебраических уравнений с разреженными матрицами методом сопряженных градиентов.
ASS1R вычисляет решение системы линейных алгебраических уравнений Ax = b (где A - квадратная матрица общего вида, в том числе разреженная, порядка N) с заданной точностью EPS методом сопряженных градиентов, а также сумму квадратов компонент вектора невязки Ax - b .
Н.С.Бахвалов. Численные методы. Изд - во "Наука", 1973.
SUBROUTINE ASS1R (B, N, SUBA, SUBAT, X, RSQ, ITMAX, EPS, G, H, XI, XJ, IERR)
Параметры
B - | вещественный вектор длины N, содержащий компоненты вектора правой части системы; |
N - | порядок матрицы системы (тип: целый); |
SUBA - | подпрограмма вычисления вектора Ax, первый оператор которой имеет вид: SUBROUTINE SUBA (X, AX), где X - вещественный вектор длины N, содержащий текущий вектор решения X; AX - вещественный вектор длины N, содержащий результирующий вектор Ax; |
SUBAT - | подпрограмма вычисления вектора ATx, первый оператор которой имеет вид: SUBROUTINE SUBAT (X, ATX), где X - вещественный вектор длины N, содержащий текущий вектор решения X; ATX - вещественный вектор длины N, содержащий результирующий вектор ATx; |
X - | вещественный вектор длины N, содержащий на входе в подпрограмму начальное приближение к решению системы, а на выходе - вычисленное решение системы; |
RSQ - | вещественная переменная, содержащая вычисленную сумму квадратов компонент вектора невязки Ax - b; |
ITMAX - | заданное максимальное допустимое количество итераций метода сопряженных градиентов (тип: целый); |
EPS - | заданная точность, с которой необходимо вычислить решение системы (тип: вещественный); |
G, H, - XI, XJ | вещественные векторы длины N, используемые в подпрограмме в качестве рабочих; |
IERR - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом |
IERR=65 - | когда матрица системы вырождена; |
IERR=66 - | когда заданная точность не может быть достигнута за максимальное количество итераций. |
Версии
ASS1D - | решение систем линейных алгебраических уравнений с разреженными матрицами методом сопряженных градиентов в режиме удвоенной точности. При этом параметры B, X, RSQ, EPS, G, H, XI, XJ должны иметь тип DOUBLE PRECISION. |
Вызываемые подпрограммы
UTAS10 - | подпрограмма выдачи диагностических сообщений при работе подпрограммы ASS1R. |
UTAS11 - | подпрограмма выдачи диагностических сообщений при работе подпрограммы ASS1D. |
Замечания по использованию
В качестве начального приближения к решению системы может быть взят нулевой вектор. Все особенности структуры матрицы A системы должны учитываться в подпрограммах SUBA и SUBAT. Если значение RSQ велико, то это означает, что матрица системы близка к вырожденной и полученный вектор x представляет собой наилучшее приближение к решению в смысле наименьших квадратов. В подпрограммах ASS1R и ASS1D имеется общий блок COMMON /ASS1RR/ ITER. По окончании работы этих подпрограмм значение переменной ITER полагается равной количеству выполненных итераций метода сопряженных градиентов. |
EXTERNAL SUBA, SUBAT REAL B(10), X(10), G(10), H(10), XI(10), XJ(10), A(10, 10) COMMON A COMMON /ASS1RR/ ITER N = 10 R = 0.1 DO 1 I = 1, N X(I) = 0.0 B(I) = 1.0 DO 2 J = 1, N 2 A(I, J) = 0.0 A(I, I) = R 1 R = R + 0.1 EPS = 1.E - 5 ITMAX = 10*N CALL ASS1R (B, N, SUBA, SUBAT, X, RSQ, ITMAX, EPS, G, * H, XI, XJ, IERR) SUBROUTINE SUBA (X, V) COMMON A(10, 10) REAL X(10), V(10) N = 10 DO 1 I = 1, N V(I) = 0.0 DO 1 J = 1, N 1 V(I) = V(I) + A(I, J)*X(J) RETURN END SUBROUTINE SUBAT (X, V) COMMON A(10, 10) REAL X(10), V(10) N = 10 DO 1 I = 1, N V(I) = 0.0 DO 1 J = 1, N 1 V(I) = V(I) + A(J, I)*X(J) RETURN END Результаты: X = ( 10 , 5 , 10/3 , 2.5 , 2 , 5/3 , 10/7 , 1.25 , 10/9 , 1 ) RSQ = 0.19785E - 8 ITER = 11