00001 
00002 
00003 
00004 
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 }