xjacobi.c

00001 /*
00002   Симметричная проблема собственных значений.
00003   Метод Якоби
00004 */
00005 
00006 #include "nl.h"
00007 
00008 int main()
00009 {
00010     size_t n = 5;
00011     double **A, **V, *d;
00012     int nrot, rc;
00013 
00014     A = nl_dmatrix_create(n, n);
00015     V = nl_dmatrix_create(n, n);
00016     d = nl_dvector_create(n);
00017   
00018     A[0][0] = 11; A[0][1] = 10; A[0][2] = 18; A[0][3] = 11; A[0][4] = 21; 
00019     A[1][0] = 10; A[1][1] = 14; A[1][2] = 41; A[1][3] = 12; A[1][4] = 13; 
00020     A[2][0] = 18; A[2][1] = 41; A[2][2] = 17; A[2][3] = 23; A[2][4] = 23; 
00021     A[3][0] = 11; A[3][1] = 12; A[3][2] = 23; A[3][3] = 11; A[3][4] = 17; 
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_jacobi(A, n, d, 1, V, &nrot, &rc);
00028 
00029     if (rc)
00030     {
00031       printf("\nЧисло итераций превысило 50\n");
00032     }
00033     else
00034     {
00035       printf("\nСобственные числа:\n");
00036       nl_dvector_print(d, n, NULL);
00037 
00038       printf("\nСобственные векторы:\n");
00039       nl_dmatrix_print(V, n, n, NULL);
00040 
00041       printf("\nКоличество выполненных вращений = %d\n", nrot);
00042     }
00043 
00044     nl_dmatrix_free(A, n);
00045     nl_dmatrix_free(V, n);
00046     nl_dvector_free(d);
00047     
00048     return 0;
00049 }

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