C/C++

Программа интерполяции таблично заданной функции

программа интерполяции таблично заданной функции с помощью полиномов Ньютона или Лагранжа.
Входные данные:
• исходная сетка узлов интерполяции;
• значения интерполируемой функции;
• новая сетка узлов, на которой необходимо вычислить значения
функции;
• порядок полинома.
Выходные данные:
• новая сетка;
• значения полинома на новой сетке;
• погрешность интерполирования

Совсем ничего не понимаю в математике( можете помочь, пожалуйста
на любом языке ЯП

Пусть "любым ЯП" будет C/C++. Модули vector и cstdio у меня для удобства. Чтобы не метаться туда-сюда, интерполяция здесь выбрана полиномом Лагранжа. Сначала в вектор V загружаются 9 узловых значений функции у(х)=1/(sin(x)+cos(x)) на равномерной сетке с шагом h=π/10. Потом в том же диапазоне вычисляются и выводятся на экран узлы и узловые значения на равномерной сетке с вдвое меньшим шагом hp=π/20, а также абсолютные ошибки функции, проинтерполированной по Лагранжу, в сравнении с функцией у(х). Нечего и думать, что точность интерполяции должна получаться прекрасной при таком достаточно грубом шаге: ничего подобного на самом деле вовсе даже не получается, хотя значения в девяти начальных узлах вычисляются, естественно, без ошибок:
#include <cmath>
#include <vector>
#include <cstdio>
#include <iostream>
using namespace std;
double x0, h;
double f(double x)
{ return 1. / (sin(x) + cos(x)); }
double Lagrange(vector <double> V, double x)
{ int i, j, n = V.size(); double p, s = 0.;
for (j = 0; j < n; j++) { p = 1.; for (i = 0; i < n; i++)
if (i != j) p *= (x - x0 - i * h) / (h * (j - i));
s += p * V[j]; } return s; }
int main()
{ vector <double> V(9);
x0 = -0.15 * M_PI; h = 0.1 * M_PI;
double x, y, hp = h * 0.5, e, err = 0.; int i;
for (i = 0; i < 9; i++) { x = x0 + i * h; V[i] = f(x); }
for (i = 0; i < 17; i++) { x = x0 + i * hp;
y = Lagrange(V, x); e = y - f(x);
printf("%12.8f%22.16f%16.6e\n", x, y, e);
err += e * e; } printf("σ = %e\n", sqrt(err / 17)); }В конце выводится среднеквадратичная погрешность проинтерполированной функции. Порядок погрешности - несколько промилле.
Ермаков)) .....
Ермаков)) .....
66 572
Лучший ответ
Слава Сушко Спасибо большое!!!