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 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 }