xeig.c

00001 /*
00002   Несимметричная проблема собственных чисел
00003 */
00004 
00005 #include "nl.h"
00006 
00007 int main()
00008 {
00009     size_t n = 5;
00010     double **A, **Q, *scal, *wr, *wi;
00011     size_t *perm, *iter;
00012     size_t rc;
00013     size_t low, high;
00014 
00015     A = nl_dmatrix_create(n, n);
00016     Q = nl_dmatrix_create(n, n);
00017     scal = nl_dvector_create(n);
00018     wr = nl_dvector_create(n);
00019     wi = nl_dvector_create(n);
00020     perm = nl_xvector_create(n);
00021     iter = nl_xvector_create(n);
00022 
00023     A[0][0] = .11; A[0][1] = 1.0; A[0][2] = 18; A[0][3] = 11; A[0][4] = 21; 
00024     A[1][0] = .10; A[1][1] = 1.4; A[1][2] = 41; A[1][3] = 12; A[1][4] = 13; 
00025     A[2][0] = .18; A[2][1] = 4.1; A[2][2] = 17; A[2][3] = 23; A[2][4] = 23; 
00026     A[3][0] = .11; A[3][1] = 1.2; A[3][2] = 23; A[3][3] = 11; A[3][4] = 11; 
00027     A[4][0] = .21; A[4][1] = 1.3; A[4][2] = 23; A[4][3] = 17; A[4][4] = 17; 
00028 
00029     printf("\nМатрица A\n");
00030     nl_dmatrix_print(A, n, n, NULL);
00031 
00032     eig_balance(A, n, &low, &high, scal);
00033 
00034     printf("\nСбалансированная матрица:\n");
00035     nl_dmatrix_print(A, n, n, NULL);
00036 
00037     printf("\nКоэффиценты:\n");
00038     nl_dvector_print(scal, n, NULL);
00039 
00040     printf("\nlow = %d, \t high = %d\n", low, high);
00041 
00042     eig_hess_reduction(A, n, low, high, perm);
00043 
00044     printf("\nФорма Хессенберга\n");
00045     nl_dmatrix_print(A, n, n, NULL);
00046 
00047     printf("\nperm:\n");
00048     nl_xvector_print(perm, n, NULL);
00049 
00050     eig_hess_transform_matrix (A, n, low, high, perm, Q);  // Если нужны собственные векторы
00051 
00052     printf("\nМатрица перехода к форме Хессенберга\n");
00053     nl_dmatrix_print(Q, n, n, NULL);
00054 
00055     eig_hess(A, n, low, high, wr, wi, 1, Q, iter, &rc);
00056 
00057     printf("\nВещественные части собственных чисел:\n");
00058     nl_dvector_print(wr, n, NULL);
00059     printf("\nМнимые части собственных чисел:\n");
00060     nl_dvector_print(wi, n, NULL);
00061     printf("\nСобственные векторы для сбалансированной матрицы\n");
00062     nl_dmatrix_print(Q, n, n, NULL);
00063 
00064     eig_balance_inverse(Q, n, low, high, scal);  // Если нужны собственные векторы
00065     printf("\nСобственные векторы для исходной матрицы\n");
00066     nl_dmatrix_print(Q, n, n, NULL);
00067 
00068     eig_norm_Inf(Q, n, wi); // Если нужно нормировать собственные векторы
00069     printf("\nНормированные (чебышева норма) собственные векторы \n");
00070     nl_dmatrix_print(Q, n, n, NULL);
00071 
00072 
00073     nl_dmatrix_free(A, n);
00074     nl_dmatrix_free(Q, n);
00075     nl_dvector_free(scal);
00076     nl_dvector_free(wr);
00077     nl_dvector_free(wi);
00078     nl_xvector_free(perm);
00079     
00080     return 0;
00081 }

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