/// <summary> /// Объединение двух массивов с удалением одного из двух близких (ближе eps) друг к другу элементов /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <param name="eps"></param> /// <returns></returns> public static double[] Distinct(double[] a, double[] b, double eps = 1e-6) { double[] m = Expendator.Union(a, b); Array.Sort(m); List <double> l = new List <double>(a.Length); l.Add(m[0]); int k = 0; for (int i = 1; i < m.Length; i++) { if (m[i] - m[k] >= eps) { l.Add(m[i]); k = i; } } return(l.ToArray()); }
/// <summary> /// Каррирование отображения в соответствии с параметрами /// </summary> /// <param name="C">Параметр каррирования</param> /// <param name="c">Фиксированные аргументы</param> /// <returns></returns> public CkToCnFunc CarrByFirstOrLastArgs(CarringType C = CarringType.LastArgs, params Complex[] c) { if (func == null) { CnToCFunction[] mas = new CnToCFunction[EDimention]; switch (C) { case CarringType.FirstArgs: for (int i = 0; i < mas.Length; i++) { mas[i] = (CVectors v) => this.FuncMas[i](new CVectors(Expendator.Union(c, v.ComplexMas))); } break; default: for (int i = 0; i < mas.Length; i++) { mas[i] = (CVectors v) => this.FuncMas[i](new CVectors(Expendator.Union(v.ComplexMas, c))); } break; } return(new CkToCnFunc(mas)); } else { VecToVec h; switch (C) { case CarringType.FirstArgs: h = (CVectors v) => func(new CVectors(Expendator.Union(c, v.ComplexMas))); break; default: h = (CVectors v) => func(new CVectors(Expendator.Union(v.ComplexMas, c))); break; } return(new CkToCnFunc(h)); } }
/// <summary> /// Интеграл от отображения по одному аргументу (другие зафиксированы) /// </summary> /// <param name="beforeArg">Фиксированные аргументы до изменяемого</param> /// <param name="afterArg">Фиксированные аргументы после изменяемого</param> /// <param name="t1"></param> /// <param name="t2"></param> /// <param name="t3"></param> /// <param name="t4"></param> /// <param name="tm"></param> /// <param name="tp"></param> /// <param name="eps"></param> /// <param name="pr"></param> /// <param name="gr"></param> /// <returns></returns> public CVectors IntegralAmoutOneArg(CVectors beforeArg, CVectors afterArg, double t1, double t2, double t3, double t4, double tm, double tp, double eps, double pr, double gr) { FuncMethods.DefInteg.GaussKronrod.ComplexVectorFunc tmp = (Complex x, int N) => this.Value(Expendator.Union(beforeArg.ComplexMas, new Complex[] { x }, afterArg.ComplexMas)).ComplexMas; return(new CVectors(FuncMethods.DefInteg.GaussKronrod.DINN5_GK(tmp, t1, t2, t3, t4, tm, tp, eps, pr, gr, this.EDimention))); }