Добрый день! Помогите пожалуйста найти ошибку в программе, битый день делаю, я новичок, но как мне кажется очень логично написал код. Программа работает, но по непонятной причине выдаёт повторяющиеся значения. Где могла закрасться ошибка
задание: построить интерполяционный полином Лагранжа для функции
на интервале [-2, 3], количество точек, в которых определена функция m = 4. Таблица исходной фунции вычисляется в точках
, i = 0,...,m. Используя полученную таблицу требуется вычислить значения функции, полинома и невязки в точках
, j = 0,...,9.
получилась программа:
Код:
double lagrange(double _x);
double func(double _x);
int main( void )
{
setlocale(LC_ALL, "Russian");
int a=-2, b=3, m=4;
double X[9], Nevyazka[9];
for (short j=0; j<=9; j++)
{
X[j]=a+j*(b-a)/9;
Nevyazka[j]=fabs(lagrange(X[j])-func(X[j]));
cout<<"f(X"<<j<<")="<<func(X[j])<<";\t"<<"L(X"<<j<<")="<<lagrange(X[j])<<";\t"<<"Невязка "<<Nevyazka[j]<<";\n";
}
getch();
return (0);
}
double lagrange(double _x)
{
double L = 0, P = 1, x[5], y[5];
int a=-2, b=4;
short n=4;
//double x[5] = {-2, -0.75, 0.5, 1.75, 3};
//double y[5] = {-1.64, 1.77, -1.36, 0.11, 11.01};
for (short i = 0; i < n; i++)
{
x[i]=a+(i*(b-a))/n;
y[i]=4*x[i]-7*sin(x[i]);
}
for (short i = 0; i < n; i++)
{
for (short j = 0; j < n; j++)
{
if (j - i)
P *= (_x - x[j])/ (x[i] - x[j]);
}
L += P * y[i];
}
return L;
}
double func(double _x)
{
return 4*_x-7*sin(_x);
}