xspconjs.c

00001 /*
00002   Пример использования функций из модуля @sparse.h@
00003   Метод сопряженных градиентов $Ax=b$
00004   $  A=  \left(  \begin{array}{rrrrr}     33 & 1 &   &   &   \\     1 & 2 & 1 &   &   \\       & 1 & 2 & 1 &   \\       &   & 1 & 2 & 1 \\       &   &   & 1 & 2 \\  \end{array}  \right)  ,\quad  b=  \left(  \begin{array}{r}     34  \\     4  \\     4  \\     4  \\     3  \\  \end{array}  \right)  $
00005 */
00006 #include <stdlib.h>
00007 #include <string.h> 
00008 
00009 #include "nl.h"
00010 
00011 int main()
00012 {
00013   size_t n = 5;
00014   size_t nz = 4;
00015   double A[] = {1, 1, 1, 1};
00016   size_t I[] = {0, 1, 2, 3};
00017   size_t J[] = {1, 2, 3, 4};
00018   double AD[] = {33, 2, 2, 2, 2};
00019   size_t *IA, *JA;
00020   double *AN;
00021   double *b;
00022   double x[] = {0, 0, 0, 0, 0};
00023   int it;
00024 
00025   double xx[] = {1, 1, 1, 1, 1};
00026 
00027   sp_create(n, nz, &IA, &JA, &AN);
00028   sp_convert(nz, A, I, J, n, IA, JA, AN);
00029 
00030   b = nl_dvector_create(n);
00031 
00032   sp_mult_col_sym(IA, JA, AN, AD, xx, n, b);
00033 
00034   printf("Метод сопряженных градиентов\n");
00035   printf("\nМатрица A:\n");
00036   sp_print_list_sym(IA, JA, AN, AD, n, NULL, NULL);
00037 
00038   printf("\nВектор b:\n");
00039   nl_dvector_print(b, n, NULL);
00040 
00041   it = sp_conj_sym(IA, JA, AN, AD, b, n, 1e-3, 20, x);
00042   
00043   printf("\nРешение системы Ax = b:\n");
00044   nl_dvector_print(x, n, 0);
00045 
00046   printf("\nЧисло итераций = %i \n", it);
00047 
00048   sp_free(IA, JA, AN);
00049 
00050   nl_dvector_free(b);
00051 
00052   return 0;
00053 }

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