xspseid.c

00001 /*
00002   Пример использования функций из модуля @sparse.h@
00003   Метод Гаусса--Зейделя решения разреженной системы 
00004   $Ax=b$
00005   $  A=  \left(  \begin{array}{rrrrr}     3 & 1 &   &   &   \\     1 & 3 & 1 &   &   \\       & 1 & 3 & 1 &   \\       &   & 1 & 3 & 1 \\       &   &   & 1 & 3 \\  \end{array}  \right)  ,\quad  b=  \left(  \begin{array}{r}     4  \\     5  \\     5  \\     5  \\     4  \\  \end{array}  \right)  $
00006 */
00007 #include <stdlib.h>
00008 #include <string.h> 
00009 
00010 #include "nl.h"
00011 
00012 int main()
00013 {
00014   double A[] = {1, 1, 1, 1, 1, 1, 1, 1};
00015   size_t  I[] = {0, 1, 2, 3, 1, 2, 3, 4};
00016   size_t  J[] = {1, 2, 3, 4, 0, 1, 2, 3};
00017   double D[] = {3, 3, 3, 3, 3};
00018   size_t *IA, *JA; 
00019   double *AN;
00020   double b[] = {4, 5, 5, 5, 4};
00021   double x[5];
00022   int it;
00023 
00024   sp_create(5, 8, &IA, &JA, &AN);
00025   sp_convert(8, A, I, J, 5, IA, JA, AN);
00026 
00027   printf("Метод Гаусса-Зейделя\n");
00028   printf("\nМатрица A (без диагонали):\n");
00029   sp_print_list(IA, JA, AN, 5, 5, 0, 0);
00030   printf("\nДиагональ матрицы A:\n");
00031   nl_dvector_print(D, 5, 0);
00032 
00033   printf("\nВектор b:\n");
00034   nl_dvector_print(b, 5, 0);
00035 
00036   it = sp_gauss_seidel(IA, JA, AN, D, b, 5, 1, 1e-3, 20, x);
00037   
00038   printf("\nРешение системы Ax = b:\n");
00039   nl_dvector_print(x, 5, 0);
00040 
00041   printf("\nЧисло итераций: %i \n", it);
00042 
00043   sp_free(IA, JA, AN);
00044 
00045   return 0;
00046 }

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