Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
1 / 11 / 0
Регистрация: 24.09.2016
Сообщений: 98

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

13.10.2016, 19:59. Показов 951. Ответов 3

Студворк — интернет-сервис помощи студентам
Пишу программу в которой находится значение интеграла методом Симпсона, трапеци и левых прямоугольников
Привожу пример кода:
Левые прямоугольники
C#
1
2
3
4
5
6
7
8
public double lev1(int n, double a, double b)
            {
                double sum = 0;
                double h = (b - a) / n;
                for (double i = a; i < b; i = i + h)
                    sum += F1(i);
                return sum * h;
            }
Трапеции
C#
1
2
3
4
5
6
7
8
9
10
11
12
 public double lev3(int n, double a, double b)
            {
                double h = (b - a) / n;
                double result = 0.0;
 
                result += F3(a) / 2.0;
                result += F3(b) / 2.0;
 
                for (int i = 1; i < n; ++i)
                    result += F3(a + i * h);
                return h * result;
            }
Симпсона
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public double lev8(int n, double a, double b)
            {
                double h;
                h = (b - a) / n;
                double I, I2 = 0.0, I4 = 0.0;
                I4 = F8(a + h);
                for (int k = 2; k < n; k += 2)
                {
                    I4 += F8(a + (k + 1) * h);
                    I2 += F8(a + k * h);
                }
                I = F8(a) + F8(b) + 4 * I4 + 2 * I2;
                I *= h / 3;
 
                return I;
            }
Вопрос вот в чет: после выдачи результата: например функции e^((-x)^2) в л.п. ответ- 1,75;Трапеци - 1,95; Симпсона - 1,93. Преподаватель сказал что погрешность результатов должна быть 0,01 или 0,001 то есть все ответы должны быть одинаковые.
Но у меня они разные, хотя если проверять в мат.калькуляторе то все правильно. Скажите почему так: у меня не корректно написана программа для нахождения метода или суть в самих методах и это нормально ???
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.10.2016, 19:59
Ответы с готовыми решениями:

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

Нахождение определенного интеграла по точности
Нужна помощь, надо приложение которое считает определенный интеграл по заданной точности(метод трапеции), мне надо конкретно часть когда...

Нахождение интеграла
Есть программа, выполняющая табулирование некоторой функции. Как сделать так, чтобы программа находила интеграл функции g с пределами...

3
94 / 94 / 36
Регистрация: 01.10.2014
Сообщений: 229
13.10.2016, 20:32
DariaGris, вам необходимо увеличивать n пока вы не получите, что [результат_1_метода минус результат_2_метода] по модулю не превосходит заданную точность и тоже самое с [результат_2_метода минус результат_3_метода].
Тут 2 варианта:
1. Выбираете какое то начальное n и считаете 1 раз методом Симпсона, т.к. он самый точный, а затем считаете вторым и третьим, увеличивая n пока не получите необходимой точности.
2. Просто увеличиваете n для каждого метода одновременно и проверяете разницу результатов.

Добавлено через 1 минуту
Если нужен код, могу написать
0
1 / 11 / 0
Регистрация: 24.09.2016
Сообщений: 98
13.10.2016, 20:36  [ТС]
Если можете напишите пожалуйста.
0
94 / 94 / 36
Регистрация: 01.10.2014
Сообщений: 229
13.10.2016, 22:43
DariaGris,

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
class Program
    {
        static void Main(string[] args)
        {            
            Console.Write("Введите начальное n:");
            int n=Convert.ToInt32(Console.ReadLine());
                        
            Console.Write("Введите шаг, с которым будем искать:");
            int shag = Convert.ToInt32(Console.ReadLine());
 
            Console.Write("Введите a:");
            double a = Convert.ToDouble(Console.ReadLine());
 
            Console.Write("Введите b:");
            double b = Convert.ToDouble(Console.ReadLine());            
 
            double res1, res2, res3;
 
            do
            {
                res1 = lev1(n, a, b);
                res2 = lev3(n, a, b);
                res3 = lev8(n, a, b);
                                
                n = n + shag;                
            }
            while ((Math.Abs(res1 - res2) > 0.0001)||((Math.Abs(res2 - res3) > 0.0001)));
 
            //Выводим результат
            Console.WriteLine(n);
            Console.WriteLine(res1);
            Console.WriteLine(res2);
            Console.WriteLine(res3);
        }
 
        public static double F1(double x)
        {
            return Math.Exp(Math.Pow(-x, 2));
        }
 
        public static double lev1(int n, double a, double b)
        {
            double sum = 0;
            double h = (b - a) / n;
            for (double i = a; i < b; i = i + h)
                sum += F1(i);
            return sum * h;
        }
 
        public static double lev3(int n, double a, double b)
        {
            double h = (b - a) / n;
            double result = 0.0;
 
            result += F1(a) / 2.0;
            result += F1(b) / 2.0;
 
            for (int i = 1; i < n; ++i)
                result += F1(a + i * h);
            return h * result;
        }
 
        public static double lev8(int n, double a, double b)
        {
            double h;
            h = (b - a) / n;
            double I, I2 = 0.0, I4 = 0.0;
            I4 = F1(a + h);
            for (int k = 2; k < n; k += 2)
            {
                I4 += F1(a + (k + 1) * h);
                I2 += F1(a + k * h);
            }
            I = F1(a) + F1(b) + 4 * I4 + 2 * I2;
            I *= h / 3;
 
            return I;
        }
    }
Программа долго считает, зависит от шага, с которым перебираем n. Можно шаг и 10000 и 100000 задать. Я не стал переписывать 3 метода поиска интеграла в 1, т.к так нагляднее видно что мы делаем.
Если соединить 3 метода в 1,то можно добиться результата за более короткое время, т.к. в основном цикле мы по новый пересчитываем значения, которые уже считали до этого и получается прогрессия - из за этого долго.

Добавлено через 1 минуту
К тому же чем выше точность, тем дольше прога считает

Добавлено через 31 секунду
В общем поэксперементируйте
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.10.2016, 22:43
Помогаю со студенческими работами здесь

Нахождение интеграла
Помогите пожалуйста найти интегралы

Нахождение интеграла
Вычислить определенный интеграл от функции f(x) на промежутке ме- тодом прямоугольников. f(x) = 4sin x cos x, a = 0, b = 1, число...

Нахождение интеграла
Как найти интеграл вот этого

Нахождение интеграла
Задание вернули на переделку с пометкой &quot;Неверно вычислен интеграл&quot;: 24\int_{0}^{\pi /2}|\sin2x\cos2x|dx=24\cdot(1/2)\int_{0}^{\pi...

Нахождение интеграла
import math a = int(input('Введите левый предел интегрирования а:')) b = int(input('Введите левый предел интегрирования b:')) eps...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru