Текст подпрограммы и версий am16r_c.zip , am16d_c.zip , am16c_c.zip |
Тексты тестовых примеров tam16r_c.zip , tam16d_c.zip , tam16c_c.zip |
Умножение симметричной матрицы, заданной в компактной форме, на вектор.
Для симметричной матрицы А размера N * N, заданной в компактной форме, и вектора B длины N вычисляется вектор C длины N, C = A B .
int am16r_c (real *a, real *b, real *c, integer *n)
Параметры
a - | вещественный вектор длины n * (n + 1)/2, содержащий симметричную матрицу A, заданную в компактной форме; |
b - | вещественный одномерный массив длины n, содержащий заданный вектор - сомножитель; |
c - | вещественный вектор длины n, в котором запоминается результат произведения; |
n - | заданный порядок исходной матрицы A (тип: целый). |
Версии
am16d_c - | умножение с повышенной точностью вещественной симметричной матрицы, заданной в компактной форме, на вектор; |
am16c_c - | умножение эрмитовой матрицы, заданной в компактной форме, на комплексный вектор. |
Вызываемые подпрограммы: нет.
Замечания по использованию
1. |
В подпрограмме am16d_c пapaмeтpы a, b, c имeют тип double. | |
2. | В подпрограмме am16c_c пapaмeтpы a, b, c имeют тип complex. |
int main(void) { /* Local variables */ extern int am16r_c(float *, float *, float *, int *); static float a[10], b[4], c__[4]; static int k, n, i__; static float r__; n = 4; for (k = 1; k <= 10; ++k) { r__ = (float) k; /* L1: */ a[k - 1] = r__; } for (k = 1; k <= 4; ++k) { r__ = 5.f - k; /* L2: */ b[k - 1] = r__; } am16r_c(a, b, c__, &n); for (i__ = 1; i__ <= 4; ++i__) { printf("\n %16.7e \n", c__[i__-1]); } return 0; } /* main */ Результат: c__ = ( 25., 35., 52., 80. )