Консультация № 193311
24.05.2018, 21:15
0.00 руб.
0 1 0
Здравствуйте, уважаемые эксперты! Прошу вас помощи в решении следующего вопроса: требуется разработать программу интерполяции, используя полином Ньютона. Функция задана таблично.
x 0.1 0.15 0.45 1.00 2.00 2.50
f(x) 2.5 2.20 2.10 1.15 1.20 1.95
Входные данные беру из файла (текстовый):
1) собственно указанные узы сетки
2) значения функции
3) новая сетка {xj} = j * 0.1, j = 0,1,2.
4) порядок полинома
На выход должно быть:
1) новая сетка
2) значения функции уже по новой сетке
3) погрешность интерполирования
Так как узлы отстоят друг от друга на разном расстоянии, то получается нужна формула для неравномерной сетки:



Понятно, что первичную сетку, значения функции можно задать массивами, указав сначала порядок полинома (по первичной сетке порядок ПЯТЬ, затем прочитать узлы сетки в цикле, где условие будет n=5).
Вопрос 1. Но как задать новую сетку? Она же не должна иметь столько же узлов, что и интерполируемая? У меня, например, их три... Как в этом случае скачать массив с узлами новой сетки из файла? Придется еще указывать размер массива, а я хотела более менее универсальный подход использовать.
Вопрос 2. Если игнорировать вопрос чтения из файла, и переделать под мои условия программу, найденную здесь, все заканчивается зависанием ПК.
Код:

#include <stdio.h>

void main(void)
{
const int n = 5;
double Xi[6] = {0.1, 0.15, 0.45, 1.00, 2.00, 2.50};
double Yi[6] = {2.5, 2.20, 2.10, 1.15, 1.20, 1.95};
double X[3] = {0, 0.1, 0.2};
double f[3], LN[3], XXX, XX=1.;
int i, j, k, m;

for(m=0; m<n; m++)
{
for (i=1, LN[i]=Yi[0]; i<n; i++)
{
XX *= (X[m]-Xi[i-1]);
for (j=0,f=0.0; j<=i; j++)
{
for (k=0,XXX=1.; k<=i; k++)
{
if (k!=j)
XXX *= Xi[j]-Xi[k];
}
f[j] += Yi[j]/XXX;
}
LN[i] += XX * f[j];
}
}
printf("Y[X] = %g\n",LN);
}


Помогите, пожалуйста, найти ошибку!
Вопрос 3 Как найти погрешность? Можно ли вынести ее отдельной функцией?

Обсуждение

давно
Посетитель
401172
78
25.05.2018, 22:49
общий
Остался только третий вопрос, остальное сделала (если меня кто-то читает...)
Как найти погрешность при интерполяции по Ньютону, при неравномерной сетке?
Форма ответа