Проект программного модуля для нахождения корня уравнения
Методика разработки программного модуля для нахождения методом хорд корня уравнения x3-x-0,3=0 с точностью до 0,001 на языке программирования Visual Basic for Application. Схема программного модуля и описание процедуры обработки кнопки "Найти корни".
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 08.09.2010 |
Размер файла | 394,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Содержание
Введение 2
1. Постановка задачи 3
1.1 Математическая модель задачи 3
1.2 Входные данные 6
1.3 Выходные данные 6
1.4 Обработка ошибок. 6
2 Проектирование программного модуля 8
2.1 Структурная диаграмма программного модуля 8
2.2 Разработка схемы программного модуля и её описание 9
2.3 Разработка пользовательского интерфейса 10
3 Реализация программного модуля 12
3.1 Код программы 12
4 Тестирование программного модуля 18
Заключение 19
Список использованных источников 21
Введение
Целью данной курсовой работы является разработка программного модуля для нахождения методом хорд корня уравнения x3 - x - 0.3 = 0 с точностью до 0,001. Для разработки используется табличный процессор Excel и язык программирования Visual Basic for Application.
1. Постановка задачи
1.1 Математическая модель задачи
Рассматриваемый метод так же, как и метод деления отрезка пополам, предназначен для уточнения корня на интервале [a, b], на концах которого левая часть уравнения f(x) = 0 принимает разные знаки. Значение начала интервала а вводится с клавиатуры. Для определения значения конца интервала b, на котором функция меняет знак, при заданном значении начала отрезка а используют следующий итерационный алгоритм:
Задают начальное значение
х = a + h.
Здесь h - это заданный шаг изменения х.
Вычислить значения f(a) и f(x).
Если f(a) и f(x) имеют разные знаки, то принять b = x и прекратить вычисления, иначе принять
x = x + h
и перейти к шагу 2.
Очередное приближение теперь в отличие от метода деления отрезка пополам берем не в середине отрезка, а в точке х1, где пересекает ось абсцисс прямая линия, проведенная через точки f(a) и f(b) (рисунок 1).
В качестве нового интервала для продолжения итерационного процесса выбираем тот из двух [a, x1] или [x1, b], на концах которого функция f(x) принимает значения с разными знаками. Заканчиваем процесс уточнения корня, когда расстояние между очередными приближениями станет меньше заданной точности
|xn - xn-1| <
или когда значения функции f(x) попадут в область шума (рисунок 1), т. е.
|f(xn)| < 1.
Рисунок 1. Метод хорд.
Уравнение прямой линии, проходящей через точки fa = f(a) и fb = f(b), запишем в общем виде
y(x) = kx + c .
Коэффициенты k и c уравнения этой прямой определим из условий
fa = ka + c ,
fb = kb + c .
Вычитая левые и правые части последних соотношений, получим
,
c = fa - ka .
Точку пересечения прямой y(x) с осью абсцисс получим, приравнивая y(x) нулю
(1)
или
.(2)
При заданной точности метод состоит из таких шагов:
Вычислить f(a) и f(b) .
Вычислить x1 по формуле (1) или по формуле (2).
Если f(x1) = 0, то принять в качестве решения значение x1, вывести его и прекратить вычисления, иначе перейти к шагу 4.
Если f(x1) и f(a) имеют одинаковые знаки, то заменить a на x1.
Если f(x1) и f(b) имеют одинаковые знаки, то заменить b на x1.
Если |b a| ( - заданная погрешность вычислений) или |f(x1)| < 1 (1 - заданное значение шума), то принять в качестве решения последнее значение x1, вывести его и прекратить вычисления, в противном случае перейти к шагу 2.
1.2 Входные данные
Входными данными являются:
Начало отрезка;
Конец отрезка;
Требования к входным данным:
Предусмотреть проверку на допустимость исходных данных и повторение ввода при ошибочных данных;
Ввод исходных данных осуществлять в поля ввода формы.
1.3 Выходные данные
Выходными данными являются:
Таблица вычислений;
График функции.
Требования к выходным данным:
Все выходные данные выводятся на форму;
Ко всем выходным данным должен быть запрещен доступ со стороны пользователя.
1.4 Обработка ошибок
В данной программе реализован следующий способ контроля ввода:
Сначала проверяется, является ли набираемый символ либо цифрой, либо запятой;
Если не является, то набор символа игнорируется;
Если набираемый символ является цифрой, то он вводится в поле ввода;
Если набираемый символ является запятой, то проверяется, является ли
она первой вводимой запятой. Если ранее запятые не вводились, то она вводится в поле ввода. В противном случае ввод запятой игнорируется.
Данный способ контроля ввода реализован с помощью функции KeyPress.
Однако пользователь может не ввести в поле ввода данные. В этом случае выдается следующее сообщение:
Рисунок 2. Сообщение об ошибке.
Если пользователь ввел начало отрезка больше, чем конец отрезка, то в этом случае выдается следующее сообщение:
Рисунок 3. Сообщение об ошибке.
2 Проектирование программного модуля
2.1 Структурная диаграмма программного модуля
Рисунок 4. Структурная диаграмма программного модуля.
UserForm1 - пользовательская форма.
UserForm_Initialize() - процедура начальной инициализации пользовательской формы.
CommandButton1_Click() - процедура, срабатывающая при нажатии кнопки «Найти корни», которая производит вычисления и записывает результат.
CommandButton3_Click() - процедура, срабатывающая при нажатии кнопки «О программе», которая выводит информацию о задаче и о разработчике.
CommandButton4_Click() - процедура, срабатывающая при нажатии кнопки «Очистить», которая удаляет построенный график.
CommandButton5_Click() - процедура, срабатывающая при нажатии кнопки «Построить», которая считывает данные и строит график.
f() - функция, которая вычисляет значение функции в зависимости от аргумента.
2.2 Разработка схемы программного модуля и её описание
Рисунок 5. Схема процедуры обработки кнопки «Найти корни».
Обозначения переменных:
x1 - число из [a,b], для которого вычисляется значение функции;
a, b - начало и конец отрезка;
i - счетчик итераций.
2.3 Разработка пользовательского интерфейса
При запуске программы появляется следующее окно:
Рисунок 6. Окно программы.
В окне программы расположены 2 закладки Page1 - «Вычисления» и Page2 - «Построение графика».
На закладке «Вычисления» расположены исходные данные в элементе управления Label, результат (элемент управления Label) и сами вычисления на элементе управления ListBox.
После нажатия на кнопку «Найти корни» производится расчет и выводится результат.
После нажатия на кнопку «О программе» появляется сообщение с данными о задаче, которую решает данная программа, и о разработчике.
Рисунок 7. Сообщение «О программе».
На закладке «Построение графика» ячейки для ввода отрезка (элемент управления TextBox), на котором будет построен график (для уточнения корня уравнения), и сам график. График выводится на элемент управления Image.
3 Реализация программного модуля
3.1 Код программы
Dim a As Double 'начало отрезка
Dim b As Double 'конец отрезка
Dim x1 As Double 'значение аргумента
Dim x2 As Double 'значение аргумента
Dim i As Integer 'счетчик
Dim number As String 'строка для проверки вводимого числа
Dim sign As String 'строка для проверки знака вводимого числа
Dim k As Integer
Dim j As Double
Dim ry As Range 'область данных по y для построения графика
Dim rx As Range 'область данных по x для построения графика
Private Sub UserForm_Initialize()
Application.Visible = False 'делаем Excel невидимым
number = "0123456789,-"
sign = "-"
Image1.Visible = False
CommandButton4.Enabled = False
End Sub
Private Sub CommandButton1_Click()
ListBox1.Clear
a = -5 'присвоение значения
b = 5 'присвоение значения
i = 1 'присвоение значения
ListBox1.AddItem "x" 'заполнение ListBox1
ListBox1.List(0, 1) = "y(x)" 'заполнение ListBox1
Do While (True)
x2 = x1
x1 = a - ((b - a) / (f(b) - f(a))) * f(a)
ListBox1.AddItem x1 'заполнение ListBox1
ListBox1.List(i, 1) = f(x1) 'заполнение ListBox1
i = i + 1
If (f(x1) = 0) Then 'проверка условия
Exit Do 'выход из цикла
End If
If ((f(x1) * f(a)) > 0) Then 'проверка условия
a = x1 'изменение начала отрезка
End If
If ((f(x1) * f(b)) > 0) Then 'проверка условия
b = x1 'изменение конца отрезка
End If
If (Abs(x2 - x1) <= 0.001) Then 'проверка условия
Exit Do 'выход из цикла
End If
Loop
Label4.Caption = x1
End Sub
Private Sub CommandButton3_Click()
MsgBox "Программа уточнения корня уравнения x^3-x-0,3=0 методом хорд." & vbCr & "Разработчик программы: Шараваров Д.", vbInformation, "О программе"
End Sub
Private Sub CommandButton4_Click()
TextBox1.Value = ""
TextBox2.Value = ""
Image1.Visible = False
CommandButton5.Enabled = True
CommandButton4.Enabled = False
End Sub
Private Sub CommandButton5_Click()
'проверяем введены ли все данные
If (TextBox1.Value = "" Or TextBox2.Value = "") Then
MsgBox ("Введите начало и конец отрезка!")
Exit Sub
End If
'проверяем правильно ли введены данные(a<b)
If (CDbl(TextBox1.Value) >= CDbl(TextBox2.Value)) Then
MsgBox ("Проверьте введенные данные!")
Exit Sub
End If
k = 1
For j = CDbl(TextBox1.Value) To CDbl(TextBox2.Value) Step 0.01
Cells(k, 1) = j
Cells(k, 2) = f(j)
k = k + 1
Next j
Set ry = Sheets(ActiveSheet.Name).Range(Cells(1, 2), Cells(k, 2))
Set rx = Sheets(ActiveSheet.Name).Range(Cells(1, 1), Cells(k, 1))
Charts.Add
ActiveChart.ChartType = xlLine
ActiveChart.SetSourceData Source:=ry, PlotBy:=xlColumns
ActiveChart.SeriesCollection(1).XValues = "=" & rx.Address(ReferenceStyle:=xlR1C1, external:=True)
ActiveChart.Location Where:=xlLocationAsObject, Name:="Лист1"
With ActiveChart
.HasTitle = False
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).HasTitle = False
End With
With ActiveChart.Axes(xlCategory)
.HasMajorGridlines = False
.HasMinorGridlines = False
End With
With ActiveChart.Axes(xlValue)
.HasMajorGridlines = False
.HasMinorGridlines = False
End With
ActiveChart.HasLegend = False
ActiveChart.HasDataTable = False
ActiveChart.Export Filename:=CurDir + "\Grafic_func.gif", FilterName:="GIF"
ActiveSheet.ChartObjects.Delete
Worksheets(1).UsedRange.Clear
Image1.Picture = LoadPicture(CurDir + "\Grafic_func.gif") 'загружаем в Image1 файл с графиком
Image1.Visible = True
CommandButton5.Enabled = False
CommandButton4.Enabled = True
End Sub
Public Function f(x As Double) As Double 'нахождение значения функции
f = x ^ 3 - x - 0.3
End Function
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 'Проверка ввода
If KeyAscii > 26 Then
If InStr(number, Chr(KeyAscii)) = 0 Or (InStr(TextBox1.Text, ",") > 0 And Chr(KeyAscii) = ",") Or (TextBox1.SelStart > 0 And InStr(sign, Chr(KeyAscii)) > 0) Then
KeyAscii = 0
End If
End If
End Sub
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 'Проверка ввода
If KeyAscii > 26 Then
If InStr(number, Chr(KeyAscii)) = 0 Or (InStr(TextBox2.Text, ",") > 0 And Chr(KeyAscii) = ",") Or (TextBox2.SelStart > 0 And InStr(sign, Chr(KeyAscii)) > 0) Then
KeyAscii = 0
End If
End If
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) 'Закрытие формы
Select Case MsgBox("Закрыть окно?", vbYesNo + vbQuestion, "Завершение работы")
Case vbYes
Cancel = 0
Application.Quit
Case vbNo
Cancel = -1
End Select
End Sub
4 Тестирование программного модуля
Найдем корень уравнения. Нажмем на кнопку «Найти корни». После этого появится результат и промежуточные вычисления.
Рисунок 8. Закладка «Вычисления».
Рисунок 9. График функции.
Для проверки корня, построим график функции на отрезке [1,1.3] (рис. 9)
Заключение
Целью данной курсовой работы является разработка программного модуля для нахождения методом хорд корня уравнения x3 - x - 0.3 = 0 с точностью до 0,001.
Тестирование показало, что результаты, полученные разработанным программным модулем, соответствуют теоретическим расчётам (это подтверждает и график). В программе присутствует обработка ошибок. При вводе ошибочные данные игнорируются, а при отсутствии введенных данных выдаётся сообщение об ошибке. Курсовая выполнена в полном объеме и в соответствии с заданием.
Список использованных источников
1 Биллинг В.А. VBA и Office 2000. Офисное программирование. - М.: «Русская редакция», 1999.
2 Гарнаев Ю.А. Использование MS Excel и VBA в экономике и финансах. - СПб: БХВ - Санкт-Петербург, 2002.
3 Гарнаев Ю.А. самоучитель VBA. - СПб: БХВ - Санкт-Петербург, 2002.
4 Васильев А. VBA в Office 2000: учебный курс - СПб: Питер, 2002.
5 Кузьменков В.Г. VBA 2002. - М.: Издательство БИНОМ, 2002.
6 MS Office XP: Разработка приложений/Под ред. Ф.А.Новикова - СПб: БХВ - Санкт-Петербург, 2003.
Подобные документы
Математическая модель и методика разработки программного модуля для вычисления приближенного значения бесконечной суммы с точностью до Е=0,05, если x принимает значения на отрезке [a,b] с шагом h. Порядок проверки программного модуля на наличие ошибок.
курсовая работа [228,9 K], добавлен 08.09.2010Создание программного модуля для вычисления интеграла по формулам трапеции и Симпсона, определяя шаг интегрирования по оценке остаточного члена. Для разработки используется табличный процессор Excel и язык программирования Visual Basic for Application.
курсовая работа [159,7 K], добавлен 30.08.2010Структурная диаграмма программного модуля. Разработка схемы программного модуля и пользовательского интерфейса. Реализация программного модуля: код программы; описание использованных операторов и функций. Вид пользовательской формы с заполненной матрицей.
курсовая работа [215,3 K], добавлен 01.09.2010Создание программного модуля, выполненного на языке программирования VBA (Visual Basic for Applications) и позволяющего во введенном массиве символов удалить все повторные вхождения этих символов. Разработка пользовательского интерфейса. Код программы.
курсовая работа [317,4 K], добавлен 11.10.2012Проектирование программного модуля. Описание схемы программы и структуры разрабатываемого пакета. Написание кода ввода исходных данных и основных расчетов. Тестирование программного модуля. Тестирование решения задачи. Методы численного интегрирования.
курсовая работа [549,9 K], добавлен 20.03.2014Тестирование модуля отыскания корня уравнения методом половинного деления. Схема алгоритма тестирующей программы. Численное интегрирование по методу Симпсона с оценкой погрешности по правилу Рунге. Проверка условий сходимости методов с помощью MathCAD.
курсовая работа [1,1 M], добавлен 04.02.2011Структурная диаграмма программного модуля. Нахождение суммы элементов, находящихся над главной диагональю. Реализация программного модуля: код программы; описание использованных операторов и функций. Особенности тестирования программного модуля.
курсовая работа [146,6 K], добавлен 01.09.2010Особенности точных и итерационных методов решения нелинейных уравнений. Последовательность процесса нахождения корня уравнения. Разработка программы для проверки решения нелинейных функций с помощью метода дихотомии (половинного деления) и метода хорд.
курсовая работа [539,2 K], добавлен 15.06.2013Разработка структурной диаграммы программного модуля для целочисленного решения задачи линейного программирования с использованием симплекс-метода. Краткое описание всех уровней диаграммы с назначением всех ее блоков. Язык программирования Visual C#.
курсовая работа [874,7 K], добавлен 27.02.2013Использование повторяющегося процесса. Нахождение решения за определенное количество шагов. Применение метода хорд и метода простой итерации. Методы нахождения приближенного корня уравнения и их применение. Построение последовательного приближения.
курсовая работа [849,1 K], добавлен 15.06.2013