public void Interpolate_Periodic() { //setup double EPS = 0.1d; double a = 0d; double b = 1d; int GridSize = 30; int deg = 6; Vector grid = Vector.CreateUniformGrid(GridSize, a, b); Vector y = MyMath.Basic.GetVectorFunction(GridSize, a, b, FunctionLib.one_minus_t_sin); //run BasisSpline bspline = new BasisSpline(deg, grid, y, GridType.PeriodicSpline); //compare int N = 150; Vector expect = MyMath.Basic.GetVectorFunction(N, a, b, FunctionLib.one_minus_t_sin); Vector actual = bspline.GetVectorFunction(N, a, b); Vector bf = bspline.GetVectorFunction(grid); double result = (expect - actual).Norm; Console.WriteLine("Степень сплайна = " + deg); Console.WriteLine("Сетка по которой построен сплайн = " + bspline.grid.ToString()); Console.WriteLine("значения х = " + grid.ToString()); Console.WriteLine("значение f(x) = " + y.ToString()); Console.WriteLine("значение bf(x) = " + bf.ToString()); Console.WriteLine("coef = " + bspline.COEFICIENT.ToString()); Console.WriteLine("||f - spline|| = " + result.ToString("0.0000")); Assert.AreEqual(0, result, EPS, "Плохая интерполяция!"); }
public void Interpolate_slow_deg6_tsin_ZeroTrace() { //setup double EPS = 0.1d; double a = 0d; double b = Math.PI; int GridSize = 25; int deg = 6; Vector grid = Vector.CreateUniformGrid(GridSize, a, b); Vector f = MyMath.Basic.GetVectorFunction(GridSize, a, b, FunctionLib.tsin); //run BasisSpline bspline = new BasisSpline(deg, grid, f, GridType.ClassicSplineGrid); //compare int N = 150; Vector expect = MyMath.Basic.GetVectorFunction(N, a, b, FunctionLib.tsin); Vector actual = bspline.GetVectorFunction(N, a, b); Vector bf = bspline.GetVectorFunction(grid); double result = (expect - actual).Norm; Console.WriteLine("Степень сплайна = " + deg); Console.WriteLine("Сетка по которой построен сплайн = " + bspline.grid.ToString()); Console.WriteLine("значения х = " + grid.ToString()); Console.WriteLine("trace( f ) = <" + f[0].ToString("0.000") + ", " + f.Last.ToString("0.000") + ">"); Console.WriteLine("coef = " + 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, "Плохая интерполяция!"); }
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, "Плохая интерполяция!"); }
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, "Плохая интерполяция!"); }