|
Текст подпрограммы и версий av13r_c.zip av13d_c.zip av13c_c.zip |
Тексты тестовых примеров tav13r_c.zip tav13d_c.zip tav13c_c.zip |
Умножение скаляра на вектор и сложение результата с другим вектором.
Подпрограмма av13r_c выполняет умножение скаляра на n - мерный вектор и прибавление к результату другого n - мерного вектора по формуле:
A X + Y = (A x1 + y1 , A x2 + y2 , ... , A xn + yn) = Y
Векторы X и Y не обязательно должны занимать последовательные слова памяти машины и могут располагаться в памяти с некоторыми постоянными интервалами между компонентами, которые называются параметрами приращения.
Эти параметры могут быть меньше нуля, если обработка компонент вектора должна производиться в обратном порядке.
В случае, когда параметры приращения равны 1, используется развернутый цикл с шагом 4.
int av13r_c (integer *n, real *sa, real *sx, integer *incx,
real *sy, integer *incy, integer *ierr)
Параметры
| n - | размерность векторов (тип: целый); |
| sa - | скаляр, который умножается на заданный вектор (тип: вещественный); |
| sx, sy - | вещественные массивы длины n * | incx | и n * | incy | соответственно, содержащие данные векторы; |
|
incx - incy | параметры приращения, задающие расположение векторов в массивах sx и sy соответственно (тип: целый); |
| ierr - | целая переменная, указывающая характер ошибки; при этом: |
| ierr=65 - | когда n ≤ 0 . |
Версии
| av13d_c - | векторы и скаляр заданы с удвоенной точностью. |
| av13c_c - | векторы и скаляр заданы комплексными числами. |
Вызываемые подпрограммы
| utav10_c - | подпрограмма выдачи диагностических сообщений при работе подпрограмм av13r_c и av13c_c. |
| utav11_c - | подпрограмма выдачи диагностических сообщений при работе подпрограммы av13d_c. |
Замечания по использованию
|
В подпрограмме av13d_c одномерные массивы, содержащие данные векторы и скаляр, обозначены dx, dy и da и имеют тип double. В подпрограмме av13c_c одномерные массивы, содержащие заданные векторы и скаляр обозначены cx, cy и ca и имеют тип complex. |
int main(void)
{
/* Initialized data */
static float sx[7] = { 1.f,1.f,1.f,1.f,1.f,1.f,1.f };
static float sy[7] = { 2.f,2.f,2.f,2.f,2.f,2.f,2.f };
/* Local variables */
extern int av13r_c(int *, float *, float *, int *, float *, int *, int *);
static int incx, incy, ierr, j, n;
static float sa;
n = 4;
sa = 2.f;
incx = 2;
incy = 2;
ierr = 0;
av13r_c(&n, &sa, sx, &incx, sy, &incy, &ierr);
for (j = 1; j <= 7; ++j) {
printf("\n %12.4e \n", sx[j-1]);
}
for (j = 1; j <= 7; ++j) {
printf("\n %12.4e \n", sy[j-1]);
}
printf("\n %5i \n", ierr);
return 0;
} /* main */
Результаты: sy = (4., 2., 4., 2., 4., 2., 4.) , ierr = 0