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 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); }
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); }
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); }
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, "Эти матрицы не равны!"); }
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 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); }
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, "Интеграл с функции большем носителем должен быть больше!"); } }