|
Текст подпрограммы и версий av16r_c.zip av16d_c.zip av16c_c.zip |
Тексты тестовых примеров tav16r_c.zip tav16d_c.zip tav16c_c.zip |
Вычисление суммы модулей компонент вектора.
Функция av16r_c вычисляет сумму модулей компонент n - мерного вектора x = ( x1, x2, ..., xn ) по формуле:
N
S = ∑ | x i |
i =1
Вектор x не обязательно должен занимать последовательные слова памяти машины и может располагаться в памяти с некоторыми постоянными интервалами между компонентами, которые называются параметром приращения. Этот параметр может быть меньше нуля, если обработка компонент вектора должна проводиться в обратном порядке.
В случае, когда параметры приращения равны 1, используется развернутый цикл с шагом 6.
real av16r_c (integer *n, real *sx, integer *incx, integer *ierr)
Параметры
| n - | размерность вектора (тип: целый); |
| sx - | вещественный одномерный массив длины n, содержащий заданный вектор; |
| incx - | параметр приращения, задающий расположение вектора в массиве sx (тип: целый); |
| ierr - | целая переменная, указывающая характер ошибки; при этом: |
| ierr=65 - | когда n ≤ 0 . |
Версии
| av16d_c - | вычисление суммы модулей компонент вектора, заданного с удвоенной точностью. |
| av16c_c - | вычисление суммы модулей компонент комплексного вектора. |
Вызываемые подпрограммы
| utav10_c - | подпрограмма выдачи диагностических сообщений при работе подпрограмм av16r_c и av16c_c. |
| utav11_c - | подпрограмма выдачи диагностических сообщений при работе подпрограммы av16d_c. |
Замечания по использованию
|
В функции av16d_c одномерный массив, содержащий вектор, обозначен dx и имеет тип double. В функции av16c_c одномерный массив, содержащий вектор, обозначен cx и имеет тип complex. В функции av16c_c сумма модулей компонент вычисляется по формуле: N
W = ∑ [ | Re ( x i ) | + | Im ( x i ) | ]
i =1
|
int main(void)
{
/* Initialized data */
static float sx[11] = { 2.f,0.f,2.f,0.f,2.f,0.f,2.f,0.f,2.f,0.f,2.f };
/* Local variables */
extern float av16r_c(int *, float *, int *, int *);
static int incx, ierr, n;
static float r16;
n = 6;
incx = 2;
ierr = 0;
r16 = (float)av16r_c(&n, sx, &incx, &ierr);
printf("\n %16.7e \n", r16);
printf("\n %5i \n", ierr);
return 0;
} /* main */
Результаты: r16 = 12. , ierr = 0