Текст подпрограммы и версий
amz3r_c.zip , amz3d_c.zip , amz3c_c.zip
Тексты тестовых примеров
tamz3r_c.zip , tamz3d_c.zip , tamz3c_c.zip

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

Назначение

Преобразование ленточной матрицы, заданной в компактной форме, в полную форму представления.

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

Ленточная матрица  А порядка  N с NUС верхними и NLС нижними ко - диагоналями, заданная в компактной форме, преобразуется в полную форму представления. Таким образом, amz3r_c выполняет действие, обратное по отношению к подпрограмме amz2r_c.

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

    int amz3r_c (real *a, integer *n, integer *nuc, integer *nlc,
            real *b)

Параметры

a - вещественный двумерный массив размера n на (nuc + 1 + nlc), в котором задается ленточная матрица в компактной форме представления;
n - порядок матрицы (тип: целый);
nuc - число верхних ко - диагоналей (тип: целый);
nlc - заданное число нижних ко - диагоналей (тип: целый);
b - двумерный массив размера n на n, в котором запоминается исходная ленточная матрица в полной форме.

Версии

amz3d_c - преобразование ленточной матрицы, заданной в компактной форме с удвоенной точностью, в полную форму представления.
amz3c_c - преобразование комплексной ленточной матрицы, заданной в компактной форме, в полную форму представления.

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

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

 

Массив  b может занимать то же место в памяти, что и массив  a (это означает, что первый элемент массива  b может совпадать с первым элементом массива  a).

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

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

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

int main(void)
{
    /* Initialized data */

    static float a[20]   /* was [5][4] */ = { 0.f,0.f,3.1f,4.2f,5.3f,0.f,2.1f,
            3.2f,4.3f,5.4f,1.1f,2.2f,3.3f,4.4f,5.5f,1.2f,2.3f,3.4f,4.5f,0.f };

    /* Local variables */
    extern /* Subroutine */ int amz3r_c(float *, int *, int *, int *
            , float *);
    static float b[25]   /* was [5][5] */;
    static int n, nlc, nuc, i__;

    n = 5;
    nuc = 1;
    nlc = 2;
    amz3r_c(a, &n, &nuc, &nlc, b);

    for (i__ = 0; i__ <= 21; i__+=3) {
         printf("\n  %16.7e %16.7e %16.7e \n",
             b[i__], b[i__ + 1], b[i__ + 2]);
    }
         printf("\n  %16.7e \n", b[24]);
    return 0;
} /* main */


Результаты:

       b  =  ( 1.1, 2.1, 3.1, 0., 0., 1.2, 2.2, 3.2, 4.2, 0., 0., 2.3, 3.3, 4.3, 
                  5.3, 0., 0., 3.4, 4.4, 5.4, 0., 0., 0., 4.5, 5.5 )