コード例 #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);
        }
コード例 #2
0
        public void Spline4_ExperimentUniformGrid()
        {
            //setup
            int    N       = 17;
            int    n       = 9;
            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, grid_h, Vector.GetConstVector(2d, N), GridType.ExperimentSplineGrid);
            BasisSpline spline_2h = new BasisSpline(4, grid_2h, Vector.GetConstVector(2d, n), GridType.UniformSplineGrid);

            Matrix A = spline_h.GetMatrix();
            Vector z;
            Vector c;

            //run

            for (index = 0; index < 7; 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);
        }
コード例 #3
0
        public void Spline4_Experiment4()
        {
            //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, grid_h, Vector.GetConstVector(2d, N), GridType.ClassicSplineGrid);
            BasisSpline spline_2h = new BasisSpline(4, grid_2h, Vector.GetConstVector(2d, n), GridType.ClassicSplineGrid);

            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);
                c = Solver.BCGSTAB(A, z, 0.0000000001d);
                for (int i = 0; i < N; i++)
                {
                    B[i, index] = c[i];
                }
            }


            Console.WriteLine(Matrix.Transpose(B).ToString("0.00"));
            Console.WriteLine("index = " + index);
        }
コード例 #4
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);
        }
コード例 #5
0
        public void create_proection_spline4_mat_test()
        {
            //setup
            //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, grid_h, Vector.GetConstVector(2d, N), GridType.ClassicSplineGrid);
            BasisSpline spline_2h = new BasisSpline(4, grid_2h, Vector.GetConstVector(2d, n), GridType.ClassicSplineGrid);

            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);
                c = Solver.BCGSTAB(A, z, 0.0000000001d);
                for (int i = 0; i < N; i++)
                {
                    B[index, i] = c[i];
                }
            }



            //run
            Matrix CREATE_B = MultyGrid.Proektor.create_proection_spline4_mat(n);

            Matrix D      = B - CREATE_B;
            double actual = D.NORMF;

            Console.WriteLine("полученная " + B.ToString());
            Console.WriteLine("созданная " + CREATE_B.ToString());
            //compare
            Assert.AreEqual(0d, actual, 0.00000001d, "Эти матрицы не равны!");
        }
コード例 #6
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);
        }
コード例 #7
0
        public void CompareConvolutionWhithBasisSplineTest()
        {
            //setup
            int         GridSize = 1000;
            double      a        = -3d;
            double      b        = 5d;
            Vector      grid     = Vector.CreateUniformGrid(GridSize, a, b);
            BasisSpline spline   = new BasisSpline(3, 10, a, b);
            //  Console.WriteLine("grid = " + spline.grid);
            Vector expect = spline.GetVectorBasis(grid, 3);

            Console.WriteLine("expect = " + expect);
            //run
            Vector actual = MyMath.Operations.GetConvolutionVector(FunctionLib.conv_tri_test, FunctionLib.conv_tri_test, GridSize, a, b);

            Console.WriteLine("actual = " + actual);
            //compare
            double NORM = (expect - actual).Norm;

            Console.WriteLine("Норма разности = " + NORM);
            Assert.AreEqual(0d, NORM, 0.1d);
        }
コード例 #8
0
        public void DeBoorB_Integrate()
        {
            //setup
            int    GridSize = 20;
            double a        = 0;
            double b        = 1d;
            double c        = 10d;
            double EPS      = 0.01d;
            int    N        = 1000;
            int    index    = 2;
            Vector grid1    = Vector.CreateUniformGrid(N, a, b);
            Vector grid2    = Vector.CreateUniformGrid(N, a, c);



            int deg = 4;

            BasisSpline spline1 = new BasisSpline(deg, GridSize, a, b);
            BasisSpline spline2 = new BasisSpline(deg, GridSize, a, c);

            //run

            for (index = 0; index < GridSize; index++)
            {
                Console.WriteLine("index = " + index);
                Vector f1 = spline1.GetVectorBasis(grid1, index);
                Vector f2 = spline2.GetVectorBasis(grid2, index);

                double I1 = MyMathLib.Integrate.RiemannSum(f1.ToArray, MyMathLib.MyMath.Basic.GetStep(N, a, b));
                double I2 = MyMathLib.Integrate.RiemannSum(f2.ToArray, MyMathLib.MyMath.Basic.GetStep(N, a, c));

                Console.WriteLine("Integral B" + index + " on [0, 1] = " + I1);
                Console.WriteLine("Integral B" + index + " on [0, 10] = " + I2);
                //comp
                Assert.IsTrue(I2 > I1, "Интеграл с функции большем носителем должен быть больше!");
            }
        }