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 }