Текст подпрограммы и версий ( Фортран )
asp0r.zip , asp0d.zip , asp0c.zip
Тексты тестовых примеров ( Фортран )
tasp0r.zip , tasp0d.zip , tasp0c.zip
Текст подпрограммы и версий ( Си )
asp0r_c.zip , asp0d_c.zip , asp0c_c.zip
Тексты тестовых примеров ( Си )
tasp0r_c.zip , tasp0d_c.zip , tasp0c_c.zip
Текст подпрограммы и версий ( Паскаль )
asp0r_p.zip , asp0e_p.zip , asp0c_p.zip
Тексты тестовых примеров ( Паскаль )
tasp0r_p.zip , tasp0e_p.zip , tasp0c_p.zip

Подпрограмма:  ASP0R

Назначение

Нахождение нормального псевдорешения переопределенной системы линейных алгебраических уравнений полного ранга методом отражений.

Математическое описание

Находится нормальное псевдорешение системы АX = B, где А - матрица полного ранга размера N на М (N ≥ М), В - заданный вектор длины N. Для решения используется нормализованное приведение матрицы системы к верхней треугольной форме R с помощью последовательности преобразований отражения

 (1)     QMQM-1...Q1AS = R , 

где Qi - соответствующие матрицы отражения, S - результирующая матрица перестановок, R - верхняя треугольная матрица размера N на М.

Из полученной треугольной системы

        RY = QMQM-1...Q1B 

находится нормальное псевдорешение Y, по которому затем определяется искомое решение Х = SY.

Д.К.Фадеев, В.Н.Фадеева, В.Н.Кублановская, О решении линейных алгебраических систем с прямоугольными матрицами. Тp. Мат. ин-та АН СССР, 1968, 96.

Использование

    SUBROUTINE  ASP0R (A, B, X, T, IS, N, M, L) 

Параметры

A - вещественный двумерный массив размера N на М (N ≥ М), в котором задается исходная матрица А; в результате работы подпрограммы в массиве А на соответствующих местах запоминаются наддиагональные элементы вычисленной верхней треугольной матрицы R; в остальной части массива А в последовательных столбцах запоминаются векторы, порождающие соответствующие матрицы отражения;
B - вещественный вектор длины N, в котором задается правая часть системы;
X - вещественный вектор длины М, в котором запоминается найденное псевдорешение системы;
T - вещественный вектор длины N, используемый подпрограммой как рабочий; в результате работы подпрограммы в первых М компонентах массива Т запоминаются диагональные элементы верхней треугольной матрицы R;
IS - целый вектор длины М, в котором запоминаются перестановки столбцов при проведении нормализованного процесса (1); в IS (k) запоминается номер столбца переставленного с k - ым столбцом на k - ом шаге преобразования;
N, M - число строк и столбцов исходной матрицы А, N ≥ М (тип: целый);
L - задает режим работы подпрограммы (тип: целый); при этом:
L = 1 - если система с данной матрицей А решается в первый раз;
L ≠ 1 - если система решается повторно с той же матрицей А, но с другой правой частью; в этом случае разложение (1) матрицы А не выполняется.

Версии

ASP0D - нахождение нормального псевдорешения переопределенной системы линейных алгебраических уравнений полного ранга, заданной с удвоенной точностью, методом отражений.
ASP0C - нахождение нормального псевдорешения комплексной переопределенной системы линейных алгебраических уравнений полного ранга методом отражений.

Вызываемые подпрограммы: нет

Замечания по использованию

  1. 

В подпрограмме АSР0С параметры А, В, Х, Т имеют тип СОМРLЕХ.

  2. 

В подпрограмме АSР0D параметры А, В, Х, Т имеют тип DОUВLЕ РRЕСISIОN.

  3.  При повторном решении системы с той же матрицей, информация, полученная ранее в массивах А, Т, IS, не должна портиться.

Пример использования

      DOUBLE PRECISION  A, B, X, T     
      DIMENSION  A(6, 5), B(6), X(5), T(6), S(5)
      INTEGER  S, P
      DATA  A /36.D0, -630.D0 , 3360.D0 , -7560.D0 , 7560.D0, -2772.D0, -630.D0, 14700.D0, 
     *               -88200.D0, 211680.D0, -220500.D0, 83160.D0, 3360.D0, -88200.D0, 
     *               564480.D0, -1411200.D0, 1512000.D0, -582120.D0, -7560.D0, 
     *               211680.D0, -1411200.D0, 3628800.D0, -3969000.D0, 1552320.D0, 
     *               7560.D0, -220500.D0, 1512000.D0, -3969000.D0, 4410000.D0, 
     *               -1746360.D0/
      DATA  B /463.D0, -13860.D0, 97020.D0, -258720.D0, 291060.D0, -116424.D0/
      N = 6
      M = 5
      P = 1
      CALL  ASP0D (A, B, X, T, S, N, M, P)

Результат:

      X  =   (1.00000000005, 0.500000000016, 0.3333333334, 0.25000000003, 0.20000000001)