Текст подпрограммы и версий
av19r_c.zip  av19d_c.zip  av19c_c.zip 
Тексты тестовых примеров
tav19r_c.zip  tav19d_c.zip  tav19c_c.zip 

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

Назначение

Применение плоского вращения Гивенса.

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

Для двух заданных вещественныx вeкторов  Х и  Y размерности  N выполняется преобразование

     |   Xi   |                    |   Xi   |
     |         |    : =    A  *  |         | ,      i  =  1, ..., N   ,     где
     |   Yi   |                    |   Yi   |

                           |    G   S   |
                A   =   |               |   -   матрица вращения Гивенса.
                           |  - S   G   | 

Векторы  Х и  Y не обязательно должны занимать последовательные слова памяти машины и могут располагаться в памяти с некоторыми постоянными интервалами между компонентами, которые называются параметрами приращения.
Эти параметры могут быть меньше нуля, если обработка вектора должна производиться в обратном порядке.

Дж.Форсайт, М.Малькольм, К.Моулер. Машинные методы математических вычислений. М.: Мир, 1980.

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

    int av19r_c (integer *n, real *sx, integer *incx, real *sy,
            integer *incy, real *g, real *s, integer *ierr)

Параметры

n - размерность векторов (тип: целый);
sx, sy - вещественные одномерные массивы длины n * | incx | и n * | incy | соответственно, отвечающие векторам  X и  Y;
         incx -
         incy  
параметры приращения, задающие расположение векторов в массивах sx и sy соответственно (тип: целый);
g, s - переменные, содержащие значения элементов матриц вращения Гивенса (тип: вещественный);
ierr - целая переменная, содержащая на выходе информацию о прохождении счета, при этом:
ierr=65 - если задано n = 0 .

Версии

av19d_c - применение плоского вращения Гивенса для вещественных  X и  Y, заданных с удвоенной точностью.
av19c_c - применение плоского вращения Гивенса для комплексных  X и  Y.

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

utav10_c - подпрограмма выдачи диагностических сообщений при работе подпрограмм av19r_c и av19c_c.
utav11_c - подпрограмма выдачи диагностических сообщений при работе подпрограммы av19d_c.

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

  1. 

В подпрограмме av19d_c параметры sx, sy, g и s имеют тип double.

  2. 

В подпрограмме av19c_c параметры sx, sy, g и s имеют тип complex.

  3.  Если вырабатывается значение ierr ≠ 0, то выдается соответствующее диагностическое сообщение и происходит выход из подпрограммы. Выход из подпрограммы происходит также в том случае, когда g = 1. и s = 0.

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

int main(void)
{
    /* Local variables */
    static int incx, incy;
    extern int av19r_c(int *, float *, int *, float *, int *,
                       float *, float *, int *);
    static int ierr;
    static float c__;
    static int j, n;
    static float s, sx[50], sy[50];

    n = 8;
    for (j = 1; j <= 50; ++j) {
        sx[j - 1] = (float) j;
/* l3: */
        sy[j - 1] = (float) j;
    }
    c__ = 3.f;
    s = 7.f;
    incx = -7;
    incy = 4;
    av19r_c(&n, sx, &incx, sy, &incy, &c__, &s, &ierr);

    for (j = 1; j <= 50; j += 7) {
         printf("\n %16.7e \n", sx[j-1]);
    }
    for (j = 1; j <= 30; j += 4) {
         printf("\n   %16.7e \n", sy[j-1]);
    }
    printf("\n  %5i \n", ierr);
    return 0;
} /* main */


Результаты:

     sx  =  ( 206., 199., 192., 185., 178., 171., 164., 157. )
                ( 8 элементов с интервалом 7 )

     sy  =  ( - 347, - 286., - 225., - 164., - 103., - 42., 19., 80. )
                ( 8 элементов с интервалом 4 )