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(); }
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(); }
// Вычисление базисных полиномов 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; }