Ваш браузер устарел. Рекомендуем обновить его до последней версии.




 



 


Delphi

 

 


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

Это урок для тех, кто уважительно относится к высшей математике. В первой половине урока построим программу, которая будет находить значение определенного интеграла произвольной функции на заданном отрезке методом прямоугольников. Рассмотрим механизм вычисления определенного интеграла методом прямоугольников. Пусть необходимо найти значение определенного интеграла произвольной функции на заданном закрытом отрезке [a;b] значений аргумента этой функции. Доказано, что значение интеграла численно равно площади фигуры ограниченной кривой этой функции, осью абсцисс и прямыми параллельными оси ординат проведенными через точки a и b. Разобьем отрезок [a;b] на n равных частей. Через концы этих элементарных отрезков проведем ряд прямых, параллельных оси ординат. Таким образом, вся площадь фигуры окажется разбитой на n элементарных площадей. Каждую элементарную фигуру заменим на прямоугольники так, что каждый элементарный отрезок графика нашей функции заменится на отрезок прямой, параллельной оси абсцисс и проходящей через точку элементарного отрезка графика функции, соответствующей середине элементарного отрезка на оси абсцисс. Теперь для нахождения площади всей фигуры необходимо вычислить и сложить площади всех элементарных прямоугольников. На рисунке вы видите всего четыре таких прямоугольника. Очевидно, что чем на большее число n элементарных отрезков будет разбит отрезок [a;b], тем точнее будет определена площадь всей вышеуказанной фигуры. Возьмем число разбиений n равное, например 10000. Вот здесь-то компьютер просто незаменим, так как его процессор практически мгновенно вычислит площадь каждого из 10000 элементарных прямоугольников, да еще и по дороге последовательно сложит эти площади. Трудно даже представить, сколько времени понадобится человеку для проведения подобных расчетов вручную!

Приступим к построению программы, под руководством которой компьютер будет вычислять значение определенного интеграла функции y = x2 + 5 на любом отрезке. Графиком этой функции будет являться парабола. На форму Form1 поместите компоненты Edit1 и Edit2 для ввода исходных данных и компонент Label1 для вывода результата работы программы. Для запуска программы воспользуйтесь, например, электронной кнопкой Button1. Со всеми этими компонентами вы уже работали, извлеките их из вкладки Standard главного окна. Напишите функцию обработки Button1Click:

 

     int n;   float a, b, x, y, d, s;     //инициализация переменных

 

     a = StrToFloat (Edit1->Text);     //ввод нижнего предела

     b = StrToFloat (Edit2->Text);     //ввод верхнего предела

 

     if (a < b)     //условие ЕСЛИ

     {

     n = 10000;     //число разбиений

     d = (b - a)/n;     //вычисление шага передвижения

     x = a + d/2;     //начало передвижения

     while (x < b)     //условие ПОКА

     {

     x = x + d;     //передвижение на шаг

     y = pow(x,2) + 5;     //вычисление значения функции

     s = s + y*d;     //вычисление и суммирование площадей

     }

     Label1->Caption = "Интеграл = " + FloatToStr (s);     //вывод результата

     }

 

     if (a >= b)     //условие ЕСЛИ

     {

     Label1->Caption = "/a/ должно быть больше /b/";     //вывод сообщения

     }

 

Программа работать не будет, выявится ошибка в строке «вычисление значения функции». В этой строке появилась степенная функция pow, которая в нашем случае возводит переменную x во вторую степень. Для того чтобы этот оператор заработал необходимо в заголовочной части файла Unit1.cpp записать инструкцию #include <math.h>.

