Текст подпрограммы и версий
askar_c.zip , askad_c.zip , askac_c.zip
Тексты тестовых примеров
taskar_c.zip , taskad_c.zip , taskac_c.zip

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

Назначение

Решение системы линейных алгебраических уравнений с клеточно - теплицевой матрицей.

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

Решается система А*x = b, где А - клеточно - теплицева матрица, состоящая из L на L клеток общего вида размера М на М. Алгорифм эффективно использует специальный вид матрицы А.

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

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

    int askar_c (real *a, real *x, real *r, integer *m,
            integer *l)

Параметры

a - вещественный одномерный массив длины m2 на (2l - 1), в котором задается матрица системы следующим образом: массив a делится на 2l - 1 кусков длины m2. В i - ом куске,  i = 1, ..., l, записывается i - ая клетка первой клеточной строки матрицы системы. В (l + i) - ом куске,  i = 1, ..., l - 1, записывается (i + 1) - ая клетка первого клеточного столбца. Каждая клетка в своем куске записывается по столбцам;
x - вещественный одномерный массив длины m на l, в котором задается правая часть; на выходе из подпрограммы в x получается решение;
r - вещественный одномерный рабочий массив длины 2m2l + 4m2 + m;
m - порядок клетки (тип: целый);
l - клеточный порядок исходной матрицы (тип: целый).

Версии

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

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

 aig1r_c -
 aig1d_c  
 aig1c_c  
обращение матрицы методом Жордана с выбором по столбцу.

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

  1. 

При обращении к подпрограмме askad_c параметры a, x, r имеют тип double.

  2. 

При обращении к подпрограмме askac_c параметры a, x, r имеют тип complex.

  3.  В подпрограммах askar_c, askad_c, askac_c используются соответствующие версии служебной подпрограммы askbr_c.

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

int main(void)
{
    /* Initialized data */
    static float a[12] = { 1.f,2.f,2.f,1.f,2.f,4.f,4.f,2.f,2.f,4.f,4.f,2.f };
    static float x[4] = { 9.f,9.f,9.f,9.f };

    /* Local variables */
    static int l, m, i__;
    static float r__[34];
    extern int askar_c(float *, float *, float *, int *, int *);

    m = 2;
    l = 2;
    askar_c(a, x, r__, &m, &l);

    for (i__ = 0; i__ <= 2; i__+= 2) {
         printf("\n  %16.8e %16.8e \n", x[i__], x[i__+1]);
    }
    return 0;
} /* main */


Результат:    x  =   (1., 1., 1., 1.)