00001
00002
00003
00004
00005
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};
00015 size_t I[] = {0, 1, 2, 3};
00016 size_t J[] = {4, 4, 4, 4};
00017 double D[] = {1, 1, 1, 1, 5};
00018 double DINV[5];
00019 size_t *IA, *JA, *IU, *JU;
00020 double *AN, *UN;
00021 double b[] = {2, 2, 2, 2, 9};
00022 double x[5];
00023
00024 sp_create(5, 4, &IA, &JA, &AN);
00025 sp_convert(4, A, I, J, 5, IA, JA, AN);
00026
00027 printf("Разложение A = U'*D*U\n");
00028 printf("\nВерхнетреугольная часть матрицы A:\n");
00029 sp_print_list_sym(IA, JA, AN, D, 5, 0, 0);
00030
00031 sp_create(5, 4, &IU, &JU, &UN);
00032 sp_chol_symb(IA, JA, 5, IU, JU, 5);
00033 sp_chol_num(IA, JA, AN, D, IU, JU, 5, UN, DINV);
00034
00035 printf("\nВерхнетреугольная часть матрицы U:\n");
00036 sp_print_list(IU, JU, UN, 5, 5, 0, 0);
00037
00038 printf("\nЭлементы, обратные диагональным элементам ");
00039 printf("матрицы D:\n");
00040 nl_dvector_print(DINV, 5, 0);
00041
00042 sp_chol_solve(IU, JU, UN, DINV, b, 5, x);
00043
00044 printf("\nВектор b:\n");
00045 nl_dvector_print(b, 5, 0);
00046
00047 printf("\nРешение системы Ax = b:\n");
00048 nl_dvector_print(x, 5, 0);
00049
00050 sp_free(IA, JA, AN);
00051 sp_free(IU, JU, UN);
00052
00053 return 0;
00054 }