|
Текст подпрограммы и версий av19r_c.zip av19d_c.zip av19c_c.zip |
Тексты тестовых примеров tav19r_c.zip tav19d_c.zip tav19c_c.zip |
Применение плоского вращения Гивенса.
Для двух заданных вещественны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 )