РефератыИнформатикаПрПроект программного модуля для нахождения корня уравнения

Проект программного модуля для нахождения корня уравнения

Содержание


Введение. 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) принимает значения с разными знаками. Заканчиваем процесс уточнения корня, когда расстояние между очередными приближениями станет меньше заданной точности e


|xn – xn-1| < e


или когда значения функции f(x) попадут в область шума (рисунок 1), т. е.


|f(xn)| < e1.



Рисунок 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)


При заданной точности e метод состоит из таких шагов:


Вычислить 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| £e (e - заданная погрешность вычислений) или |f(x1)| < e1 (e1 – заданное значение шума), то принять в качестве решения последнее значение 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.

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Проект программного модуля для нахождения корня уравнения

Слов:1763
Символов:15940
Размер:31.13 Кб.