Текст подпрограммы и версий
ask7c_c.zip
Тексты тестовых примеров
task7c_c.zip

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

Назначение

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

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

Решается система А*x = b с клеточно - циркулянтной матрицей А (см. [1]) клеточного размера К на К, с клетками размера (М*L) на (М*L); клетки матрицы А сами являются клеточно - циркулянтными матрицами клеточного размера L на L, с циркулянтными клетками размера М на М.

В основе алгорифма лежит подобное преобразование матрицы А к клеточно - диагональной матрице клеточного размера К на К, с клетками размера (М*L) на (М*L). Тем самым решение исходной системы порядка М на L на К сводится к решению К систем порядка М на L, матрицы которых - клеточно - циркулянтные, с циркулянтными клетками (см. [2]) .

1.  В.В.Воеводин. Вычислительные основы линейной алгебры. М., Наука, 1977. 2.  Е.Е.Тыртышников. О решении систем с матрицами типа теплицевых. В сб. "Численный анализ на ФОРТРАНе. Вычисл. Методы и инструментальные системы". Изд-во МГУ, 1978.

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

    int ask7c_c (complex *a, complex *x, complex *r, integer *m,
            integer *l, integer *k)

Параметры

a - комплексный одномерный массив длины m на l на k, в котором матрица системы задается своей первой строкой;
x - комплексный одномерный массив длины m на l на k, в котором задается правая часть. На выходе из подпрограммы в x получается решение;
r - комплексный одномерный рабочий массив длины max (m, l, k);
m - порядок внутренней клетки (тип: целый);
l - клеточный порядок клеток исходной матрицы (тип: целый);
k - клеточный порядок исходной матрицы (тип: целый).

Версии: нет

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

ask4c_c - решение системы линейных алгебраических уравнений с клеточно - циркулянтной матрицей, все клетки которой суть циркулянтные матрицы.
asc0c_c - решение системы линейных алгебраических уравнений с циркулянтной матрицей.

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

  В подпрограмме ask7c_c используются служебные подпрограммы ar01c_c, ar02c_c.

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

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

    /* Local variables */
    extern int ask7c_c(complex *, complex *, complex *, int *, int *, int *);
    static int k, l, m, i__;
    static complex r__[2];

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

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


Результат:

      x  =  ( (1., 0.),  (1., 0.),  (1., 0.),  (1., 0.),  (1., 0.),  (1., 0.),
                (1., 0.),  (1., 0.) )