Всем привет! Дана функция f(x) = 1/(1+25*x*x). Интервал -1..1 .Для нахождения конечных разностей массив узловых точек переворачиваю на изнанку, т.е. нулевой элемент = последнему и т.д. Вот он код: c#
Код:
//Нахождение конечных разностей
//ВНИМАНИЕ: нулевой элемент = последний (переназначили)
double[] KonechnR(ref double[] x, ref double[] y, int n)
{
/* Элементы массива функций в узловых точках будем смещать влево к
* нулю, тем самым получая каждый раз в нулевой позиции требуемую
* конечную разность НУЖНОГО порядка.
* Найдём все конечные разности и выведем их в KonechnRazn[n],
* где n - число считаемых конечных разностей */
double[] KonechnRazn = new double[18];
KonechnRazn[0] = 1;
for (int k = 1; k <= n; k++)
{
for (int z = 0 ; z <= n - k; z++)
{
y[z] = y[z + 1] - y[z];
if (z == 0) KonechnRazn[k] = y[0];
}
}
return KonechnRazn;
}
/* Нахождение значения полинома Ньютона при интерп. назад
* Исползуем полином Ньютона, записанный с учётом равно-
* удаленности узлов */
double Newton(double X,double[] x,double[] y,int nOut,double[] KonechnRazn)
{
double h = Math.Abs(x[1] - x[0]);
double q = (X - x[0]) / h;
double result = y[0];
double proizv = 1;
double factorial = 1;
for (int z = 1; z <= nOut; z++)
{
factorial *= z;
proizv *= (q + z - 1);
result += KonechnRazn[z] * proizv / (factorial);
}
return result;
}
Всё достаточно ясно, однако конечный ответ сильно расходится с ожидаемым что бы я не выделывал, может ошибка в вычислении конечных разностей?