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

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

Назначение

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

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

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

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

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

    int asc0c_c (complex *a, complex *x, complex *r, integer *m)

Параметры

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

Версии: нет

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

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

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

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

    /* Local variables */
    extern int asc0c_c(complex *, complex *, complex *, int *);
    static int m, i__;
    static complex r__[4];

    m = 4;
    asc0c_c(a, x, r__, &m);

    for (i__ = 0; i__ <= 2; 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.) )