xspchol.c

00001 /*
00002   Пример использования функций из модуля @sparse.h@
00003   Решение разреженной положительно определенной системы 
00004   $Ax=b$ с помощью $LDL\transpose$-разложения (Холецкого).
00005   $  A=  \left(  \begin{array}{rrrrr}     3 & 1 &   &   &   \\     1 & 3 & 1 &   &   \\       & 1 & 3 & 1 &   \\       &   & 1 & 3 & 1 \\       &   &   & 1 & 3 \\  \end{array}  \right)  ,\quad  b=  \left(  \begin{array}{r}     4  \\     5  \\     5  \\     5  \\     4  \\  \end{array}  \right)  $.
00006 */
00007 #include <stdlib.h>
00008 #include <string.h> 
00009 
00010 #include "nl.h"
00011 
00012 int main()
00013 {
00014   double A[] = {1, 1, 1, 1};
00015   size_t I[] = {0, 1, 2, 3};
00016   size_t J[] = {4, 4, 4, 4};
00017   double D[] = {1, 1, 1, 1, 5};
00018   double DINV[5];
00019   size_t *IA, *JA, *IU, *JU; 
00020   double *AN, *UN;
00021   double b[] = {2, 2, 2, 2, 9};
00022   double x[5];
00023 
00024   sp_create(5, 4, &IA, &JA, &AN);
00025   sp_convert(4, A, I, J, 5, IA, JA, AN);
00026 
00027   printf("Разложение A = U'*D*U\n");
00028   printf("\nВерхнетреугольная часть матрицы A:\n");
00029   sp_print_list_sym(IA, JA, AN, D, 5, 0, 0);
00030 
00031   sp_create(5, 4, &IU, &JU, &UN);
00032   sp_chol_symb(IA, JA, 5, IU, JU, 5);
00033   sp_chol_num(IA, JA, AN, D, IU, JU, 5, UN, DINV);
00034 
00035   printf("\nВерхнетреугольная часть матрицы U:\n");
00036   sp_print_list(IU, JU, UN, 5, 5, 0, 0);
00037 
00038   printf("\nЭлементы, обратные диагональным элементам ");
00039   printf("матрицы D:\n");
00040   nl_dvector_print(DINV, 5, 0);
00041 
00042   sp_chol_solve(IU, JU, UN, DINV, b, 5, x);
00043 
00044   printf("\nВектор b:\n");
00045   nl_dvector_print(b, 5, 0);
00046 
00047   printf("\nРешение системы Ax = b:\n");
00048   nl_dvector_print(x, 5, 0);
00049 
00050   sp_free(IA, JA, AN);
00051   sp_free(IU, JU, UN);
00052 
00053   return 0;
00054 }

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