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