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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Построение бинарного дерева на основе не бинарного http://www.cyberforum.ru/cpp-beginners/thread296022.html
В лабораторной работе есть такое задание: Создайте процедуру построения бинарного дерева на основе не бинарного. Объясните как вообще создавать эти деревья и что необходимо реализовать в задании.
C++ Текстовые файлы в С++ Помогите написать программу которая определяет количество слов в каждой строке, и нужно сжать каждую строку, удалив все лишние пробелы http://www.cyberforum.ru/cpp-beginners/thread296019.html
C++ Программа линейной и разветвленной структуры
есть пара задачек. у меня началась практика нужна реальная помощь или сикир-башка 1. Даны три точки A, B, C на числовой оси. Точка C расположена между точками A и B. Найти произведение длин отрезков AC и BC. 2. Даны три переменные вещественного типа: A, B, C. Если их значения упорядочены по возрастанию, то удвоить их; в противном случае заменить значение каждой переменной на противоположное....
C++ Программы линейной и разветвленной структуры
есть пара задачек. у меня началась практика нужна реальная помощь или сикир-башка 1. Даны три точки A, B, C на числовой оси. Точка C расположена между точками A и B. Найти произведение длин отрезков AC и BC. 2. Даны три переменные вещественного типа: A, B, C. Если их значения упорядочены по возрастанию, то удвоить их; в противном случае заменить значение каждой переменной на противоположное....
C++ Программы линейной и разветвленной структуры в си++ http://www.cyberforum.ru/cpp-beginners/thread295992.html
есть пара задачек. у меня началась практика нужна реальная помощь или сикир-башка 1. Даны три точки A, B, C на числовой оси. Точка C расположена между точками A и B. Найти произведение длин отрезков AC и BC. 2. Даны три переменные вещественного типа: A, B, C. Если их значения упорядочены по возрастанию, то удвоить их; в противном случае заменить значение каждой переменной на противоположное....
C++ Используя очередь, установить, сбалансирован ли по круглым скобкам записанный в файле текст Требуется для каждой пары соответствующих открывающей и закрывающей скобок напечатать номера их позиций в тексте, упорядочив пары номеров по возрастанию номеров позиций: а) закрывающих скобок (например, для текста a+(45-f(x)*(b-c)) надо напечатать: 8 10; 12 16; 3 17); б) открывающих скобок (например, для текста a+(45-f(x)*(b-c)) надо напечатать: 3 17; 8 10; 12 16);Задание дополнить выводом в... подробнее

Показать сообщение отдельно
D_in_practice
 Аватар для D_in_practice
330 / 330 / 159
Регистрация: 02.10.2014
Сообщений: 666
03.12.2014, 06:59     Обратная интерполяция Лагранжа
Численное дифференцирование основанное на методе Лагранжа
http://www.cyberforum.ru/cgi-bin/latex.cgi?{P}_{n}(x) = \sum_{i=0}^{n}{y}_{i}\left(\prod_{\begin{matrix}<br />
j=0\\<br />
j\neq i<br />
\end{matrix}}^{n}\frac{(x-{x}_{j})}{({x}_{i}-{x}_{j})} \right)
Меняем все x на y и получаем:
http://www.cyberforum.ru/cgi-bin/latex.cgi?{P}_{n}(y) = \sum_{i=0}^{n}{x}_{i}\left(\prod_{\begin{matrix}<br />
j=0\\<br />
j\neq i<br />
\end{matrix}}^{n}\frac{(y-{y}_{j})}{({y}_{i}-{y}_{j})} \right)
То есть достаточно на вход функции подать вместо массива x - массив y, и наоборот.
Код
Для след входных данных (y = x^2):
x_arr[N] = {0, 1, 2, 3, 4};
y_arr[N] = {0, 1, 4, 9, 16};
последняя колонка должна быть похожа на первую
Название: Безымянный.jpg
Просмотров: 60

Размер: 30.9 Кб
К сожалению для Ваших входных данных результаты хуже, но это проблема метода:
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
#include <iostream>
#include <iomanip>
using namespace std;
 
double L(double x, int n, double x_arr[], double y_arr[]){
    
    double sum = 0;
    for (int i = 0; i < n; ++i){
        
        double l = 1;
        for (int j = 0; j < n; ++j)
            if (j != i)
                l *= (x - x_arr[j]) / (x_arr[i] - x_arr[j]);
        sum += y_arr[i] * l;
    }
    
    return sum;
}
 
int main(){
    
    const int N = 5;
    
    double x_arr[N] = {1, 2, 3, 4, 5};
    double y_arr[N] = {1.35, -4, 0.97, -2, 7.2};
    
    cout << setw(3) << "y";
    cout << setw(10) << "x = L(y)";
    cout << setw(10) << "y = L(x)" << endl;
        
    for (int i = 0; i < 20; ++i){
        double y = i;
        cout << setw(3) << y;
        double x = L(y, N, y_arr, x_arr);//тут меняю массив x на y
        cout << setw(10) << setprecision(6) << x;
        cout << setw(10) << setprecision(6) << L(x, N, x_arr, y_arr);
        cout << endl;
    }   
}

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