|
Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.ru/lib_na/cat/as/ass1r.htm
Дата изменения: Fri Dec 4 10:53:59 2015 Дата индексирования: Sun Apr 10 01:21:40 2016 Кодировка: Windows-1251 |
|
Текст подпрограммы и версий ( Фортран ) 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