Текст подпрограммы и версий ( Фортран ) asg9r.zip , asg9d.zip , asg9c.zip |
Тексты тестовых примеров ( Фортран ) tasg9r.zip , tasg9d.zip , tasg9c.zip |
Текст подпрограммы и версий ( Си ) asg9r_c.zip , asg9d_c.zip , asg9c_c.zip |
Тексты тестовых примеров ( Си ) tasg9r_c.zip , tasg9d_c.zip , tasg9c_c.zip |
Текст подпрограммы и версий ( Паскаль ) asg9r_p.zip , asg9e_p.zip , asg9c_p.zip |
Тексты тестовых примеров ( Паскаль ) tasg9r_p.zip , tasg9e_p.zip , tasg9c_p.zip |
Решение вещественной системы линейных алгебраических уравнений А*x = b или АT*x = b с матрицей А общего вида методом Гаусса с выбором ведущего элемента по столбцу.
Для заданной вещественной квадратной матрицы А порядка N выполняется треугольная факторизация L- 1*А = U , где U - веpхняя тpеугольная матpица, и затем последовательно pешаются системы:
L*y = B (для системы АT*x = b решается UT*y = b) и U*x = y (для АT*x = b решается LT*x = y) .
Дж.Форсайт, М.Малькольм, К.Моулер. Машинные методы математических вычислений. М., Мир, 1980.
SUBROUTINE ASG9R ( A, M, N, NLEAD, B, LTR, L, IERR)
Параметры
A - | вещественный двумерный массив размера М на N, в котором задается исходная матрица; на выходе на соответствующих местах находятся элементы матрицы U и поддиагональные элементы матрицы исключения метода Гаусса Li , i = 1, ..., N - 1 ; |
M - | первая размерность массива А в вызывающей подпрограмме (тип: целый); |
N - | порядок матрицы системы (тип: целый); |
NLEAD - | целый вектор длины N, содержащий на выходе информацию о выполненных в ходе факторизации перестановках (см. замечания по использованию); |
B - | вещественный вектор длины N, в котором задается правая часть системы; на выходе содержит вычисленное решение системы (см. замечания по использованию); |
LTR - | задается вид решаемой системы (тип: целый), при этом: |
LТR = 0 - | если решается система А*x = b ; |
LТR ≠ 0 - | если решается система АT*x = b; |
L - | признак решаемой системы (тип: целый), при этом: |
L = 0 - | если система с данной матрицей решается впервые; |
L ≠ 0 - | если система с данной матрицей решается повторно; |
IERR - | целая переменная, содержащая на выходе информацию о прохождении счета, при этом: |
IЕRR=65 - | если М ≤ 0 или N ≤ 0 ; |
IЕRR=66 - | если в процессе счета возникло переполнение (это говорит о том, что либо некоторые элементы матрицы U, либо некоторые компоненты решения превосходят по абсолютной величине максимальное представимое на данной машине число); |
IЕRR=-К - | если в результате факторизации в К - ой строке матрицы U диагональный элемент равен нулю (это свидетельствует о вырожденности матрицы А). Если таких строк у матрицы U несколько, то значение К полагается равным номеру последней из них; |
IЕRR=67 - | если система несовместна (см. замечания по использованию). |
Версии
ASG9D - | решение системы линейных алгебраических уравнений А*x = b или АT*x = b методом Гаусса с выбором ведущего элемента по столбцу для вещественных А и b, заданных с удвоенной точностью. |
ASG9C - | решение системы линейных алгебраических уравнений А*x = b или АT*x = b методом Гаусса с выбором ведущего элемента по столбцу для комплексных А и b. |
Вызываемые подпрограммы
AFG5R - | подпрограмма треугольной факторизации матрицы А; |
UTAFSI - | подпрограмма выдачи диагностических сообщений. |
Замечания по использованию
1. |
В подпрограмме АSG9D массивы А и В имеют тип DОUВLЕ РRЕСISIОN, для треугольного разложения матрицы А вызывается подпрограмма АFG5D. | |
2. |
В подпрограмме АSG9С массивы А и В имеют тип СОМРLЕХ, для треугольного разложения матрицы А вызывается подпрограмма АFG5С. | |
3. |
На выходе К - ый элемент вектора NLЕАD равен номеру строки, переставленной на К - ом шаге факторизации с К - й строкой матрицы А. Так как факторизация Гаусса требует N - 1 шагов, то NLЕАD (N) = N . | |
4. |
Если задано L ≤ 0, т.е. система решается повторно, то треугольная факторизация не выполняется, и поэтому в качестве матрицы А при обращении к подпрограмме нужно взять результат предыдущего обращения к АSG9R или к АFG5R. | |
5. | Если вырабатывается значение переменной IЕRR, отличное от нуля, то выдается соответствующее диагностическое сообщение и, если IЕRR > 0, то происходит выход из подпрограммы. Если система совместна, но матрица А вырождена (IЕRR < 0), т.е. для некоторых номеров К U (К, К) = 0., то полагается Х (К) = 1. |
DIMENSION A(4, 4), B(4), NLEAD(4) DATA A /7.9, 8.5, 4.3, 3.2, 5.6, -4.8, 4.2, -1.4, 5.7, 0.8, -3.2, * -8.9, -7.2, 3.5, 9.3, 3.3/ DATA B /7.0, 7.0, 7.0, 7.0/ M = 4 N = 4 LTR = 0 L = 0 CALL ASG9R (A, M, N, NLEAD, B, LTR, L, IERR) Результат: | 8.5 -4.8 0.8 3.5 | | -0.92941 10.06118 4.95647 -10.45294 | A = | -0.50588 -0.65879 -9.40171 2.40526 | | -0.37647 -0.04046 -0.73072 12.65817 | NLEAD = (2, 2, 4, 4) | 1.023054 | | 0.273777 | B = | -0.462957 | | -0.003275 |