Текст подпрограммы и версий
amm4r_c.zip , amm4d_c.zip , amm4c_c.zip
Тексты тестовых примеров
tamm4r_c.zip , tamm4d_c.zip , tamm4c_c.zip

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

Назначение

Умножение прямоугольной матрицы на ленточную матрицу, заданную в компактной форме.

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

amm4r_c вычисляет произведение прямоугольной матрицы А размера N*М на ленточную матрицу B порядка М с MLB нижними и MUB верхними ко - диагоналями. Матрица B задается в компактной форме представления. Результатом этого произведения является прямоугольная матрица C размера N*М.

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

    int amm4r_c (real *a, integer *n, integer *m, real *b,
            integer *mlb, integer *mub, real *c)

Параметры

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

Версии

amm4d_c - умножение с повышенной точностью прямоугольной матрицы на ленточную матрицу, заданную в компактной форме.
amm4c_c - умножение прямоугольной комплексной матрицы на ленточную комплексную матрицу, заданную в компактной форме.

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

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

 

В подпрограмме amm4d_c параметры a, b и c должны иметь тип double.

В подпрограмме amm4c_c параметры a, b и c должны иметь тип complex.

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

int main(void)
{
    /* Initialized data */
    static float a[15] /* was [3][5] */ = { 1.f,1.f,1.f,1.f,1.f,1.f,1.f,1.f,
                                            1.f,1.f,1.f,1.f,1.f,1.f,1.f };
    static float b[20] /* was [5][4] */ = { 0.f,0.f,1.f,1.f,1.f,0.f,1.f,1.f,
                            1.f,1.f,1.f,1.f,1.f,1.f,1.f,1.f,1.f,1.f,1.f,0.f };
    /* Local variables */
    extern int amm4r_c(float *, int *, int *, float *, int *, int *, float *);
    static float c__[15] /* was [3][5] */;
    static int m, n, mlb, mub, i__;

    n = 3;
    m = 5;
    mub = 1;
    mlb = 2;
    amm4r_c(a, &n, &m, b, &mlb, &mub, c__);

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


Результаты:

                       |  3.   4.   4.   3.   2.  |
         c__  =    |  3.   4.   4.   3.   2.  |
                       |  3.   4.   4.   3.   2.  |