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 = 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 double *work;
00023 int it;
00024
00025 double xx[] = {1, 1, 1, 1, 1};
00026
00027 b = nl_dvector_create(n);
00028 work = nl_dvector_create(6*n);
00029
00030 sp_create(n, nz, &IA, &JA, &AN);
00031 sp_convert(nz, A, I, J, n, IA, JA, AN);
00032
00033 sp_mult_col(IA, JA, AN, xx, n, b);
00034
00035 printf("Метод бисопряженных градиентов\n");
00036 printf("Матрица A:\n");
00037 sp_print_list(IA, JA, AN, n, n, 0, 0);
00038
00039 printf("\nВектор b:\n");
00040 nl_dvector_print(b, n, 0);
00041
00042 it = iter_bicg(IA, JA, AN, b, n, 1e-3, 20, x, NULL, NULL, NULL, NULL, NULL, NULL, work);
00043
00044 printf("\nРешение системы Ax = b:\n");
00045 nl_dvector_print(x, n, 0);
00046
00047 printf("\nЧисло итераций = %i \n", it);
00048
00049 sp_free(IA, JA, AN);
00050 nl_dvector_free(b);
00051 nl_dvector_free(work);
00052
00053 return 0;
00054 }