@Gioo12x

Как в коде метода Лагранджа и Ньютона выводился правильный ответ а не inf?

Я взял коды у другого студента но когда я вёл свои данные за мест ответа (-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;
}
  • Вопрос задан
  • 93 просмотра
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Так у вас у точек x одинаковые значения. Так вообще-то делать нельзя. Ваше условие x[k] != x[i] - костыль, который ничего и не решат. Вот интерполяция же, она же строит функцию, которая через заданные точки проходит. И вот в этом одинаково x у вас разные значения y - через какую из двух точек должна проходить функция?

Исправляйте входные данные и все заработает.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы