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 }