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

Написать функцию нахождения определенного интеграла другой функции, используя делегаты

05.06.2019, 16:05. Показов 3717. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написать функцию нахождения определенного интеграла другой функции с помощью делегатов на С#. Передайте функцию в качестве параметра.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.06.2019, 16:05
Ответы с готовыми решениями:

Составить алгоритмы и написать программы для нахождения определенного интеграла методами прямоугольников
Здравствуйте помогите пожалуйста Составить алгоритмы и написать программы для нахождения определенного интеграла методами...

Составить алгоритм и написать программу вычисления определенного интеграла функции F(x) на заданном отрезке
Помогите, пожалуйста. Составить алгоритм и написать программу вычисления определенного интеграла функции F(x) на заданном отрезке,...

Программа для нахождения определенного интеграла
Помогите, написать программу для нахождения определенного интеграла с точностью Е = 10-3 для заданных границ с помощью трех методов: ...

17
1498 / 1213 / 821
Регистрация: 29.02.2016
Сообщений: 3,631
06.06.2019, 09:29
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
        public delegate double Function(double x);
        static double df(double x)
        {
            return Math.Cos(x);
        }
        public static double Rectangular(Function f, double a, double b, int n)
        {
            double sum = 0.0;
            double h = (b - a) / n;
            for (int i = 0; i < n; i++)
            {
                sum += h * f(a + i * h);
            }
            return sum;
        }
 
        static void Main(string[] args)
        {
            int n = 1000;
            double result;
            double a = 0.0;
            double b = 1.0;
 
            result = Rectangular(df, a, b, n);
            Console.WriteLine("Result = " + result.ToString());
            Console.ReadKey();
         }
1
0 / 0 / 0
Регистрация: 14.05.2019
Сообщений: 25
06.06.2019, 09:59  [ТС]
Спасибо, не могли бы вы, пожалуйста, объяснить, как работает данная программа
0
1498 / 1213 / 821
Регистрация: 29.02.2016
Сообщений: 3,631
06.06.2019, 10:05
программа вычисляет определенный интеграл от функции df методом прямоугольников (Rectangular)
0
0 / 0 / 0
Регистрация: 14.05.2019
Сообщений: 25
06.06.2019, 10:23  [ТС]
Можно, пожалуйста, поподробнее. Что такое h, зачем используется переменная sum? И я правильно понимаю, что a и b - это пределы интегрирования? А n - это количество разбиения или шагов?
0
1498 / 1213 / 821
Регистрация: 29.02.2016
Сообщений: 3,631
06.06.2019, 10:25
да, правильно
0
0 / 0 / 0
Регистрация: 14.05.2019
Сообщений: 25
06.06.2019, 10:26  [ТС]
Что такое h, зачем используется переменная sum?
0
1498 / 1213 / 821
Регистрация: 29.02.2016
Сообщений: 3,631
06.06.2019, 10:33
h - шаг разбиения, sum - результат суммирования площадей прямоугольников, т.е. это искомый интеграл
0
0 / 0 / 0
Регистрация: 14.05.2019
Сообщений: 25
06.06.2019, 10:36  [ТС]
Если h - шаг разбиения, то тогда что такое n? Объясните, пожалуйста, как работает вот эта часть кода? Потому что я считала на калькуляторе и там получается другой ответ. public static double Rectangular(Function f, double a, double b, int n)
{
double sum = 0.0;
double h = (b - a) / n;
for (int i = 0; i < n; i++)
{
sum += h * f(a + i * h);
}
return sum;
}
0
1498 / 1213 / 821
Регистрация: 29.02.2016
Сообщений: 3,631
06.06.2019, 10:44
Лучший ответ Сообщение было отмечено Ekaterina2417 как решение

Решение

n - это количество точек разбиения.
Я добавил проверку результата с помощью аналитического метода, т.к. интеграл от cos равен sin
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
   class Program
    {
        public delegate double Function(double x);
        static double df(double x)
        {
            return Math.Cos(x);
        }
        static double f(double x)
        {
            return Math.Sin(x);
        }
 
        public static double Rectangular(Function f, double a, double b, int n)
        {
            double sum = 0.0;
            double h = (b - a) / n;
            for (int i = 0; i < n; i++)
            {
                sum += h * f(a + i * h);
            }
            return sum;
        }
 
        static void Main(string[] args)
        {
            int n = 1000;
            double result;
            double a = 0.0;
            double b = 1.0;
 
            result = Rectangular(df, a, b, n);
            Console.WriteLine("Result = " + result.ToString());
            result = f(b) - f(a);
            Console.WriteLine("Analytic result         = " + result.ToString());
            Console.ReadKey();
         }
    }
