00001 #include <time.h>
00002 #include <iostream>
00003 #include "Ludecomp.h"
00004
00005 size_t smatrix<double>::PrintWidth = 8;
00006 size_t smatrix<double>::PrintPrecision = 3;
00007
00008 void main()
00009 {
00010 int i, j, k, n = 2000, n2 = n * n, t0, t = 0;
00011
00012 double *A = (double *) malloc(n2 * sizeof(double));
00013
00014 double *a[4096], x[4096], e; a[0] = A;
00015
00016 for (i = 1; i < n; i++) a[i] = a[i-1] + n;
00017
00018 srand(clock());
00019
00020 for (i = 0; i < n2; i++) A[i] = 0.0;
00021
00022 for (i = 0; i < n; i++) a[i][i] = 1.0;
00023
00024 for (k = n; k < 6000; k++)
00025 {
00026 do i = rand() * n / 32768, j = rand() * n / 32768; while (i <= j || a[i][j]);
00027
00028 a[i][j] = (1 + rand()) / 32768.0;
00029 }
00030
00031 for (k = 0; k < n2; k++)
00032 {
00033 i = rand() * n / 32768; j = rand() * n / 32768;
00034
00035 e = a[i][j]; a[i][j] = a[j][i]; a[j][i] = e;
00036 }
00037
00038 for (k = i = 0; i < n; i++) for (j = 0; j < n; j++) if (a[i][j]) k++;
00039
00040 printf("k = %d\n", k);
00041
00042 for (i = 0; i < n; i++) x[i] = rand() / 32767.0;
00043
00044 smatrix<double> sA(A, n, n), sx(x, n, 1), sb = sA * sx;
00045
00046 t0 = clock();
00047 TLUDecomp<double> LU(sA, true); sb = LU.Solve(sb);
00048 t += clock() - t0;
00049
00050 e = (sb - sx).maxCoef;
00051
00052 printf("Error = %e, Time = %d\n", e, t);
00053
00054 free(A);
00055 }