С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 24.09.2016
Сообщений: 7
1

Не могу исправить ошибку в программе вычисляющей интерполяционные полином Лагранжа

02.10.2016, 22:49. Показов 1668. Ответов 10

Author24 — интернет-сервис помощи студентам
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
#include <iostream>
 #include <vector>
 #include <functional>
 
 using namespace std;
 
 template <class T>
 T lagrange(vector<T> xs, vector<T> ys, T x) {
 T res = 0;
 T mul;
 size_t len = xs.size();
 for (size_t i=0; i<len; i++) {
 mul = 1;
 for(size_t j=0; j<len; j++) {
 if (i != j) {
 mul *= (x-xs[j])/(xs[i]-xs[j]);
 }
 }
 res += mul * ys[i];
 }
 }
 
 int main()
 {
 vector<double> xs = {.8, .9 , 1.0, 1.1, 1.2}; ///<ошибка>
 vector<double> ys = {-2, -0.1, 0 , 0.1, 0.1}; ///<ошибка>
 
 double x;
 
 while(true) {
 cout << "x ? ";
 cin >> x;
 cout << "lagrange(" << x << ") = " << lagrange(xs, ys, x) << '\n';
 }
 }
0
Лучшие ответы (1)
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Блог
02.10.2016, 22:49
Ответы с готовыми решениями:

Не могу найти ошибку в программе, вычисляющей определенный интеграл по методу трапеций
Написал программу для вычисления интеграла от x^(1/3) в пределах от -1 до 8. На выходе выдает нули...

Не могу исправить ошибку в программе на С++
Написал программу: #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; double sin...

Не могу исправить ошибку в легкой программе
Вводятся 3 числа, и нужно написать программу, которая будет выводить 10 членов геометрической...

Ошибка в программе(полином Лагранжа)
вот мой код: const {Enter A &amp; B} n=7; {Razmernost} X:array of...

10
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
02.10.2016, 22:55 2
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
#include <iostream>
#include <vector>
#include <functional>
 
using namespace std;
 
template <class T>
T lagrange(vector<T> xs, vector<T> ys, T x) {
    T res = 0;
    T mul;
    size_t len = xs.size();
    for (size_t i=0; i<len; i++) {
        mul = 1;
        for(size_t j=0; j<len; j++) {
            if (i != j) {
                mul *= (x-xs[j])/(xs[i]-xs[j]);
            }
        }
        res += mul * ys[i];
    }
}
 
int main() {
    vector<double> xs = {0.8, 0.9 , 1.0, 1.1, 1.2};  // я так понимаю тут 0.8, а не .8
    vector<double> ys = {-2.0, -0.1, 0.0 , 0.1, 0.1};
 
    double x;
 
    while(true) {
        cout << "x ? ";
        cin >> x;
        cout << "lagrange(" << x << ") = " << lagrange(xs, ys, x) << '\n';
    }
}
И теги кода ставить не забываем
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
02.10.2016, 22:56 3
А у тебя компилятор поддерживает такую инициализацию?

Добавлено через 1 минуту
Peoples, дело не в нуле.
0
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
02.10.2016, 23:01 4
nmcf, с нулями у меня всё заработало, до этого отказывалось

Добавлено через 3 минуты
nmcf, а что вы имеете ввиду?
0
192 / 128 / 52
Регистрация: 19.01.2010
Сообщений: 518
02.10.2016, 23:02 5
Лучший ответ Сообщение было отмечено TanukaK как решение

Решение

Цитата Сообщение от TanukaK Посмотреть сообщение
vector<double> xs = {.8, .9 , 1.0, 1.1, 1.2}; ///<ошибка>
vector<double> ys = {-2, -0.1, 0 , 0.1, 0.1}; ///<ошибка>
знач ваш компиль не умеет с++11. Можно заменить так:
C++
1
2
3
4
5
vector<double> xs;
xs.push_back(0.8);
xs.push_back(0.9);
xs.push_back(1.0);
...
Или проинициализировать массивом:
C++
1
2
3
4
5
double _xs_[] = {.8, .9 , 1.0, 1.1, 1.2};
double _ys[] = {-2, -0.1, 0 , 0.1, 0.1};
 
vector<double> xs(_xs, _xs + 5);
vector<double> ys(_ys, _ys + 5);
и в функции lagrange не хватает return res;
1
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
02.10.2016, 23:03 6
Что за компилятор у тебя? Ноль можно не писать.
1
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
02.10.2016, 23:04 7
nmcf, возможно из-за того что в онлайн компилятор код забил
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
02.10.2016, 23:04 8
Цитата Сообщение от Peoples Посмотреть сообщение
nmcf, а что вы имеете ввиду?
Что так инициализировать вектор (как массив) можно только в относительно новых компиляторах.
0
0 / 0 / 0
Регистрация: 24.09.2016
Сообщений: 7
02.10.2016, 23:20  [ТС] 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
#include <iostream>
#include <vector>
#include <functional>
 
using namespace std;
 
template <class T>
T lagrange(vector<T> xs, vector<T> ys, T x) {
    T res = 0;
    T mul;
    size_t len = xs.size();
    for (size_t i=0; i<len; i++) {
        mul = 1;
        for(size_t j=0; j<len; j++) {
            if (i != j) {
                mul *= (x-xs[j])/(xs[i]-xs[j]);
            }
        }
        res += mul * ys[i];
    }
}
 
int main()
{
vector<double> xs;
xs.push_back(0.8);
xs.push_back(0.9);
xs.push_back(1.0);
xs.push_back(1.1);
xs.push_back(1.2);
 
vector<double> ys;
xs.push_back(-2);
xs.push_back(-0.1);
xs.push_back(0);
xs.push_back(0.1);
xs.push_back(0.1);
 
 
    double x;
    
    while(true) {
        cout << "x ? ";
        cin >> x;
        cout << "lagrange(" << x << ") = " << lagrange(xs, ys, x) << '\n';
    }
    return 0;
}
спасибо вам, вот так скомпилировалась, работаю в проге Dev для новичков
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
03.10.2016, 09:25 10
TanukaK, второй вариант Selot чем плох?
0
0 / 0 / 0
Регистрация: 24.09.2016
Сообщений: 7
03.10.2016, 09:57  [ТС] 11
Попробую и так. Спасибо!
0
03.10.2016, 09:57
BasicMan
Эксперт
19315 / 2622 / 84
Регистрация: 17.02.2009
Сообщений: 10,364
Блог
03.10.2016, 09:57
Помогаю со студенческими работами здесь

Как исправить ошибки? Полином Лагранжа
1)Как исправить ошибку? clear, clс x = ; y = ; xx = linspace(0,12,100); % массив точек х x0...

Не могу найти и исправить ошибку в программе
Считываю из тхт файла строки, в каждой строки 7 значений разделенных &quot;;&quot; считываю в stringlist...

Не могу найти ошибку в программе. Что исправить?
Программа проходит все мои тесты, однако проверку на сайте не проходит, выкидывает следующее...

Изменила тип поля, не могу исправить ошибку в программе
После изменения типа данных в таблице, адотэйбл не хочет быть активным.. в этом главная ошибка, а...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru