Я взял коды у другого студента но когда я вёл свои данные за мест ответа (-1,398) у меня выводится постоянно inf в двух методов. Как это можно исправить:
Код Лагранджа:
#include <iostream>
#include <math.h>
using namespace std;
double Lagrange(int* x, int* y, int size, double t) {
double p = 0;
for (int k = 0; k < size; k++) {
double e = 1;
for (int i = 0; i < size; i++) {
if (i != k) {
e = e * ((t - x[i]) / (x[k] - x[i]));
}
}
p = p + e * y[k];
}
return p;
}
int main() {
int x[4] = { -4, -2, -2, -1 };
int y[4] = { 1, -2, -3, -1 };
double t = -3.25; // Исправлено на double для точности
double f1 = Lagrange(x, y, 4, t); // Размер изменен на 4
cout << "Lagrange:" << endl << f1 << endl;
return 0;
}
Код Ньютона:
#include <iostream>
#include <vector>
using namespace std;
double newton_interpolation(vector<double> x, vector<double> y, double x_val) {
int n = 4;
double res = y[0];
double temp[4][4];
for (int i = 0; i < n; i++) {
temp[i][0] = y[i];
}
for (int i = 1; i < n; i++) {
for (int j = 0; j < n - i; j++) {
temp[j][i] = (temp[j + 1][i - 1] - temp[j][i - 1]) / (x[j + i] - x[j]);
}
}
for (int i = 1; i < n; i++) {
double term = temp[0][i];
for (int j = 0; j < i; j++) {
term *= (x_val - x[j]);
}
res += term;
}
return res;
}
int main() {
setlocale(LC_ALL, "Russian");
vector<double> x = { -4, -2, -2, -1 };
vector<double> y = { 1, -2, -3, -1 };
double x_val = -3.25;
cout << "Значение многочлена в точке " << x_val << " = " << newton_interpolation(x, y, x_val) << endl;
return 0;
}