xeigsym.c

00001 /*
00002   Симметричная проблема собственных значений.
00003   $QR$-алгоритм.
00004 */
00005 
00006 #include "nl.h"
00007 
00008 int main()
00009 {
00010     size_t n = 5;
00011     size_t rc;
00012     double **A, *d, *e;
00013 
00014     A = nl_dmatrix_create(n, n);
00015     d = nl_dvector_create(n);
00016     e = nl_dvector_create(n);
00017     
00018     A[0][0] = 11;
00019     A[1][0] = 10; A[1][1] = 14; 
00020     A[2][0] = 18; A[2][1] = 41; A[2][2] = 17; 
00021     A[3][0] = 11; A[3][1] = 12; A[3][2] = 23; A[3][3] = 11; 
00022     A[4][0] = 21; A[4][1] = 13; A[4][2] = 23; A[4][3] = 17; A[4][4] = 17; 
00023     
00024     printf("\nМатрица A (нижняя треугольная часть):\n");
00025     nl_dmatrix_print(A, n, n, NULL);
00026 
00027     eig_tridiag_reduction(A, n, 1, d, e);
00028 
00029     printf("\nТрехдиагональный вид\n");
00030     printf("Диагональ:\n");
00031     nl_dvector_print(d, n, NULL);
00032 
00033     printf("\nПоддиагональ = наддиагональ:\n");
00034     nl_dvector_print(e, n, NULL);
00035 
00036     printf("\nМатрица перехода Q:\n");
00037     nl_dmatrix_print(A, n, n, NULL);
00038 
00039     eig_tridiag(d, e, n, 1, A, &rc);
00040 
00041     printf("\nСобственные числа:\n");
00042     nl_dvector_print(d, n, NULL);
00043 
00044     printf("\nСобственные векторы:\n");
00045     nl_dmatrix_print(A, n, n, NULL);
00046 
00047     nl_dmatrix_free(A, n);
00048     nl_dvector_free(d);
00049     nl_dvector_free(e);
00050     
00051     return 0;
00052 }

Документация по NL. Последние изменения: Mon Oct 9 12:25:54 2006. Создано системой  doxygen 1.4.7