public static Polynom operator |(Polynom p, int k)//производная полинома { if (k >= p.degree + 1) { return(Polynom.ToPolynom(0)); } if (k == 0) { return(p); } double[] d = new double[(int)p.degree - k + 1]; if (k > 0) { for (int i = 0; i < d.Length; i++) { d[i] = p.coef[k + i] * Combinatorik.A(i, k + i); } } else { for (int i = 0; i < p.coef.Length; i++) { d[-k + i] = p.coef[i] / Combinatorik.A(i, -k + i); } } return(new Polynom(d)); }
/// <summary> /// Полиномы Эрмита для набора кратных узлов /// </summary> /// <param name="mas"></param> /// <returns></returns> public static Polynom Hermit(params MultipleKnot[] mas) { int n = -1;//dergee of Pol for (int i = 0; i < mas.Length; i++) { n += mas[i].Multiplicity; } SLAU S = new SLAU(n + 1);//S.Show(); int k = 0; for (int i = 0; i < mas.Length; i++) { for (int j = 0; j < mas[i].Multiplicity; j++) { S.b[k + j] = mas[i].y[j]; for (int t = 0; t <= n - j; t++) { int s = n - j - t; S.A[k + j, t] = Combinatorik.A(s, j + s) * Math.Pow(mas[i].x, s); } } k += mas[i].Multiplicity; } S.GaussSelection(); //S.Show(); Array.Reverse(S.x); return(new Polynom(S.x)); }
/// <summary> /// Оценка погрешности метода /// </summary> /// <param name="p"></param> /// <param name="x"></param> /// <param name="Mn"></param> /// <returns></returns> private static double wn(Point[] p, double x, double Mn = 1) { double e = x - p[0].x; for (int i = 1; i < p.Length; i++) { e *= (x - p[i].x); } e /= Combinatorik.P(p.Length); e *= Mn; return(Math.Abs(e)); }
/// <summary> /// Конструктор по одному из основных распределений с двумя аргументами /// </summary> /// <param name="Type"></param> /// <param name="m"></param> /// <param name="D"></param> public ConRandVal(BasisDistribution Type, double m, double D) { switch (Type) { //Нормальное распределение case BasisDistribution.Normal: this.f = (double s) => { return(1.0 / Math.Sqrt(1 * Math.PI * D) * Math.Exp(-1.0 / 2 / D * (s - m) * (s - m))); }; this.m = m; this.d = D; this.F = (double x) => { return(FuncMethods.DefInteg.Simpson((double t) => { return Math.Exp(-t * t / 2); }, 0, x)); }; return; //Равномерное распределение case BasisDistribution.Uniform: this.f = (double s) => { return(1.0 / (D - m)); }; this.m = (D + m) / 2; this.d = (D - m) * (D - m) / 12; this.F = (double s) => { if (s < m) { return(0); } if (m < s && s <= D) { return((s - m) / (D - m)); } return(1); }; return; //Распределение Пуассона case BasisDistribution.Puasson: int m_new = (int)m; double tmp = Math.Exp(-D); this.f = (double s) => { return(Math.Pow(D, m_new) / Combinatorik.P(m_new) * tmp); }; this.m = D; this.d = D; return; default: throw new Exception("Такого конструктора не существует"); } }