예제 #1
0
        public void CalcLagrange(Polynomial[] PolynomialBasis)
        {
            Polynomial lagrangePolynomial = new Polynomial(1);

            for (int i = 0; i < Nodes.Length; i++)
            {
                Polynomial interFunction = new Polynomial(Math.Tan(Nodes[i]));

                if (i == 0)
                {

                    lagrangePolynomial = lagrangePolynomial * PolynomialBasis[i];
                    lagrangePolynomial = lagrangePolynomial * interFunction;
                }
                else
                {
                    lagrangePolynomial = lagrangePolynomial + (PolynomialBasis[i] * interFunction);
                }
            }

            lagrangePolynomial.Print();
        }
예제 #2
0
        public void CalcLagrange()
        {
            Polynomial[] PolynomialBasisCalc = PolynomialBasis(coefficient_);
            Polynomial lagrangePolynomial = new Polynomial(1);

            for (int i = 0; i < coefficient_.Length; i++)
            {
                Polynomial interFunction = new Polynomial(Math.Tan(coefficient_[i]));

                if (i == 0)
                {

                    lagrangePolynomial = lagrangePolynomial * PolynomialBasisCalc[i];
                    lagrangePolynomial = lagrangePolynomial * interFunction;
                }
                else
                {
                    lagrangePolynomial = lagrangePolynomial + (PolynomialBasisCalc[i] * interFunction);
                }
            }

            lagrangePolynomial.Print();
        }
예제 #3
0
        // Вычисление базисных полиномов
        public Polynomial[] PolynomialBasis(params double[] Nodes)
        {
            // Знаменатели базисных полиномов
            var denominator = new double[Nodes.Length];

            for (int i = 0;i < Nodes.Length;i++)
            {
                denominator[i] = 1;
            }

            // Числители базисных полиномов - многочлены
            Polynomial[] numerator = new Polynomial[Nodes.Length];

            // Промежуточный полином равный 1 необходимый для начального умножения
            Polynomial interNumerator = new Polynomial(1);

            // Базисные полиномы
            Polynomial[] PolynomialBasis = new Polynomial[Nodes.Length];

            // Вычисление базисных полиномов
            for (int l = 0; l < Nodes.Length; l++)
            for (int i = 0; i < Nodes.Length; i++)
            {
                    if ((l == (Nodes.Length-1)) & (i == (Nodes.Length - 1)))
                    {
                        break;
                    }

                if (l == i)
                {
                    denominator[l] = denominator[l] * (Nodes[l] - Nodes[i + 1]);
                    i++;
                        if (l == 0)
                        { numerator[l] = new Polynomial(-Nodes[i], 1); }
                        else
                        {
                            interNumerator = new Polynomial(-Nodes[i], 1);
                            numerator[l] = numerator[l] * interNumerator;
                        }
                }
                else
                {
                    denominator[l] = denominator[l] * (Nodes[l] - Nodes[i]);
                    if (i == 0)
                        { numerator[l] = new Polynomial(-Nodes[i], 1); }
                        else
                        {
                            interNumerator = new Polynomial(-Nodes[i], 1);
                            numerator[l] = numerator[l] * interNumerator;
                        }
                    }
            }

            // Вычисление базисного полинома по числителю и знаменателю
            for (int i = 0; i < Nodes.Length; i++)
            {
                PolynomialBasis[i] = numerator[i] / denominator[i];
            }

            return PolynomialBasis;
        }