Ejemplo n.º 1
0
        public void Spline4_Experiment()
        {
            //setup
            int    N       = 32;
            int    n       = 16;
            double a       = 0d;
            double b       = 1d;
            int    index   = 0;
            Vector grid_h  = Vector.CreateUniformGrid(N, a, b);
            Vector grid_2h = Vector.CreateUniformGrid(n, a, b);


            BasisSpline spline_h  = new BasisSpline(4, N, a, b);
            BasisSpline spline_2h = spline_h.GetBasisSpline_Down();
            Matrix      A         = spline_h.GetMatrix();
            Vector      z;
            Vector      c;

            //run
            for (index = 0; index < n; index++)
            {
                z = spline_2h.GetVectorBasis(grid_h, index);
                c = Solver.BCGSTAB(A, z, 0.0000000001d);
                Console.WriteLine(index + ")  " + c.ToString());
            }


            //Console.WriteLine(A.ToString());
            Console.WriteLine("index = " + index);
        }
Ejemplo n.º 2
0
        public void FindMatrixTest()
        {
            //setup
            int    N = 17;
            int    n = 10;
            double a = 0d;
            double b = 1d;

            Vector grid_h  = Vector.CreateUniformGrid(N, a, b);
            Vector grid_2h = Vector.CreateUniformGrid(n, a, b);


            BasisSpline spline_h  = new BasisSpline(4, N, a, b);
            BasisSpline spline_2h = spline_h.GetBasisSpline_Down();

            Matrix B  = spline_2h.GetMatrix();
            Matrix BR = new Matrix(n, n);

            for (int i = 1; i < n - 1; i++)
            {
                Vector c = Solver.BCG(B, Vector.GetEn(i, n), 0.00000000001d);

                for (int j = 0; j < n; j++)
                {
                    BR[j, i] = c[j];
                }
            }
            BR[0, 0]         = 1;
            BR[n - 1, n - 1] = 1;
            Console.WriteLine(B);
            Console.WriteLine(BR);
            Console.WriteLine(BR * B);

            Assert.AreEqual(0, 1);
        }
Ejemplo n.º 3
0
        public void FindProectorMatrixNew_Test()
        {
            //setup
            int    N = 17;
            int    n = 10;
            double a = 0d;
            double b = 1d;

            Vector grid_h  = Vector.CreateUniformGrid(N, a, b);
            Vector grid_2h = Vector.CreateUniformGrid(n, a, b);


            BasisSpline spline_h  = new BasisSpline(4, N, a, b);
            BasisSpline spline_2h = spline_h.GetBasisSpline_Down();

            Matrix B  = spline_h.GetMatrix();
            Matrix BR = new Matrix(N, N);

            for (int i = 1; i < N - 1; i++)
            {
                Vector c = Solver.BCG(B, Vector.GetEn(i, N), 0.00000000001d);

                for (int j = 0; j < N; j++)
                {
                    BR[j, i] = c[j];
                }
            }
            BR[0, 0]         = 1;
            BR[N - 1, N - 1] = 1;

            Matrix B_2h = new Matrix(N, n);

            for (int i = 0; i < n; i++)
            {
                Vector z = spline_2h.GetVectorBasis(grid_h, i);
                for (int j = 0; j < N; j++)
                {
                    B_2h[j, i] = z[j];
                }
            }

            Console.WriteLine(B_2h);
            Console.WriteLine(BR * B_2h);
            Assert.AreEqual(0, 1);
        }
