почему программа считает не правильно

Рейтинг: -2Ответов: 1Опубликовано: 03.03.2023

Почему на выходе я получаю значение 0.394118, хотя программа должна вывести число 0.770722

#include <iostream>
#include <cmath>

int main()
{   
    int n = 3;
    int xArr[] = {2,3,4};
    double funX[n];
    double a = 2.5;
    double sum = 0;
    double sumFirst = 1;
    double sumSecond = 1;
    for (int i = 0; i < n; i++)
    {
        funX[i] = pow(log(xArr[i]), 13.0 / 4.0);
    }
    for (int i = 0; i < n; i++) 
    {
        for (int j = 0; j < n; j++)
        {
            if (i != j) 
            {
                sumFirst *= (a - xArr[j]);
                sumSecond *= xArr[i] - xArr[j];
            }
        }
        sum += (sumFirst / sumSecond) * funX[i];

    }
    std::cout << "Значение полинома Лагранжа: " << sum << std::endl;
    return 0;
}

Ответы

▲ 1Принят

Вы перемножаете те значения sumFirst и sumSecond, что остались с прошлых итераций внешнего цикла. Правильнее будет так:

for (int i = 0; i < n; i++)
{
    double sumFirst = 1;
    double sumSecond = 1;
    for (int j = 0; j < n; j++)
    {
        if (i != j)
        {
            sumFirst *= (a - xArr[j]);
            sumSecond *= xArr[i] - xArr[j];
        }
    }
    sum += (sumFirst / sumSecond) * funX[i];
}