public static Psi[][][] CalculatePsi(double[][] lambda, PolinomType p_type, int[] rang, int[] x, int multiplicative) { Psi[][][] result = new Psi[lambda.Length][][]; for (int i = 0; i < result.Length; i++) { result[i] = new Psi[3][]; for (int l = 0; l < 3; l++) { Log.WriteLine(" X" + i + ":"); result[i][l] = new Psi[x[l]]; for (int j = 0; j < result[i][l].Length; j++) { result[i][l][j] = new Psi(multiplicative); for (int k = 0; k <= rang[l]; k++) { int index = (j+2*l) * (rang[l] + 1) + k; //for (int m = 0; m < l; m++) // index += (x[m]) * (rang[m] + 1); result[i][l][j].lambda.Add(lambda[i][index]); result[i][l][j].Add(new Polinom(p_type, k)); } } } } return result; }
public double Calculate(double x, int rang, PolinomType type) { switch (type) { case PolinomType.Chebyshev: return Chebyshev(x, rang); case PolinomType.Lejandr: return Lejandr(x, rang); case PolinomType.Lagger: return Lagger(x, rang); case PolinomType.Hermit: return Hermit(x, rang); default: throw new NotSupportedException(); } }
public static double[][] Alm_Create(int matrix_number, int rang, PolinomType p_type, double[][] X1, double[][] X2, double[][] X3, double[][] Y) { var A = new double[Y.Length][]; switch (matrix_number) { case 1: for (int i = 0; i < A.Length; i++) A[i] = new double[(rang + 1) * (X1[0].Length)]; for (int i = 0; i < A.Length; i++) { for (int j = 0; j < X1[0].Length; j++) { for (int k = 0; k < rang + 1; k++) A[i][j * (rang + 1) + k] = Math.Log(1+new Polynom().Calculate(X1[i][j], k, p_type)); } } break; case 2: for (int i = 0; i < A.Length; i++) A[i] = new double[(rang + 1) * (X2[0].Length)]; for (int i = 0; i < A.Length; i++) { for (int j = 0; j < X2[0].Length; j++) { for (int k = 0; k < rang + 1; k++) A[i][j * (rang + 1) + k] = Math.Log(1+new Polynom().Calculate(X2[i][j], k, p_type)); } } break; case 3: for (int i = 0; i < A.Length; i++) A[i] = new double[(rang + 1) * (X3[0].Length)]; for (int i = 0; i < A.Length; i++) { for (int j = 0; j < X3[0].Length; j++) { for (int k = 0; k < rang + 1; k++) A[i][j * (rang + 1) + k] = Math.Log(1+new Polynom().Calculate(X3[i][j], k, p_type)); } } break; } return A; }
public static Psi[][][] CalculatePsi(double[][] lambda, PolinomType p_type, int[] rang, int[] x, bool useFrom2Lab) { Psi[][][] result = new Psi[lambda.Length][][]; for (int i = 0; i < result.Length; i++) { result[i] = new Psi[3][]; for (int l = 0; l < 3; l++) { Log.WriteLine(" X" + i + ":"); result[i][l] = new Psi[x[l]]; for (int j = 0; j < result[i][l].Length; j++) { result[i][l][j] = new Psi(useFrom2Lab ? 1 : 0); for (int k = 0; k <= rang[l]; k++) { int index = (x[0]) * (rang[0] + 1) + (x[1]) * (rang[1]) + j * (rang[2]) + k; result[i][l][j].lambda.Add(lambda[i][index]); result[i][l][j].Add(new Polinom(p_type, k)); } } } } return result; }
public static double[][] A_Create(int[] rang, PolinomType p_type, double[][] X1, double[][] X2, double[][] X3, double[][] Y) { var rang_1 = rang[0]; var rang_2 = rang[1]; var rang_3 = rang[2]; var A = new double[Y.Length][]; for (var i = 0; i < A.Length; i++) A[i] = new double[(rang_1 + 1)*(X1[0].Length) + (rang_2 + 1)*(X2[0].Length) + (rang_3 + 1)*(X3[0].Length)]; for (var i = 0; i < A.Length; i++) { for (var j = 0; j < X1[0].Length; j++) for (var k = 0; k < rang_1 + 1; k++) A[i][j * (rang_1 + 1) + k] = new Polynom().Calculate(X1[i][j], k, p_type); for (var j = 0; j < X2[0].Length; j++) for (var k = 0; k < rang_2 + 1; k++) A[i][(rang_1 + 1) * (X1[0].Length) + j * (rang_2 + 1) + k] = new Polynom().Calculate(X2[i][j], k, p_type); for (var j = 0; j < X3[0].Length; j++) for (var k = 0; k < rang_3 + 1; k++) A[i][(rang_1 + 1) * (X1[0].Length) + (rang_2 + 1) * (X2[0].Length) + j * (rang_3 + 1) + k] = new Polynom().Calculate(X3[i][j], k, p_type); } return A; }