Вначале программы инициализируются переменные: n, целого типа, остальные переменные, как вещественные. Входные данные поступают в программу посредством свойства Text компонента Edit1. При вводе нижнего и верхнего пределов используется функция преобразования StrToFloat, которая вводимую строку позволяет распознавать как вещественное число. Далее идет условие ЕСЛИ, при выполнении которого можно приступать к вычислению определенного интеграла. Задается число разбиений, вычисляется шаг продвижения, определяется начальное значение аргумента. Обратите внимание на то, что пошаговое продвижение вычислений начинается со средины первого элементарного отрезка. Внутри условия ЕСЛИ расположилось условие ПОКА, в котором и происходит вычисление определенного интеграла. Пока аргумент меньше верхнего предела будут выполняться три инструкции. Это продвижение аргумента на постоянный шаг, вычисление значения функции, последовательное вычисление и суммирование элементарных площадей. Сразу после завершения работы цикла ПОКА выводится результат работы программы с помощью компонента Label1 посредством изменения его свойства Caption. И в завершении программы еще одно условие ЕСЛИ, которое необходимо для вывода подсказывающего сообщения пользователю в ситуации равенства введенных пределов либо тогда, когда нижний предел оказался больше верхнего предела.

Позаботьтесь о том, чтобы пользователю-математику было удобно работать с вашим приложением. Для этого у компонентов Edit1 и Edit2 их свойству Text придайте значения «Нижний предел» и «Верхний предел» соответственно. Для компонента Label1 свойству Caption установите значение пустого множества, тем самым вы предварительно очистите надпись для вывода результата на форме. Электронную кнопку Button1 снабдите надписью, например, «Вычислить», обратившись к свойству Caption. Подберите подходящее название вашей программе и впишите его в строку заголовка формы.

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

А теперь рассмотрим вопрос о вычислении определенного интеграла методом трапеций. В этом случае элементарные прямоугольники заменяются близкими к ним по площади элементарными прямоугольными трапециями. Для того чтобы лучше представить трапецию мысленно поверните закрашенную на рисунке фигуру по часовой стрелке на девяносто градусов. Вспомним, что нахождения площади трапеции нужно полусумму оснований умножить на высоту. Верхнее основание равно значению функции y1 при значении аргумента в точке a. Нижнее же основание равно значению функции y2 при значении аргумента в точке a+d. Высота трапеции равна шагу передвижения d. Заметьте, что площадь первой трапеции берется с недостатком, а площадь, например, четвертой трапеции берется с избытком. Очевидно, что метод трапеций будет работать точнее, если график функции имеет хотя бы одну точку перегиба, тогда отличия в площадях трапеций с избытком и недостатком от действительных элементарных площадей будут довольно удачно компенсировать друг друга. Обратите внимание на то, что начало пошагового продвижения в этом методе начинается ровно от точки нижнего предела.

Построим программу, которая будет находить значение определенного интеграла методом трапеций для вполне конкретной функции y = 5 sin(x – 2). Программный код может выглядеть, например, так:

 

     int n; float a, b, x, y1, y2, d, s;     //инициализация переменных

 

     a = StrToFloat (Edit1->Text);     //ввод нижнего предела

     b = StrToFloat (Edit2->Text);     //ввод верхнего предела

 

     if (a < b)     //условие ЕСЛИ

     {

     n = 10000;     //число разбиений

     d = (b - a)/n;     //вычисление шага передвижения

     x = a;     //начало передвижения

     while (x < b)     //условие ПОКА

     {

     y1 = 5*sin(x  2);     //вычисление функции y1

     y2 = 5*sin(x – 2 + d);     //вычисление функции y2

     s = s + (y1 + y2)*d/2;     //вычисление и суммирование площадей

     x = x + d;     //передвижение на шаг

     }

     Label1->Caption = "Интеграл = " + FloatToStr (s);     //вывод результата

     }

 

     if (a >= b)     //условие ЕСЛИ

     {

     Label1->Caption = "/a/ должно быть больше /b/";     //вывод сообщения

     }

 

Как видите, немного изменилась строка объявления переменных, строка, определяющая начало пошагового продвижения и тело цикла ПОКА. Теперь в этом цикле идет последовательное вычисление площадей элементарных трапеций и их сложение. Вводимые вами аргументы для любых тригонометрических функций будут выражены в радианах. Протестируйте программу для других математических функций.

Flag Counter
Яндекс.Метрика
200stran.ru: показано число посетителей за сегодня, онлайн, из каждой страны и за всё время
Besucherzahler russain brides
счетчик посещений

Выбери лучшее!

allbest