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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Kamino
0 / 0 / 0
Регистрация: 18.06.2011
Сообщений: 41
#1

Интегрирование полинома, считанного из файла - C++

18.06.2011, 16:53. Просмотров 1336. Ответов 5
Метки нет (Все метки)

Из файла считывается степень полинома и его коэффициенты. Например,
==============
5
1 2 3 4 5 6
==============
~ 1 + 2*x + 3*x^2 + 4*x^3 + 5*x^4 + 6*x^5

Затем с клавиатуры вводятся пределы интегрирования.
Для полинома производится вычисление интеграла на заданном интервале с помощью метода трапеций (http://www.machinelearning.ru/wiki/i...86%D0%B8%D0%B9 http://www.matmetod.ru/method_trapezium_reference) и с помощью метода Монте-Карло (http://ru.wikipedia.org/wiki/%D0%9C%...80%D0%BB%D0%BE)
Количество точек для интегрирования задаётся с клавиатуры. Результаты численного интегрирования сравниваются по абсолютной величине.
Для формулы трапеций необходимо рассчитать величину погрешности.



Вот. В проге парю очень слабо.Сможете помочь?

 Комментарий модератора 
Именуйте темы осмысленно! Название темы должно максимально полно отражать её содержимое.


Добавлено через 2 часа 0 минут
Это очень сложно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2011, 16:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Интегрирование полинома, считанного из файла (C++):

Обработка массива, считанного из файла; найти ошибку - C++
Есть задание: программа считывает из файла массив целых чисел. Найти максимум (max) и минимум (min) среди них, после чего найти среднее...

Заполнить массив цифрами числа, считанного через cin - C++
Здрасти, как ввести в массив int mMass число 12345 с помощью cin>>? Нужно чтобы в mMass записалась 1, в mMass записалась 2 .... и...

Символьное интегрирование полинома - Prolog
Выручайте. Произвести символьное интегрирование полинома, который задается структурой вида: a+b*x+c*x^2+d*x^3+… Аргументы: исходный...

Передача считанного файла через pipe - C++ WinAPI
прошу помощи разобраться с чтением файла и передачей прочитанных данных через анонимный pipe сам смысл задачи:программа запускается из...

Создать новую строку из N первых символов считанного из файла строки и E последних символов другой строки - Turbo Pascal
Создать новую строку из N первых символов считанных из файла строк и E последних символов другой строки, Который вводится пользователем с...

Задача интерполяции методом полинома Ньютона и полинома Лагранжа - Численные методы
Решить задачу интерполяции методом полинома Ньютона и полинома Лагранжа 1 2 4 5 8,35 9,42 10.12 9,45

5
grizlik78
Эксперт С++
1966 / 1459 / 120
Регистрация: 29.05.2011
Сообщений: 3,018
18.06.2011, 17:30 #2
Цитата Сообщение от Kamino Посмотреть сообщение
Это очень сложно?
Да нет, не сложно. Вот все и думают — в чём же проблема? Что не получается?
Ну вот, для начала, программа, которая считает значение многочлена в заданной точке
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
 
double poly(double *pa, unsigned degree, double x)
{
    double sum = *pa++;
    double x_i = x;
    while (degree--)
    {
        sum += *pa++ * x_i;
        x_i *= x;
    }
    return sum;
}
 
int main()
{
    double array[] = { 4., 3., 2. };
    unsigned const size_a = sizeof(array)/ sizeof(*array);
    unsigned degree = size_a - 1;
    double x = 2.;
    printf("poly(%g) = %g\n", x, poly(array, degree, x));
    return 0;
}
Осталось только прикрутить считывание файла с динамическим выделением памяти и реализовать оба этих несложных метода интегрирования.
Так в чём проблема?
1
Kamino
0 / 0 / 0
Регистрация: 18.06.2011
Сообщений: 41
19.06.2011, 13:51  [ТС] #3
Спасибо. Будем разбираться

Добавлено через 17 часов 30 минут



а эти методов случайно тут нет?
0
grizlik78
Эксперт С++
1966 / 1459 / 120
Регистрация: 29.05.2011
Сообщений: 3,018
19.06.2011, 14:06 #4
На форуме? Подозреваю, что есть. Надо поискать.
Метод трапеций (не проверял):
C++
1
2
3
4
5
6
7
double a = 0.0, b = 1.0; // пределы интегрирования
int k = 100; // количество точек
double delta = (b - a)/(k-1); // расстояние между точками
double s1 = 0.5*(poly(array, degree, a) + poly(array, degree, b));
for (int i = 1; i < k; ++i)
    s1 += poly(array, degree, a+k*delta);
s1 *= delta; // результат интегрирования методом трапеций
А методом Монте-Карло надо выбирать случайные точки из диапазона и усреднять значение функции по этим точкам. Потом умножить на интервал интегрирования.
1
Kamino
0 / 0 / 0
Регистрация: 18.06.2011
Сообщений: 41
19.06.2011, 14:09  [ТС] #5
Ты меня просто спасаешь. Спасибо большое.Будем сейчас разбираться

 Комментарий модератора 
Кросспостинг
0
grizlik78
Эксперт С++
1966 / 1459 / 120
Регистрация: 29.05.2011
Сообщений: 3,018
19.06.2011, 14:12 #6
Всё-таки предел в цикле неправильный
C++
1
2
3
4
5
6
7
double a = 0.0, b = 1.0; // пределы интегрирования
int k = 100; // количество точек
double delta = (b - a)/(k-1); // расстояние между точками
double s1 = 0.5*(poly(array, degree, a) + poly(array, degree, b));
for (int i = 1; i < k-1; ++i)
    s1 += poly(array, degree, a+k*delta);
s1 *= delta; // результат интегрирования методом трапеций
0
19.06.2011, 14:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2011, 14:12
Привет! Вот еще темы с ответами:

Интегрирование с заменой переменных или интегрирование по частям? - Математический анализ
Не знаю как решить, не получается \int ({x}^{2}+1){3}^{x}dx

Функция должна заменять все символы в каждой из строк считанного текста - Turbo Pascal
Функция должна сравнивать некоторый символ1 в строке1 считанного текста с аналогичным символом2 в заданной строке&quot;Alf&quot;, затем менять...

Программа, которая считывает то, что написал пользователь, и принимает решение в зависимости от считанного - C (СИ)
Здравствуйте! Захотел написать себе напоминалку, но столкнулся с одной проблемой. Суть программы такова: Программа задает пользователю...

Интегрирование - Matlab
Помогите пожалуйста: Даны: dw1=0.2*w2*w3; dw2=0.4*w1*w3; dw3=0.8*w2*w3. Начальные условия: w1=0.5, w2=0.43, w3=0.2. ...


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

Или воспользуйтесь поиском по форуму:
6
Закрытая тема Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru