Как построить график интерполированной функции(полином Лагранжа?)
Пишу программу, которая строит график функции и по равномерным узлам строит график полинома Лагранжа. Но у меня графики совпадают почему-то. Вот код:
//сам полином
private double Lagrange(double x, double[] x_arr, double[] y_arr, int count)
{
double sum = 0;
for(int i = 0; i < count; i++)
{
double BasicPol = 1;
for(int j = 0; j < count; j++)
{
if (j != i) BasicPol *= (x - x_arr[j]) / (x_arr[i] - x_arr[j]);
}
sum += BasicPol * y_arr[i];
}
return sum;
}
double x, y, lower = Convert.ToDouble(textBox2.Text),
upper = Convert.ToDouble(textBox3.Text), step = 0.1;
if (textBox4.Text.Length != 0) step = Convert.ToDouble(textBox4.Text);
x = lower;
while (x <= upper) //здесь построение самого графика функции
{
y = Function(x); //функция
chart1.Series[0].Points.AddXY(x, y);
x += step;
}
if (checkBox1.Checked) //это построение графика по полиному
{
int count = 5; //количество узлов
if (textBox5.Text.Length != 0) count = Convert.ToInt32(textBox5.Text);
double[] x_arr = new double[count];
double[] y_arr = new double[count];
double stepL = (upper - lower) / count;
x = lower;
while (x <= upper)
{
y = Function(x);
x_arr.Append(x); //заполняем массивы
y_arr.Append(y);
x += stepL;
}
x = lower;
while (x <= upper)
{
y = Lagrange(x, x_arr, y_arr, count);
chart1.Series[1].Points.AddXY(x, y);
x += step;
}
}
Что я делаю не так?