Текст подпрограммы и версий amz1r_c.zip , amz1d_c.zip , amz1c_c.zip |
Тексты тестовых примеров tamz1r_c.zip , tamz1d_c.zip , tamz1c_c.zip |
Преобразование симметричной матрицы, заданной в компактной форме, в полную форму представления.
Симметричная матрица А порядка N, заданная в компактной форме, преобразуется в полную форму представления. Таким образом, amz1r_c выполняет действие, обратное по отношению к подпрограмме amz0r_c.
int amz1r_c (real *a, integer *n, real *b)
Параметры
a - | вещественный вектор длины n на (n + 1)/2, в котором задается симметричная матрица в компактной форме; |
n - | заданный порядок матрицы (тип: целый); |
b - | двумерный массив размера n на n, в котором запоминается исходная симметричная матрица в полной форме представления. |
Версии
amz1d_c - | преобразование симметричной матрицы, заданной в компактной форме с удвоенной точностью, в полную форму представления. |
amz1c_c - | преобразование эрмитовой матрицы, заданной в компактной форме, в полную форму представления. |
Вызываемые подпрограммы: нет.
Замечания по использованию
Двумерный массив b может занимать то же место в памяти, что и массив a (это означает, что первый элемент массива b может совпадать с первым элементом вектора a). В подпрограмме amz1d_c параметры a и b должны иметь тип doublereal. В подпрограмме amz1c_c параметры a и b должны иметь тип complex. |
1. int main(void) { /* Initialized data */ static float a[6] = { 1.1f,2.1f,2.2f,3.1f,3.2f,3.3f }; /* Local variables */ extern int amz1r_c(float *, int *, float *); static float b[9] /* was [3][3] */; static int n, i__; n = 3; amz1r_c(a, &n, b); for (i__ = 1; i__ <= 9; ++i__) { printf("\n %16.7e \n", b[i__ - 1]); } return 0; } /* main */ Результат: b = ( 1.1, 2.1, 3.1, 2.1, 2.2, 3.2, 3.1, 3.2, 3.3 ) 2. int main(void) { /* Initialized data */ static complex a[6] = { {1.1f,0.f},{2.1f,2.1f},{2.2f,0.f},{3.1f,3.1f}, {3.2f,3.2f},{3.3f,0.f} }; /* Local variables */ extern int amz1c_c(complex *, int *, complex *); static complex b[9] /* was [3][3] */; static int n, i__; n = 3; amz1c_c(a, &n, b); for (i__ = 1; i__ <= 9; ++i__) { printf("\n %20.12e %20.12e \n", b[i__ - 1].r, b[i__ - 1].i); } return 0; } /* main */ Результат: b = ( (1.1, 0.), (2.1, 2.1), (3.1, 3.1), (2.1, - 2.1), (2.2, 0.), (3.2, 3.2), (3.1, - 3.1), (3.2, - 3.2), (3.3, 0.) )