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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Что-то код выдаёт не так http://www.cyberforum.ru/cpp-beginners/thread54955.html
Что-то код выдает неправильно, хотя он и компилится: #include <iostream> using namespace std; class Vechicle{ int passengers; int fuelcap; int mpg; public:
C++ Ёлочка из звездочек =) #include <iostream> using namespace std; void main() { setlocale(LC_ALL, "Russian"); int i=0; while(i<=10) { int a=0; while(a<i+1) http://www.cyberforum.ru/cpp-beginners/thread54953.html
Что означает ? C++
Вот функция добавления нового елемента в начало Plist pt; pt = new list; pt->data = data; pt->next = sfirst; pt->prev = NULL; // это при условии, что список NULL - elem -...
C++ с использованием массивов (minmax)
Задачу надо написать на С. ( плз помогите ) Дано целое число N и набор из N целых чисел. Найти количество элементов, содержащихся между первым и последним максимальным элементом. Если в наборе...
C++ с использованием массивов (array) http://www.cyberforum.ru/cpp-beginners/thread54939.html
Задачи надо написать на С. 1) - Дан массив A размера N. Вывести вначале его элементы с чётными номерами ( в порядке возрастания номеров), а затем - элементы с нечётными номерами ( также в порядке...
C++ Чередущиеся элементы в массиве Задан одномерный массив. Нужно подсчитать количество чередующихся положительных и отрицательных элементов. То есть, если массив , то в нем будет 3 пары чередуюхся чисел. подробнее

Показать сообщение отдельно
Best-pm07
..:::BesT:::..
7 / 7 / 1
Регистрация: 19.03.2009
Сообщений: 195

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

07.10.2009, 16:24. Просмотров 9292. Ответов 4
Метки (Все метки)

Доброго времени суток!
У меня такая просьба, можно ли упростить данную программу?
Т. е. сделать меньше строк в программе, убрать ненужные действия и так чтобы она не была похожа по написанию на эту

(Вычислить значение функции при заданных значениях аргумента, используя интерполяционную формулу Ньютона для неравноудаленных узлов)

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
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream.h>
 
/*** Разделённые разности ***/
double divided_differences(const double* x, const double* y, const int xstart, const int xend)
{
    double dn = x[xend] - x[xstart];
    if (dn == 0) return 0;
    if(xend - xstart == 1)
    {
        return (y[xend] - y[xstart]) / dn;
    } else if(xend - xstart > 1) {
        return (divided_differences(x, y, xstart + 1, xend) - divided_differences(x, y, xstart, xend - 1)) / dn;
    } else {
        return 0;
    }
}
 
/*** Многочлен Ньютона ***/
double newtone_polynomial(const double* x, const double* y, const double xk, const int degree)
{
    if (degree < 1) return 0;
    int i, k; double P = 0;
    for(i = 1; i <= degree; i++)
    {
        double t = 1;
        for (k = 0; k < i; k++) t *= xk - x[k];
        P += divided_differences(x, y, 0, i) * t;
    }
    return y[0] + P;
}
 
int main(int argc, char* argv[])
{
    cout << "Введите количество узлов: "; int n; cin >> n; int i;
    double* y = new double[n]; double* x = new double[n];
    cout << "Введите " << n << " узлов интерполяции\n";
    for(i = 0; i < n; i++) cin >> x[i];
    cout << "Введите " << n << " значений функции\n";
    for(i = 0; i < n; i++) cin >> y[i];
 
    cout << "\nВведите x: "; double xr; cin >> xr;
 
    cout << newtone_polynomial(x, y, xr, n - 1) << endl;
    delete []x; delete []y;
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru