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