Методы и алгоритмы вычисления определенных интегралов: метод трапеций и метод Симпсона (метод парабол). Оформление функции вычисления заданного определённого интеграла на Visual Basic 6.0. Программный код функции. Создание приложения для вычисления.
Аннотация к работе
Чтобы найти площадь интересующей нас криволинейной трапеции необходимо сложить площади всех полосок, которые в свою очередь приближенно равны площадям соответствующих прямолинейных трапеций. Программный код функции будет выглядеть так: Public Function metod_trapec(BYVAL a As Single, BYVAL b As Single, BYVAL n As Long) As Double В результате получилось, что площадь двух соседних полосок, ограниченных прямыми и приближенно равна площади под параболой, проведенной через точки и (см. рис. Программный код функции будет выглядеть так: Public Function metod_Simpson(BYVAL a1 As Single, BYVAL b1 As Single, BYVAL n As Long) As Double При щелчке на кнопке Вход из памяти выгружается форма Dialog и загружается базовая форма, служащая начальной точкой для всех операций с программой, форма Form1.Если интеграл берется в алгебраических функциях, то все в порядке и взять его вручную не представляет труда.
Введение
На практике часто возникает необходимость вычислить определенный интеграл. Если интеграл берется в алгебраических функциях, то все в порядке и взять его вручную не представляет труда. А если интеграл не берется в алгебраических функциях или просто их очень много, то приходится прибегать к помощи компьютерной техники. Существуют несколько способов вычисления определенных интегралов на ЭВМ, причем абсолютно все эти способы получают лишь приближенные значения. В этой работе мы рассмотрим два метода вычисления: метод трапеций и метод Симпсона (метод парабол).
Метод трапеций
Пусть Y= , где - интегрируемая функция, непрерывная на отрезке . Для наглядности будем предполагать, что положительна на отрезке . В этом случае Y представляет собой площадь криволинейной трапеции, ограниченной линиями: , , , . Выберем произвольное натуральное число и разобьем отрезок на равных отрезков при помощи точек: , , , , …, . Прямые разбивают нашу трапецию на полосок. Каждая полоса имеет граничные вертикали: и . Соединим прямой те точки, в которых эти вертикали пересекают интегрируемую функцию . В результате площадь каждой полоски приблизительно стала равна площади обычной прямолинейной трапеции (см. рис. 1).
Рис. 1
Площадь самой левой полоски приближенно равна площади самой левой трапеции, а именно: . Из математических соображений и , а высота трапеции . Значит . Площади всех следующих полосок выразятся аналогичным способом и составят: , , , …, . Чтобы найти площадь интересующей нас криволинейной трапеции необходимо сложить площади всех полосок, которые в свою очередь приближенно равны площадям соответствующих прямолинейных трапеций. Следовательно, площадь криволинейной трапеции, а значит и численное значение заданного интеграла , равны .
Эту формулу можно записать в другом виде, используя математические сокращения и утверждение, что - длина одного из равных отрезков или высота каждой прямолинейной трапеции: (1).
Данная формула называется формулой трапеций. Ее точность зависит от . Чем больше количество разбиений отрезка интегрирования, тем выше точность вычислений.
Теперь перейдем к заданию: нам необходимо найти толщину слоя меди, выделившейся в результате электролиза водного раствора хлорида меди (II) на катоде. Известна зависимость силы тока от времени . Отсюда имеем . Фактически нам надо оформить функцию вычисления заданного определенного интеграла на Visual Basic 6.0 методом трапеций. Назовем функцию metod_trapec. При вызове функции задаваемыми параметрами будут down_predel=0 - нижний предел интегрирования, up_predel - верхний предел интегрирования (время наблюдения), chislo_razb - число разбиений отрезка интегрирования. Программный код функции будет выглядеть так: Public Function metod_trapec(BYVAL a As Single, BYVAL b As Single, BYVAL n As Long) As Double
Dim h As Single
Dim s As Double
Dim i As Long h = (b - a) / n s = (F(a, Io) F(b, Io)) * h / 2
For i = 1 To n - 1 s = s F(a i * h, Io) * h
Next i metod_trapec = s
End Function
__________
Фактические параметры down_predel, up_predel, chislo_razb соответствуют формальным параметрам a, b, n. В основе лежит формула трапеций (1), записанная по-другому: .
Накапливаем сумму, результат которой и будет искомым значением определенного интеграла. Далее присваиваем имени функции значение переменной s.
Метод Симпсона (метод парабол)
Пусть Y= , где - интегрируемая функция, непрерывная на отрезке . Для наглядности будем предполагать, что положительна на отрезке . В этом случае Y представляет собой площадь криволинейной трапеции, ограниченной линиями: , , , . Выберем произвольное натуральное четное число и разобьем отрезок на равных отрезков при помощи точек: , , , , …, . Прямые разбивают нашу трапецию на полосок. Каждая полоса имеет граничные вертикали: и . Отметим точки, в которых эти вертикали пересекают интегрируемую функцию . В результате получились точки: , , , …, . На всем отрезке интегрирования через точки и проведем графики квадратичных функций. В результате получилось, что площадь двух соседних полосок, ограниченных прямыми и приближенно равна площади под параболой, проведенной через точки и (см. рис. 2).
Рис. 2
Вычислим площадь под параболой, проходящей через точки и . Уравнение параболы имеет общий вид . Площадь под параболой: (2).
Парабола проходит через три точки , и , где . Решая систему из трех уравнений, получаем: .
Подставляем в формулу (2). Отсюда следует, что , где . Распространяем на весь отрезок: . Запишем с применением математических операндов: (3).
Данная формула называется формулой Симпсона. Ее точность зависит от . Чем больше количество разбиений отрезка интегрирования, тем выше точность вычислений.
Фактически нам надо оформить функцию вычисления заданного определенного интеграла на Visual Basic 6.0 методом Симпсона. Назовем функцию metod_Simpson. При вызове функции задаваемыми параметрами будут down_predel - нижний предел интегрирования, up_predel - верхний предел интегрирования, chislo_razb - число разбиений отрезка интегрирования. Программный код функции будет выглядеть так: Public Function metod_Simpson(BYVAL a1 As Single, BYVAL b1 As Single, BYVAL n As Long) As Double
Dim h As Single
Dim s As Double
Dim i As Long
Dim x As Single h = (b1 - a1) / n s = F(a1, Io) F(b1, Io) 4 * F(a1 h, Io)
For i = 1 To Int(n / 2) - 1 x = a1 2 * h * i s = s 2 * F(x, Io) 4 * F(x h, Io)
Next i metod_Simpson = s * h / 3
End Function
Фактические параметры down_predel, up_predel, chislo_razb соответствуют формальным параметрам a, b, n. В основе лежит формула Симпсона. Сумма первых трех слагаемых в этой формуле является начальным значением переменной . Далее пробегаем по всему отрезку интегрирования, кроме конечных полосок, и накапливаем сумму. В конце умножаем ее на . Результат и будет искомым значением определенного интеграла. Далее присваиваем имени функции значение переменной .
Создание приложения
При запуске Microsoft Visual Basic 6.0 автоматически выскакивает окно с предложением создать новый проект Standard EXE. Нажимаем OK. Начнем создание проекта с титульного листа. Для этого в меню Project выберем команду Add Form. В появившемся диалоговом окне выберем Dialog и нажмем OK. В открывшейся форме расставим объекты: Label1, Label2,..., Label8, как показано на рисунке (см. рис. 3).
Присвоим свойству Caption значение “Титульный лист”. На кнопку Вход напишем следующий программный код: Private Sub OKBUTTON_Click()
Unload Dialog
Form1.Show
End Sub
При щелчке на кнопке Вход из памяти выгружается форма Dialog и загружается базовая форма, служащая начальной точкой для всех операций с программой, форма Form1. Для того, чтобы создать форму Form1, в меню Project выполним команду Add Form. В появившемся диалоговом окне выберем Form и нажмем OK. Щелкнем правой кнопкой мыши на панели инструментов, выберем вкладку Components, загрузим нестандартные инструменты, которые понадобятся в будущем: Microsoft Windows Common Controls 6.0. Присвоим свойству Caption формы Form1 значение “Курсовой проект - Тема 7 вариант 9 (нахождение толщины слоя)”. Создадим меню для проекта. Для этого в меню Tools выполним команду Menu Editor. В появившемся диалоговом окне напишем названия пунктов меню и названия процедур, которые будут запускаться при выполнении команд меню. Редактор меню с введенными именами представлен на рисунке (см. рис. 4).
Рис. 4 Редактор меню
Опишем, какие процедуры выполняются в каждом пункте меню.
1. MNUFILEEXIT - осуществляет выход из приложения.
Private Sub MNUFILEEXIT_Click()
End
End Sub
Рис. 5
2. MNUFILESAVE_rez - осуществляет сохранение результата эксперимента. Результат сохраняется в файле log.txt, куда записывается используемый метод, нижний предел интегрирования, верхний предел интегрирования, количество разбиений отрезка интегрирования, вычисленное значение интеграла, истинное значение интеграла, погрешность вычислений.
Close #1 a = MSGBOX("Отчет сохранен успешно!" & Chr(10) & Chr(13) & "для просмотра отчета: Файл>>Просмотр отчета",, "Отчет")
End Sub
3. MNUFILELOOK_rez - осуществляет вывод на экран ранее сохраненного результата, если предварительно его сохранили.
Private Sub MNUFILEOPEN_rez_Click()
Form3.Show 1, Form1
End Sub
При выполнении этой процедуры загружается форма Form3, на которой находится объект PICTUREBOX1, в который выводится сохраненный отчет. Для вывода отчета существует кнопка «Загрузить отчет». Программный код Form3: Dim stroka As String
Private Sub CMDBACK_Click()
Unload Form3
End Sub
Private Sub CMDLOADLOG_Click()
On Error GOTO Err
Open "log.txt" For Input As #1
For i = 1 To 8
Line Input #1, stroka
Picture1.Print stroka
Next i
Close #1
Err: If Err.Number = 53 Then a = MSGBOX("Невозможно загрузить результат, ранее не было сохранено результатов!",, "Ошибка")
Unload Form3
End If
End Sub
В процедуре CMDLOADLOG_Click(), проверяется существует ли файл с отчетом, если да то происходит открытие указанного файла, построчное считывание из него и вывод в объект Picture1, если такого файла нет, то об этом пользователя об этом уведомляют. Готовая форма Form3 изображена на рисунке (см. рис. 6). При щелчке на кнопке «Назад» (на объекте CMDBACK) происходит выгрузка формы Form3 из оперативной памяти.
Рис. 6
4. MNUHELPABOUT - выводит на экран информацию о программе. Вывод осуществляется с помощью формы Dialog2.
Private Sub MNUHELPABOUT_Click()
Dialog2.Show 1, Form1
End Sub
При щелчке на кнопке «OK» (объект Command1) происходит выгрузка формы Dialog2 из оперативной памяти. Готовая форма Dialog2 изображена на рисунке (см. рис. 7).
Программный код формы Dialog2: Private Sub OKBUTTON_Click()
Unload Dialog2
End Sub
5. MNUMATEMFORMULA - выводит на экран ручной вывод формулы заданного определенного интеграла. Вывод осуществляется с помощью формы Dialog1.
Private Sub MNUMATEMFORMULA_click()
Dialog1.Show 1, Form1
End Sub
6. MNUMATEMGRAFIK_Pogreshn - выводит на экран форму Form2. В ней можно построить график зависимости погрешности заданного метода от количества разбиений отрезка интегрирования.
Private Sub MNUMATEMGRAFIK_Pogreshn_click()
Form2.Show 1, Form1
End Sub
Программный код формы Form2: Dim i As Long
Dim a As Single, b As Single, n As Long
Public Io As Single
Public Function istinnoe_znach_integrala(a As Single, b As Single) As Double a0 = 0.15: b0 = 0.1: po = 8600: faradey = 96500: M = 64.5 * 10 ^ (-3) istinnoe_znach_integrala = Io * M / (2 * 2 * faradey * po * a0 * b0) * (b ^ 3 / 3 - 3 / 2 * b ^ 2 9 * b - 27 * Log((b 3) / 3))
End Function
Public Function metod_trapec(BYVAL a As Single, BYVAL b As Single, BYVAL n As Long) As Double
Dim h As Single
Dim s As Double
Dim i As Long h = (b - a) / n s = (F(a, Io) F(b, Io)) * h / 2
For i = 1 To n - 1 s = s F(a i * h, Io) * h
Next i metod_trapec = s
End Function
Public Function metod_Simpson(BYVAL a1 As Single, BYVAL b1 As Single, BYVAL n As Long) As Double
Dim h As Single
Dim s As Double
Dim i As Long
Dim x As Single h = (b1 - a1) / n s = F(a1, Io) F(b1, Io) 4 * F(a1 h, Io)
For i = 1 To Int(n / 2) - 1 x = a1 2 * h * i s = s 2 * F(x, Io) 4 * F(x h, Io)
Next i metod_Simpson = s * h / 3
End Function
Private Sub Command1_Click() koeff = 2 * 10 ^ 9
Picture1.Cls
Io = Form1.Text2 a = 0 b = Val(Text3.Text)
N1 = Val(Text4.Text)
N2 = Val(Text5.Text) save = Text1
If Check1.Value = VBCHECKED Then
Open save For Output As #1
Print #1, "количество разбиений"; " "; "погрешность метода трапеций"; " "; "погрешность метода Симпсона"
Вычисляем погрешность, отнимая полученное значение интеграла от истинного, вычисляемого функцией istinnoe_znach_integrala, находящейся в форме Form1. Затем строим точку на объекте Picture1. При щелчке на кнопке «Назад» (объект Command2) форма Form2 выгружается из оперативной памяти. Готовая форма Form2 изображена на рисунке (см. рис. 8).
Мы рассмотрели все функции и процедуры, используемые в проекте. Теперь можно рассмотреть работу формы Form1. При щелчке на кнопке «Произвести вычисления» (объект Command1) происходит считывание из текстовых полей заданных параметров: время наблюдения, начальное значение силы тока, число разбиений отрезка интегрирования. Далее следует проверка входных данных. Далее идет вычисление интеграла и вывод результата, а также построение графика интегрируемой зависимости силы тока на заданном участке времени. График строится таким образом, что он всегда выводится в центре объекта Picture1. Это достигается тем, что система координат вводится исходя из максимального и минимального значения функции и из величины концов отрезка интегрирования. Для этого мы и ищем y_max и y_min. Далее ставим подписи на концах отрезка интегрирования.
Рис. 8
Программный код формы Form1: Dim down_predel As Single
Dim up_predel As Single
Dim znach_integrala As Double
Dim chislo_razb As Long
Dim i As Single
"Public Io As Single
Dim y_max As Single
Dim y_min As Single
"Функция вычисления истинного значения интеграла по формуле Ньютона-Лейбница.
Public Function istinnoe_znach_integrala(a As Single, b As Single) As Double a0 = 0.15: b0 = 0.1: po = 8600: faradey = 96500: M = 64.5 * 10 ^ (-3) istinnoe_znach_integrala = Io * M / (2 * 2 * faradey * po * a0 * b0) * (b ^ 3 / 3 - 3 / 2 * b ^ 2 9 * b - 27 * Log((b 3) / 3))
End Function
"Функция вычисления интеграла методом трапеций.
Public Function metod_trapec(a As Single, b As Single, n As Long) As Double
Dim h As Single
Dim s As Double
Dim i As Long h = (b - a) / n s = (F(a, Io) F(b, Io)) * h / 2
For i = 1 To n - 1 s = s F(a i * h, Io) * h
Next i metod_trapec = s
End Function
"Функция вычисления интеграла методом Симпсона.
Public Function metod_Simpson(a As Single, b As Single, n As Long) As Double
Dim h As Single
Dim s As Double
Dim i As Long
Dim x As Single h = (b - a) / n s = F(a, Io) F(b, Io) 4 * F(a h, Io)
For i = 1 To Int(n / 2) - 1 x = a 2 * h * i s = s 2 * F(x, Io) 4 * F(x h, Io)
Next i metod_Simpson = s * h / 3
End Function
Private Sub Command1_Click()
For i = 0 To 9
Picture3.Line (down_predel i * (up_predel - down_predel) / 10, 0)-(down_predel i * (up_predel - down_predel) / 10, F(down_predel i * (up_predel - down_predel) / 10, Io))
Picture3.Line (down_predel i * (up_predel - down_predel) / 10, F(down_predel i * (up_predel - down_predel) / 10, Io))-(down_predel (i 1) * (up_predel - down_predel) / 10, F(down_predel (i 1) * (up_predel - down_predel) / 10, Io))
Picture3.Line (down_predel (i 1) * (up_predel - down_predel) / 10, F(down_predel (i 1) * (up_predel - down_predel) / 10, Io))-(down_predel (i 1) * (up_predel - down_predel) / 10, 0)
Часто возникает необходимость вычислить определенный интеграл. Если интеграл берется в алгебраических функциях, то все в порядке и взять его вручную не представляет труда. А если интеграл не берется в алгебраических функциях или просто их очень много, то приходится прибегать к помощи компьютерной техники. Существуют несколько способов вычисления определенных интегралов на ЭВМ, причем абсолютно все эти способы получают лишь приближенные значения. В этой работе мы рассмотрим два метода вычисления: метод трапеций и метод Симпсона (метод парабол).
Список литературы
1. Мастер - Самоучитель по Visual Basic 6.0 ALEXSOFT 2010 г.
2. Информатика. Высшая школа. Острейковский В. А. 2009 г.