Форум программистов, компьютерный форум CyberForum.ru

Приближение функции многочленом Лагранжа - C++

Восстановить пароль Регистрация
 
sanchoflat
4 / 6 / 1
Регистрация: 05.11.2011
Сообщений: 97
09.04.2013, 19:07     Приближение функции многочленом Лагранжа #1
Всем привет, нужно написать программу, которая вычисляет приближение функции многочленом Лагранжа.
Все реализовал, но возникла непонятка с результатом:

как я делаю:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
const int n = 2;
double A[n+1][n+1] = {0};
double a = -2, b = 2;
const double h = (b - a)/n;
 
 
double pr(double x, int i)
{
    double temp =1;
    for ( int j = 0; j<=n; j++)
    {
        if ( j != i )
            temp *= (x - (a+j*h)) / ((a+i*h) - (a+j*h));
    }
    return temp;
 
}
double lag(double x)
{
    double temp = 0;
    for ( int i = 0; i<n+1; i++)
        temp += A[0][i] * pr(x,i); 
    return temp;
}
double func(double x)
{
    return abs(x*x+x);
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int k = 0;
    for ( double i = 0; i<n+1; i++)   //заполнили первый столбец
        {
            A[k][0] = func(a+i*h);
            k++;    
        }
    int l = n+1;
for ( int j = 1; j<n+1; j++)   // создали треугольную матрицу
        {
            for ( int i = 0; i<l-1; i++)
            {
                A[i][j] = A[i+1][j-1] - A[i][j-1];
            }
            l--;
        }
1. Создаю треугольную матрицу, потом беру первую строку матрицы и использую её в качестве y0...yn
2. Сама функция pr - она считает произведение частных разностей отрезка.
Проверил все на бумаге для n = 2, по идеи все сходится, но ответ отличается очень сильно между func(x) и lag(x) и на погрешность списать нельзя.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2013, 19:07     Приближение функции многочленом Лагранжа
Посмотрите здесь:

C++ Интерполяция Лагранжа
C++ Разработать алгоритм интерполяции значений функции методом Лагранжа. В качестве тестового примера использовать функцию Рунге
C++ Приближение функций сплайнами
C++ Пользуясь интерполяционный полином Лагранжа, вычислить приближенное значение функции
Интерполяция полиномом Лагранжа C++
Метод множителей Лагранжа C++
C++ Интерполяция Лагранжа
C++ полином Лагранжа

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
softmob
1248 / 698 / 155
Регистрация: 20.02.2010
Сообщений: 1,035
09.04.2013, 20:48     Приближение функции многочленом Лагранжа #2
Если не ошибаюсь для применения интерполяционного многочлена Лагранжа необходимо, чтобы функция имела непрерывные производные на отрезке [a, b].
Или смените отрезок интерполирования или саму функцию.
sanchoflat
4 / 6 / 1
Регистрация: 05.11.2011
Сообщений: 97
10.04.2013, 12:16  [ТС]     Приближение функции многочленом Лагранжа #3
хм, саму функцию и отрезок не я выбирал, такое задание. По хорошему они должны отличаться совсем ненамного , чтобы построить график погрешности по нормальному, но при значении 2, к примеру, func(2) = 6, lag(2) = 8. Хоть многочлен 2 степени, но врятли такая погрешность.

Добавлено через 15 часов 17 минут
В общем разобрался в чем проблема, однако возникает вопрос.
Беру матрицу 11х11 - многочлен 10 степени.
Вывожу значения func(x) и lag(x) - и выходит, что значения абсолютно одинаковые ( нету погрешности ). И как с этим быть?
Потому что надо строить график погрешностей, а её и нету
Yandex
Объявления
10.04.2013, 12:16     Приближение функции многочленом Лагранжа
Ответ Создать тему
Опции темы

Текущее время: 00:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru