Текст подпрограммы и версий
am16r_c.zip , am16d_c.zip , am16c_c.zip
Тексты тестовых примеров
tam16r_c.zip , tam16d_c.zip , tam16c_c.zip

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

Назначение

Умножение симметричной матрицы, заданной в компактной форме, на вектор.

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

Для симметричной матрицы  А размера N * N, заданной в компактной форме, и вектора  B длины  N вычисляется вектор  C длины  N,  C = A B .

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

    int am16r_c (real *a, real *b, real *c, integer *n)

Параметры

a - вещественный вектор длины n * (n + 1)/2, содержащий симметричную матрицу  A, заданную в компактной форме;
b - вещественный одномерный массив длины  n, содержащий заданный вектор - сомножитель;
c - вещественный вектор длины  n, в котором запоминается результат произведения;
n - заданный порядок исходной матрицы  A (тип: целый).

Версии

am16d_c - умножение с повышенной точностью вещественной симметричной матрицы, заданной в компактной форме, на вектор;
am16c_c - умножение эрмитовой матрицы, заданной в компактной форме, на комплексный вектор.

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

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

  1. 

В подпрограмме am16d_c пapaмeтpы a, b, c имeют тип double.

  2.  В подпрограмме am16c_c пapaмeтpы a, b, c имeют тип complex.

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

int main(void)
{
    /* Local variables */
    extern int am16r_c(float *, float *, float *, int *);
    static float a[10], b[4], c__[4];
    static int k, n, i__;
    static float r__;

    n = 4;
    for (k = 1; k <= 10; ++k) {
        r__ = (float) k;
/* L1: */
        a[k - 1] = r__;
    }
    for (k = 1; k <= 4; ++k) {
        r__ = 5.f - k;
/* L2: */
        b[k - 1] = r__;
    }
    am16r_c(a, b, c__, &n);

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


Результат:      c__  =  ( 25., 35., 52., 80. )