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

Лагранжевая интерполяция - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Метод Эйлера http://www.cyberforum.ru/cpp-beginners/thread386550.html
Составить программу интегрирования уравнения...
C++ Численное интегрирование функции Составить программу... http://www.cyberforum.ru/cpp-beginners/thread386549.html
Поменять местами столбцы матрицы C++
Дана матрица размера M × N и целые числа K1 и K2 (1 ≤ K1 < K2 ≤ N). Поменять местами столбцы матрицы с номерами K1 и K2.
C++ Решение системы линейных уравнений
Помогите решить на Си
C++ Проверка корректности ввода чисел http://www.cyberforum.ru/cpp-beginners/thread386536.html
считывается квадратная матрица с файла Как написать условие в коде,если после пробела идет не число то if(тут какое условие?) { cout<<"error.nepolnay matrica" return 0; } считывается квадратная матрица с файла Избегайте использования слишком большого количества смайлов в сообщениях в тематических разделах форума, а также "кричащего" выделения текста. Это никаким образом не ускорит...
C++ Написать функцию с использованием массивов.. Которая вставляет элементы в монотонно возрастающую последовательность с сохранением сортировки подробнее

Показать сообщение отдельно
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
18.11.2011, 16:05     Лагранжевая интерполяция
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
29
30
31
32
33
#include <vector>
 
class LagrangePolynomial {
        std::vector< double > __x;
        std::vector< double > __y;
        double __fraction(const double, size_t) const;
public:
        LagrangePolynomial( const std::vector< double >& x,
                            const std::vector< double >& y
                          ) : __x(x), __y(y) {}
        double operator () (const double x) const;
};
 
double LagrangePolynomial::__fraction(const double x, size_t i) const
{
        double num(1), denum(1);
        for( size_t k = 0; k < __x.size(); k++ )
                if( k != i ) num *= ( x - __x[k] );
 
        for( size_t k = 0; k < __x.size(); k++ )
                if( k != i ) denum *= ( __x[i] - __x[k] );
 
        return num / denum;
}
 
double LagrangePolynomial::operator ()(const double x) const
{
        double sum(0);
        for( size_t i = 0; i < __y.size(); i++ )
                sum += __y[i] * __fraction(x, i);
 
        return sum;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru