Текст подпрограммы и версий 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 )