1
0 / 0 / 0
Регистрация: 14.05.2019
Сообщений: 25
06.06.2019, 10:55  [ТС]
Объясните, пожалуйста, как работает вот эта часть кода? Потому что я считала на калькуляторе и там получается другой ответ.

public static double Rectangular(Function f, double a, double b, int n)
{
double sum = 0.0;
double h = (b - a) / n;
for (int i = 0; i < n; i++)
{
sum += h * f(a + i * h);
}
return sum;
}
0
1498 / 1213 / 821
Регистрация: 29.02.2016
Сообщений: 3,631
06.06.2019, 11:55
Ekaterina2417, я вроде все объяснил, что конкретно непонятно?
0
0 / 0 / 0
Регистрация: 14.05.2019
Сообщений: 25
06.06.2019, 12:01  [ТС]
Извините за назойливость. То есть программа работает следующим образом: сначала считается шаг разбиения для того, чтобы посчитать площади и суммировать их, далее пока i меньше n(количества точек разбиения) считаются площади. Площадь считается следующим образом: шаг разбиения умножается на функцию от суммы нижнего предела интегрирования (а) и произведения номера точки на шаг разбиения. Все суммы складываются и выводится ответ. Ниже в программе задаются параметры - это пределы интегрирования и количество точек разбиения. Я правильно поняла, как работает ваша программа?
0
1498 / 1213 / 821
Регистрация: 29.02.2016
Сообщений: 3,631
06.06.2019, 12:06
все так, кроме того я проверил результат аналитически и ответы совпали, т.е. все работает правильно.
1
0 / 0 / 0
Регистрация: 14.05.2019
Сообщений: 25
06.06.2019, 12:08  [ТС]
Спасибо большое
0
1498 / 1213 / 821
Регистрация: 29.02.2016
Сообщений: 3,631
06.06.2019, 12:48
Ekaterina2417, добавил еще метод трапеций, т.к. метод прямоугольников не самый точный
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
    class Program
    {
        public delegate double Function(double x);
        static double df(double x)
        {
            return Math.Cos(x);
        }
        static double f(double x)
        {
            return Math.Sin(x);
        }
 
        public static double Rectangular(Function f, double a, double b, int n)
        {
            double sum = 0.0;
            double h = (b - a) / n;
            for (int i = 0; i < n; i++)
            {
                sum += h * f(a + i * h);
            }
            return sum;
        }
        public static double Trapezoidal(Function f, double a, double b, int n)
        {
            double sum = 0.0;
            double h = (b - a) / n;
            for (int i = 0; i < n; i++)
            {
                sum += 0.5 * h * (f(a + i * h) + f(a + (i + 1) * h));
            }
            return sum;
        }
 
        static void Main(string[] args)
        {
            int n = 1000;
            double result;
            double a = 0.0;
            double b = 1.0;
 
            result = Rectangular(df, a, b, n);
            Console.WriteLine("Result using Rectangular = " + result.ToString());
 
            result = Trapezoidal(df, a, b, n);
            Console.WriteLine("Result using Trapezoidal  = " + result.ToString());
 
            result = f(b) - f(a);
            Console.WriteLine("Analytic result           = " + result.ToString());
            Console.ReadKey();
         }
    }
0
0 / 0 / 0
Регистрация: 14.05.2019
Сообщений: 25
06.06.2019, 12:49  [ТС]
А вы можете реализовать тест программы (void test)?
0
1498 / 1213 / 821
Регистрация: 29.02.2016
Сообщений: 3,631
06.06.2019, 13:27
не делал никогда
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.06.2019, 13:27
Помогаю со студенческими работами здесь

Нахождения определенного интеграла методом трапеций
2. Используя процедурный тип данных реализовать функцию нахождения определенного интеграла любой заданной функции на заданном отрезке...

Написать программу для нахождения максимального из n чисел,используя функцию BID
1. Написать программу для нахождения максимального из n чисел,используя функцию BID. Function BID (m,n:integer):integer; Begin if...

Помогите разработать программу нахождения значения определённого интеграла
Помогите разработать программу нахождения значения определённого интеграла методом Симпсона функция интегрирования y=ln...

Составить программу вычисления функции У, используя процедуру-функцию нахождения суммы
Помогите написать программу и блок схему! задание: Составить программу вычисления функции У, используя процедуру-функцию нахождения...

Составить программу вычисления функции У, используя процедуру-функцию нахождения суммы
Помогите пожалуйста написать программу и блок схему! задание: Составить программу вычисления функции У, используя процедуру-функцию...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
1С: Программный отбор элементов справочника Номенклатура по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника Сотрудники по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru