xspbicnj.c

00001 /*
00002   Пример использования функций из модуля @sparse.h@
00003   Метод бисопряженных градиентов
00004   $  A=  \left(  \begin{array}{rrrrr}    31 & 1 &   &   &   \\     1 & 1 & 1 &   &   \\       & 1 & 1 & 1 &   \\       &   & 1 & 1 & 1 \\       &   &   & 1 & 1 \\  \end{array}  \right)  ,\quad  b=  \left(  \begin{array}{r}     32 \\     3  \\     3  \\     3  \\     2  \\  \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 = 13;
00015   double A[] = {31, 24, 31, 41, 31, 4, 4, 31, 1, 21, 1, 1, 1};
00016   size_t I[] = {0, 1, 2, 3, 4, 0, 1, 2, 3, 1, 2, 3, 4};
00017   size_t J[] = {0, 1, 2, 3, 4, 1, 2, 3, 4, 0, 1, 2, 3};
00018   size_t *IA, *JA;
00019   double *AN;
00020   double *b;
00021   double x[] = {0, 0, 0, 0, 0};
00022   int it;
00023 
00024   double xx[] = {1, 1, 1, 1, 1};
00025 
00026   b = nl_dvector_create(n);
00027 
00028   sp_create(n, nz, &IA, &JA, &AN);
00029   sp_convert(nz, A, I, J, n, IA, JA, AN);
00030 
00031   sp_mult_col(IA, JA, AN, xx, n, b);
00032 
00033   printf("Метод бисопряженных градиентов\n");
00034   printf("Матрица A:\n");
00035   sp_print_list(IA, JA, AN, n, n, 0, 0);
00036 
00037   printf("\nВектор b:\n");
00038   nl_dvector_print(b, n, 0);
00039 
00040   it = sp_biconj(IA, JA, AN, b, n, 1e-3, 20, x);
00041   
00042   printf("\nРешение системы Ax = b:\n");
00043   nl_dvector_print(x, n, 0);
00044 
00045   printf("\nЧисло итераций = %i \n", it);
00046 
00047   sp_free(IA, JA, AN);
00048   nl_dvector_free(b);
00049 
00050   return 0;
00051 }

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