Текст подпрограммы и версий ( Фортран )
ask1r.zip , ask1d.zip , ask1c.zip
Тексты тестовых примеров ( Фортран )
task1r.zip , task1d.zip , task1c.zip
Текст подпрограммы и версий ( Си )
ask1r_c.zip , ask1d_c.zip , ask1c_c.zip
Тексты тестовых примеров ( Си )
task1r_c.zip , task1d_c.zip , task1c_c.zip
Текст подпрограммы и версий ( Паскаль )
ask1r_p.zip , ask1e_p.zip , ask1c_p.zip
Тексты тестовых примеров ( Паскаль )
task1r_p.zip , task1e_p.zip , task1c_p.zip

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

Назначение

Решение вещественной системы линейных алгебраических уравненений Аx = b с клеточно - теплицевой матрицей А специального вида.

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

Матрица А состоит из Р на Р клеток размера М на М. В силу клеточно - теплицевости А полностью определяется своими первой клеточной строкой и первым клеточным столбцом.

Обозначим SK, RK, 1 ≤ К ≤ Р соответственно К - ю клетку первой клеточной строки и К - ю клетку первого клеточного столбца матрицы А. В данном случае под специальным видом матрицы А понимается выполнение соотношений

     RK = L SK N ,   1 ≤ K ≤ P , 

где L и N - некоторые фиксированные симметричные матрицы перестановок.

В подпрограмме реализован алгорифм, который является видоизменением вычислительной схемы алгорифма для решения системы уравнений с клеточно - теплицевой матрицей общего вида. Это видоизменение обеспечивает значительную экономию памяти ЭВМ.

С.Н.Воеводина, Решение системы уравнений с клеточно-теплицевыми матрицами. Сб. "Вычислительные методы и программирование", вып.24, Изд-во МГУ, 1975.

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

    SUBROUTINE  ASK1R (A1, B, Y, B3, L, N, C, Q, M, P) 

Параметры

A1 - трехмерный М на М на Р массив, в котором задается первая клеточная строка матрицы системы (тип: вещественный);
B - двумерный М на Р массив, в котором задается вектор правой части исходной системы (тип: вещественный);
Y - двумерный М на Р массив, в котором запоминается вектор вычисленного решения (тип: вещественный);
B3 - трехмерный М на М на Р массив, используемый подпрограммой как рабочий (тип: вещественный);
L, N - векторы длины М, в которых задаются две матрицы перестановок (тип: целый);
C - трехмерный М на М на 3 массив, используемый подпрограммой как рабочий (тип: вещественный);
Q - вектор длины М, используемый как рабочий (тип: целый);
M - заданный порядок клетки (тип: целый);
P - заданное число клеток в клеточной строке или столбце (тип: целый).

Версии

ASK1D - решение системы линейных алгебраических уравнений А*x = b с клеточно - теплицевой матрицей специального вида для вещественных А, b, заданных с двойной точностью.
ASK1C - решение системы линейных алгебраических уравнений А*x = b с клеточно - теплицевой матрицей специального вида для комплексных А, b.

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

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

  1. 

В массиве В3 по окончании работы подпрограммы запоминается последний клеточный столбец матрицы, являющейся обратной для матрицы исходной системы.

  2. 

Вектор L определяет симметричную матрицу перестановок следующим образом: K - я компонента вектора L есть номер строки, которая переставляется с К - ой. Аналогично, К - я компонента вектора N есть номер столбца, переставляемого с К - м столбцом.

  3. 

В подпрограмме АSК1D массивы А1, В, Y, В3, С имеют тип DОUВLЕ РRЕСISIОN.

  4.  В подпрограмме АSК1С массивы А1, В, Y, В3, С имеют тип СОМРLЕХ.

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

1.    DIMENSION  A1(3, 3, 3), B(3, 3), Y(3, 3), B3(3, 3, 3), L(3), N(3), 
      *                        C(3, 3, 3), Q(3)
       INTEGER  M, P, Q, L, N
       DATA  A1 /1., 1., 0., 0., 1., 1., 1., 0., 1., 0., 0., 0., 0., 0., 0., 
      *                  0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0./
       DATA  B /3., 2., 2., 2., 2., 2., 3., 2., 2./
       DATA  L /1, 3, 2/
       DATA  N /3, 2, 1/
       M = 3
       P = 3
       CALL  ASK1R (A1, B, Y, B3, L, N, C, Q, M, P)

Результат:

       Y  =   (1., 1., 1., 1., 1., 1., 1., 1., 1.)

2.    DIMENSION  A1(2, 2, 3), B(2, 3), Y(2, 3), B3(2, 2, 3), L(2), N(2), 
      *                         C(2, 2, 3), Q(2)
       INTEGER  M, P, Q, L, N
       DOUBLE  PRECISION  A1, B3, C, B, Y
       DATA  A1 /2.0D0, 1.0D0, 3.0D0, 2.0D0, 4.0D0, 2.0D0, 6.0D0, 
      *                 4.0D0, -2.0D0, -1.0D0, -3.0D0, -2.0D0/
       DATA  B /10.0D0, 6.0D0, 25.0D0, 15.0D0, 10.0D0, 6.0D0/
       DATA  L /1, 2/
       DATA  N /1, 2/
       M = 2
       P = 3
       CALL  ASK1D (A1, B, Y, B3, L, N, C, Q, M, P)

Результат:

       Y  =   (1., 1., 1., 1., 1., 1.)

3.    DIMENSION  A1(2, 2, 3), B(2, 3), Y(2, 3), B3(2, 2, 3), L(2), N(2), 
      *                        C(2, 2, 3), Q(2)
       INTEGER  M, P, Q, L, N
       COMPLEX  A1, B3, C, B, Y
       DATA  A1 / (2., 0.),  (1., 0.),  (3., 0.),  (2., 0.),  (4., 0.), 
      *                  (2., 0.),  (6., 0.),  (4., 0.),  (-2., 0.),  (-1., 0.),
      *                  (-3., 0.),  (-2., 0.) /
       DATA  B / (10., 0.),  (6., 0.),  (25., 0.),  (15., 0.),  (10., 0.), 
      *                (6., 0.) /
       DATA  L /1, 2/
       DATA  N /1, 2/
       P = 3
       M = 2
       CALL  ASK1C (A1, B, Y, B3, L, N, C, Q, M, P)

Результат:

       Y  =  ( (1., 0.),  (1., 0.),  (1., 0.),  (1., 0.),  (1., 0.),  (1., 0.) )