Example #1
0
        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));
        }
Example #2
0
        /// <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));
        }
Example #3
0
        /// <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));
        }
Example #4
0
            /// <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("Такого конструктора не существует");
                }
            }