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

Нахождение определенного интеграла по точности

11.04.2016, 00:05. Показов 1886. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужна помощь, надо приложение которое считает определенный интеграл по заданной точности(метод трапеции), мне надо конкретно часть когда которая будет находить n (число интервалов разбиения) по заданной точности(вводится с текстбокса).Как это сделать я вообще не могу понять( Прикрепляю код который есть сейчас но он считает по n - введенному с текстбокса.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
double a = Convert.ToDouble(niz.Text);
            double b = Convert.ToDouble(verh.Text);
            double n = Convert.ToDouble(shag.Text);
            //double eps = Convert.ToDouble(tochn.Text);
            double h = (b - a) / n;
            double res = 0;
            double sum = 0;
            //double an = 0;
            if (radioButton1.Checked)
            {
                //do
                    for (x = a; x < b; x += h)
                    {
                        sum += (func1(x) + func1(x + h)) / 2;
                        res = sum * h;
                        //an = (func1(x) - func1(x + h));
 
                    } //while (an > eps);
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.04.2016, 00:05
Ответы с готовыми решениями:

Нахождение значения определенного интеграла
Прошу, помогите мне пожалуйста, написать программу нахождения значения определенного интеграла...

Написать программу вычисления определенного интеграла
Здравствуйте форумчане. Очень нужна помощь. Нужно: 1. Написать программу вычисления...

Написать программу вычисления определенного интеграла
Всем привет! Ребят помогите написать программу, очень срочно надо! А то зачет не поставят!) А то я...

Вычисление определенного интеграла методом парабол
Доброго времени суток! Помогите пожалуйста в написание программы с блок-схемой алгоритма вычисления...

11
1494 / 1209 / 821
Регистрация: 29.02.2016
Сообщений: 3,614
11.04.2016, 09:04 2
Мне кажется, что Вы напрасно так сделали, априорная оценка погрешности метода трапеций при интегрировании произвольной функции, по моему, практически не возможна.
1
0 / 0 / 0
Регистрация: 14.01.2016
Сообщений: 28
11.04.2016, 16:54  [ТС] 3
afront, такое задание дали на курсовой работе, я даже нашел сайт который может произвести интегрирование функции по точности которую вводишь сам, вот и у меня такое же задание,но как его реализовать на c# не понимаю((
0
0 / 0 / 0
Регистрация: 14.01.2016
Сообщений: 28
11.04.2016, 17:04  [ТС] 4
вот формула которую надо реализовать и пример
Миниатюры
Нахождение определенного интеграла по точности  
Изображения
 
0
1494 / 1209 / 821
Регистрация: 29.02.2016
Сообщений: 3,614
11.04.2016, 17:36 5
Вот оценка погрешности метода трапеций из книжки Numerical Recipes
Те ошибка пропорциональна h^3 умноженное на вторую производную в точке ее максимума. Тк эта точка не известна, то и величина погрешности тоже не известна. Поэтому можно положить, что погрешность пропорциональна шагу разбиения. Эту величину и можно взять за основу вашего алгоритма
Миниатюры
Нахождение определенного интеграла по точности  
1
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
11.04.2016, 17:48 6
А такой вариант устроит? (правда может какие-нибудь нюансы алгоритма за давностью лет и не вспомнил):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
double a = Convert.ToDouble(niz.Text);
double b = Convert.ToDouble(verh.Text);
double eps = Convert.ToDouble(epsil.Text); //заданная погрешность
int n = 2; //начальное количество разбиений
double sum1, sum2=0;
do
{
    sum1 = sum2;
    sum2 = 0;
    double h = (b - a) / n;
    double x = a + h;
    while (x <= b)
    {
        sum2 += (f(x) + f(x - h)) * h / 2;
        x += h;
    }
    n *= 2; //количество разбиений увеличивается в 2 раза (или можно n увеличивать по-другому)
} while (Math.Abs(sum1 - sum2) > eps); //продолжаем, пока разница между суммами при текущем и предыдущем количествах разбиений не станет меньше погрешности
1
0 / 0 / 0
Регистрация: 14.01.2016
Сообщений: 28
11.04.2016, 17:50  [ТС] 7
afront, уф.. а ты кодом можешь хотя бы "схематично" накидать что нужно делать, а дальше я как нибудь сам попробую, просто очень плохо у меня с этими интегралами да к тому же и само программирование только изучаю(
0
1494 / 1209 / 821
Регистрация: 29.02.2016
Сообщений: 3,614
11.04.2016, 18:00 8
darkkkky, то о чем я говорю то тут и кода не нужно - задается погрешность, интервал интегрирования делится на эту погрешность и находится число точек. Можно сделать как предлагает Даценд, те посмотреть в программе как будет изменяться погрешность при изменении числа точек и то выбрать необходимое число точек
1
0 / 0 / 0
Регистрация: 14.01.2016
Сообщений: 28
11.04.2016, 18:44  [ТС] 9
Даценд, я уже пробовал что то типа этого написать, но программа зависает после нажатия кнопки расчета, сейчас пробовал Ваш вариант протестировать, и опять зависание(
0
1494 / 1209 / 821
Регистрация: 29.02.2016
Сообщений: 3,614
11.04.2016, 18:47 10
Скорее всего она у Вас не зависает, а зацикливается, где то ошибка в окончании итераций
1
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
11.04.2016, 19:11 11
Лучший ответ Сообщение было отмечено darkkkky как решение

Решение

darkkkky,
Проверил. Код:
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
private void button1_Click(object sender, EventArgs e)
{
    double a = Convert.ToDouble(niz.Text);
    double b = Convert.ToDouble(verh.Text);
    double eps = Convert.ToDouble(epsil.Text);
    int n = 2;
    double sum1, sum2 = 0;
    do
    {
        sum1 = sum2;
        sum2 = 0;
        double h = (b - a) / n;
        double x = a + h;
        while (x <= b)
        {
            sum2 += (f(x) + f(x - h)) * h / 2;
            x += h;
        }
        n *= 2;
    } while (Math.Abs(sum1 - sum2) > eps);
 
    tbRezult.Text = sum2.ToString();
    tbItCount.Text= (n/2).ToString();
 
}
 
double f(double x)
{
    return Math.Sin(x);
}
Результат:
Миниатюры
Нахождение определенного интеграла по точности  
1
0 / 0 / 0
Регистрация: 14.01.2016
Сообщений: 28
11.04.2016, 19:29  [ТС] 12
Даценд, и у меня все заработало была чисто моя ошибка в теле цикла параметр sum2 не приравнял к нулю, и уже хоть и новичок но что то начинаю понимать)), огромное Вам спасибо!
0
11.04.2016, 19:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.04.2016, 19:29
Помогаю со студенческими работами здесь

Построить график определенного интеграла в chart
Прошу прощения, но какие-либо наработки отсутствуют т.к уже неделю сижу и получается всяческий бред...

Вычисление определенного интеграла методом криволинейных трапеций
Подскажите пожалуйста, написать консольную программу на C# для вычисления определенного интеграла...

Вычисление определенного интеграла функции F(x) (любой пример)
Здравствуйте. Помогите пожалуйста дописать программу вычисляющую определенный интеграл от любой...

Вычисление определенного интеграла методом криволинейных трапеций
Помогите пожалуйста написать программу вычисления определенного интеграла методом криволинейных...


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

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