Текст подпрограммы и версий
astar_c.zip , astad_c.zip , astac_c.zip
Тексты тестовых примеров
tastar_c.zip , tastad_c.zip , tastac_c.zip

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

Назначение

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

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

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

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

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

    int astar_c (real *a, real *x, real *r, integer *m)

Параметры

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

Версии

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

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

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

  1. 

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

  2. 

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

  3.  В подпрограммах astar_c, astad_c, astac_c используются соответствующие версии служебной подпрограммы ast0r_c.

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

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

    /* Local variables */
    static int m, i__;
    static float r__[8];
    extern int astar_c(float *, float *, float *, int *);

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

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


Результат:

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