Ejemplo n.º 4
0
        public void Interpolate_slow_deg4_tsin_CompareCoefs_test()
        {
            //setup
            double EPS      = 0.1d;
            double a        = 0d;
            double b        = 3 * Math.PI;
            int    GridSize = 17;
            int    deg      = 4;
            Vector grid     = Vector.CreateUniformGrid(GridSize, a, b);
            Vector y        = MyMath.Basic.GetVectorFunction(GridSize, a, b, FunctionLib.tsin);

            //run
            BasisSpline bspline_h = new BasisSpline(deg, GridSize, a, b);
            Vector      c_h       = BasisSpline.Interpolate(y, bspline_h.grid, deg);

            bspline_h.SetNewCoefs(c_h);
            Vector c_2h_actual = MultyGrid.Proektor.slow_spline_r(c_h);

            BasisSpline bspline_2h  = bspline_h.GetBasisSpline_Down();
            Vector      y_2h        = MyMath.Basic.GetVectorFunction(c_2h_actual.Length, a, b, FunctionLib.tsin);
            Vector      c_2h_expect = BasisSpline.Interpolate(y_2h, bspline_2h.grid, deg);

            bspline_2h.SetNewCoefs(c_2h_actual);
            //compare


            Console.WriteLine((c_2h_expect - c_2h_actual).ToString());
            double result = (c_2h_expect - c_2h_actual).Norm;

            Console.WriteLine("Степень сплайна = " + deg);
            Console.WriteLine("Сетка по которой построен сплайн = " + bspline_2h.grid.ToString());
            Console.WriteLine("f(x)    = " + y);
            Console.WriteLine("f(x) 2h = " + y_2h);
            Console.WriteLine("actual c 2h = " + c_2h_actual.ToString());
            Console.WriteLine("expect c 2h = " + c_2h_expect.ToString());
            Console.WriteLine("||f - spline|| = " + result.ToString("0.0000"));
            Assert.AreEqual(0, result, EPS, "Плохая интерполяция!");
        }
Ejemplo n.º 5
0
        public void Interpolate_slow_deg4_tsin_PROJECTION_test()
        {
            //setup
            double EPS      = 0.1d;
            double a        = 0d;
            double b        = 2 * Math.PI;
            int    GridSize = 17;
            int    deg      = 4;
            Vector grid     = Vector.CreateUniformGrid(GridSize, a, b);
            Vector y        = MyMath.Basic.GetVectorFunction(GridSize, a, b, FunctionLib.tsin);

            //run
            BasisSpline bspline_h = new BasisSpline(deg, GridSize, a, b);
            Vector      c_h       = BasisSpline.Interpolate(y, bspline_h.grid, deg);

            bspline_h.SetNewCoefs(c_h);
            Vector      c_2h       = MultyGrid.Proektor.slow_spline_r(c_h);
            BasisSpline bspline_2h = bspline_h.GetBasisSpline_Down();

            bspline_2h.SetNewCoefs(c_2h);
            //compare
            int    N      = 50;
            Vector expect = MyMath.Basic.GetVectorFunction(N, a, b, FunctionLib.tsin);
            Vector actual = bspline_2h.GetVectorFunction(N, a, b);

            Console.WriteLine((expect - actual).ToString());
            double result = (expect - actual).Norm;

            Console.WriteLine("Степень сплайна = " + deg);
            Console.WriteLine("Сетка по которой построен сплайн = " + bspline_2h.grid.ToString());
            Console.WriteLine("значения х = " + grid.ToString());
            Console.WriteLine("значение f(x) = " + y.ToString());
            Console.WriteLine("coef h = " + c_h.ToString());
            Console.WriteLine("coef 2h = " + bspline_2h.COEFICIENT.ToString());
            Console.WriteLine("||f - spline|| = " + result.ToString("0.0000"));
            Assert.AreEqual(0, result, EPS, "Плохая интерполяция!");
        }
Ejemplo n.º 6
0
        public void Spline4_Experiment5_CompareMatr()
        {
            //setup
            int    N       = 17;
            int    n       = 10;
            double a       = 0d;
            double b       = 1d;
            int    index   = 0;
            Vector grid_h  = Vector.CreateUniformGrid(N, a, b);
            Vector grid_2h = Vector.CreateUniformGrid(n, a, b);


            BasisSpline spline_h  = new BasisSpline(4, N, a, b);
            BasisSpline spline_2h = spline_h.GetBasisSpline_Down();

            Matrix A = spline_h.GetMatrix();
            Matrix B = new Matrix(N, n);
            Vector z;
            Vector c;

            //run
            for (index = 0; index < n; index++)
            {
                z = spline_2h.GetVectorBasis(grid_h, index);
                Vector zz = spline_2h.GetVectorBasis(grid_2h, index);
                c = Solver.BCGSTAB(A, z, 0.0000000001d);
                for (int i = 0; i < N; i++)
                {
                    B[i, index] = c[i];
                }
                Console.WriteLine((zz).ToString());
            }

            Console.WriteLine(spline_2h.GetMatrix());
            //Console.WriteLine((A*c).ToString());
            Console.WriteLine("index = " + index);
        }