コード例 #1
0
        public void Interpolate_slow_deg4_tsin_ZeroTrace_NewMethod()
        {
            //setup
            double EPS      = 0.1d;
            double a        = 0d;
            double b        = Math.PI;
            int    GridSize = 14;
            int    deg      = 4;
            int    p        = deg - 1;
            Vector uni_grid = Vector.CreateUniformGrid(GridSize, a, b);
            Vector f        = MyMath.Basic.GetVectorFunction(GridSize, a, b, FunctionLib.tttsin);

            //run
            BasisSpline bspline = new BasisSpline(deg, uni_grid, f, GridType.SimpleSplineGrid);
            Vector      c       = BasisSpline.SimpleInterpolate(f, bspline.grid, deg);
            Vector      basis_c = new Vector(c.Length + 2 * (deg - 1));

            for (int i = 0; i < c.Length; i++)
            {
                basis_c[i + p] = c[i];
            }

            bspline.SetNewCoefs(basis_c);

            Vector bf = bspline.GetVectorFunction(uni_grid);

            ////compare
            int    N      = 150;
            Vector expect = MyMath.Basic.GetVectorFunction(N, a, b, FunctionLib.tttsin);
            Vector actual = bspline.GetVectorFunction(N, a, b);

            double result = (expect - actual).Norm;

            Console.WriteLine("Степень сплайна = " + deg);
            Console.WriteLine("Сетка по которой построен сплайн = " + uni_grid.ToString());
            Console.WriteLine("trace( f ) = <" + f[0].ToString("0.000") + ", " + f.Last.ToString("0.000") + ">");
            Console.WriteLine("coef = " + basis_c); //bspline.COEFICIENT.ToString());
            Console.WriteLine("значение f(x) = " + f.ToString());
            Console.WriteLine("значение bf(x) = " + bf.ToString());
            Console.WriteLine("||f - spline|| = " + result.ToString("0.0000"));
            Assert.AreEqual(0, result, EPS, "Плохая интерполяция!");
        }