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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Чужое адресное пространство http://www.cyberforum.ru/cpp-beginners/thread976103.html
Как получить доступ к чужому адресному пространству? Допустим, как это делают cheatEngine или ArtMoney? Они вроде как не ставятся на уровне ядра, да и dll-ки вроде как не внедряют, но при этом вполне себе нормально изменяют нужный байт в адресном пространстве чужого процесса. Как? p.s Чисто ознакомительные цели
C++ Ввод и вывод матрицы Нужно сделать ввод и вывод матрицы NxM. Цикл for я сделал, нужно еще while и do while. const int N (5) ; const int M (10); long matrix ; for (int i=0; i<N; i++) { cout << "Enter 10 elements of N " << ( i+1 ) << " -> " ; for (int j=0; j<M; j++) cin >> matrix ; } http://www.cyberforum.ru/cpp-beginners/thread976094.html
C++ это мы не проходили
Дана строка, вид которой указан в вариантах. Формат описания: Буква обозначает одину позицию, в которой может быть произвольный символ. Символ # обозначает цифру. Символы, обозначенные одной буквой и идущие подряд, образуют фрагмент. Знак ~ означает фрагмент заранее неопределённой длины, такой фрагмент всегда символом !. * Выделить из строки числа, найти их сумму. * Удалить из строки...
Иконки C++
Когда запускаю программу, то первые пару секунд мышка и все остальное работает, затем все зависает. Что делать? #include <iostream> #include <stdlib.h> #include <allegro.h> #define MAXX 1366 #define MAXY 768 using namespace std;
C++ Модуль и среднее арифметическое http://www.cyberforum.ru/cpp-beginners/thread976012.html
Написать собственную функцию вычисления модуля числа и использовать ее для вычисления среднего арифметического. Что то я вообще не пойму как её сделать...помогите плис..
C++ Подсчитать количество обоев для оклейки комнаты Есть комната. Длина 1-й стены 6 метров, длина другой 7.5 метров, высота 3.2 метра. Дверь шириной 0.8 метром, а высотой 2 метра. Пользователь вводит ширину рулона обоев и длину обоев которые нужно поклеить. Сколько нужно обоев? не учитывая потолок и дверь. (double) Нужен код с++ для консольного приложения Win32. Заранее огромное спасибо. подробнее

Показать сообщение отдельно
illuminates
1 / 1 / 0
Регистрация: 14.06.2012
Сообщений: 98
13.10.2013, 15:01     Интерполяция Лагранжа
Добрый день! Помогите пожалуйста найти ошибку в программе, битый день делаю, я новичок, но как мне кажется очень логично написал код. Программа работает, но по непонятной причине выдаёт повторяющиеся значения. Где могла закрасться ошибка
задание: построить интерполяционный полином Лагранжа для функции f(x) = 4x - 7sinx на интервале [-2, 3], количество точек, в которых определена функция m = 4. Таблица исходной фунции вычисляется в точках x_i = -2 - i*5/m, i = 0,...,m. Используя полученную таблицу требуется вычислить значения функции, полинома и невязки в точках x_j = -2 - j*5/9, j = 0,...,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
40
41
42
43
44
45
46
47
48
49
50
51
52
double lagrange(double _x);
double func(double _x);
int main( void )
{
  setlocale(LC_ALL, "Russian");
  int a=-2, b=3, m=4;
  double X[9], Nevyazka[9];
 
 
    for (short j=0; j<=9; j++)
    {
        X[j]=a+j*(b-a)/9;
        Nevyazka[j]=fabs(lagrange(X[j])-func(X[j]));
        cout<<"f(X"<<j<<")="<<func(X[j])<<";\t"<<"L(X"<<j<<")="<<lagrange(X[j])<<";\t"<<"Невязка  "<<Nevyazka[j]<<";\n";
    }
 
        getch();    
    return (0);
}
 
 
 
double lagrange(double _x)
{
        double L = 0, P = 1, x[5], y[5];
        int a=-2, b=4;
        short n=4;
        //double x[5] = {-2, -0.75, 0.5, 1.75, 3};
        //double y[5] = {-1.64, 1.77, -1.36, 0.11, 11.01};
        for (short i = 0; i < n; i++)
        {
            x[i]=a+(i*(b-a))/n;
            y[i]=4*x[i]-7*sin(x[i]);
        }
 
        for (short i = 0; i < n; i++)
        {    
            for (short j = 0; j < n; j++)
                {
                 if (j - i)
                 P *= (_x - x[j])/ (x[i] - x[j]);
                 }
             L += P * y[i];
        }       
 
        return L;
}
 
double func(double _x)
{
    return 4*_x-7*sin(_x);
}
http://img14.imageshack.us/img14/4338/bgix.png

Добавлено через 2 часа 28 минут
Поставил P=1 в подфункции:
Код
 for (short i = 0; i < n; i++)
        {   
         double P = 1;
         for (short j = 0; j < n; j++)
            {
             if (j - i)
                 P *= (_x - x[j])/ (x[i] - x[j]);
              }
             L += P * y[i];
        }
Но вместо долгожданной верной работы, работает совсем не верно. Теперь я совершено ничего уже не понимаю.

http://img191.imageshack.us/img191/779/zh23.png
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 15:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru