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, "Плохая интерполяция!"); }