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

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати


Зміст

Введення

1. Постановка завдання

1.1 Математична модель задачі

1.2 Вхідні дані

1.3 Вихідні дані

1.4 Обробка помилок.

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

2.1 Структурна діаграма програмного модуля

2.2 Розробка схеми програмного модуля та її опис

2.3 Розробка користувальницького інтерфейсу

3 Реалізація програмного модуля

3.1 Код програми

4 Тестування програмного модуля

Висновок

Список використаних джерел

Введення

Метою даної курсової роботи є розробка програмного модуля для знаходження методом хорд кореня рівняння 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) | <e 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)

При заданій точності 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) | <e 1 (e 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.

Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Курсова
37.7кб. | скачати


Схожі роботи:
Проект програмного модуля для знаходження наближеного значення нескінченної суми
Знаходження кореня нелінійного рівняння Методи рішення системи нелінійних рівнянь
Розробка програмного модуля для обчислення інтеграла
Розробка універсального програмного модуля УПМ для РЕУ
Розробка програмного забезпечення для пошуку коренів біквадратні рівняння
Нелінійне рівняння і інтервал ізоляції кореня
Розробка програмного модуля
Розробка модуля перевірки діапазону вихідних даних і знаходження номера першого символу в рядку
Порядок розробки програмного модуля Атестація програмних засобів
© Усі права захищені
написати до нас