Использование метода половинного деления для определения корней полинома - файл n17.doc

Использование метода половинного деления для определения корней полинома
Скачать все файлы (2325.4 kb.)

Доступные файлы (18):
n1.frm
n2.frx
n3.frm
n4.frx
n5.frm
n6.frm
n7.frx
n8.scc
n9.bas
n10.exe
n11.vbp
n12.vbw
n13.frm
n14.frx
n15.frm
n16.frx
n17.doc955kb.26.02.2012 13:51скачать
n18.wxm

n17.doc



ГОУ ВПО

Уфимский государственный авиационный технический университет

Кафедра Информатики


100

1

2

3

4

5

6

7

8

9

10

11

12

90





































80





































70





































60





































50





































40





































30





































20





































10













































































Разработка в Visual Basic приложения

“Использование метода половинного деления для

определения корней полинома”


ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовой работе

по «Информатика»

наименование дисциплины


1308.301510.000ПЗ

(обозначение документа)



Группа







Фамилия, И., О.

Подпись

Дата

Оценка

ЭСиС-120










Студент

Ахметов В.Р.










Консультант

Бикмеев А.Т.










Принял















Уфа 2010 г.
Федеральное агентство по образованию

Государственное образовательное учреждение высшего профессионального образования

«УФИМСКИЙ ГОСУДАРСТВЕННЫЙ АВИАЦИОННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»

Кафедра Информатики

наименование кафедры


З А Д А Н И Е
на курсовой(ую) проект (работу) по дисциплине
«Информатика»

наименование дисциплины
Студент Группа

фамилия, имя, отчество № акад. гр.
1. Тема курсового(ой) проекта (работы)

“Использование метода половинного деления для определения корней

наименование темы

полинома аппроксимации экспериментальных данных”
2. Основное содержание: А(х)=-0.2*x^6+5*x^4 +0.5*x^3-3

Создать приложение, при помощи которого

пользователь сможет на выбранном интервале с указанной точностью найти

точку с нулевым значением А




3. Требования к оформлению:

3.1. Пояснительная записка должна быть оформлена в редакторе MS Word

в соответствии с требованиями ГОСТ 2.105-95 ЕСКД, ГОСТ 19.701-90 ЕСПД,

ЕСКД, ЕСПД, ГОСТ, др.

ГОСТ Р 7.0.5-2008, СТО УГАТУ 016 - 2007
3.2. Графическая часть должна содержать:

Схемы алгоритмов используемых математических методов.

Экранные формы реализованного интерфейса приложения.






Дата выдачи « » 20 г. Дата окончания « » 20 г.


Руководитель / Бикмеев А.Т. /

подпись Ф.И.О.

СОДЕРЖАНИЕ


Введение 5

Метод половинного деления 5

Блок-схема к методу половинного деления 7

Листинг метода половинного деления 8

Создание приложения 8

Заключение 13

Список литературы 14

Листинг программы 15


Введение



В научных исследованиях и инженерном проектировании часто приходится решать уравнение вида, где f(x) определена и непрерывна на некотором интервале.

Если f(x) представляет собой многочлен, то уравнение - алгебраическое, если в функцию входят функции типа: тригонометрических, логарифмических, показательных и т.п., то уравнение называется трансцендентным.

Решение уравнения вида разбивается на два этапа:

  1. отделение корней, т.е. отыскание достаточно малых областей, в каждой из которых заключен один и только один корень уравнения;

  2. вычисление выделенного корня с заданной точностью.

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

Для вычисления выделенного корня существует множество методов, например:


Метод половинного деления



Метод половинного деления или дихотомии (дихотомия - сопоставленность или противопоставленность двух частей целого) при нахождении корня уравнения f(x)=0 состоит в делении пополам отрезка [a; b], где находится корень. Затем анализируется изменение знака функции на половинных отрезках, и одна из границ отрезка [a; b] переносится в его середину. Переносится та граница, со стороны которой функция на половине отрезка знака не меняет. Далее процесс повторяется. Итерации прекращаются при выполнении условия: длина интервала [a; b] становится меньше заданной погрешности нахождения корня ?.

Метод половинного делеления удобно применять для грубого нахождения корня данного уравнения, он всегда сходится. Как недостаток метода можно отметить его медленную сходимость: за один шаг интервал, где находится корень, сужается всего в два раза.

Метод половинного деления реализуется в виде следующего алгоритма:

  1. на отрезке , заданном пользователем найти точку

  2. , это и есть корень уравнения.

  3. Если ,то корень лежит в одном из 2х интервалов.

  4. Если , то корень лежит в интервале .

Если нет, то корень лежит в интервале , на концах которого функция имеет разные знаки.

  1. Деление продолжпется до тех пор пока величина интервала не станет превышать некоторое достаточно малое число ?.

Блок-схема к методу половинного деления




да

нет

нет

да







Листинг метода половинного деления


Function Fn(x) As Single ‘функция заданная

Fn = -0.2 * x ^ 6 + 5 * x ^ 4 + 0.5 * x ^ 3 - 3

End Function

'метод половинного деления

Function Metod(a, b, e) As Single

a1 = a

b1 = b

F1 = Fn(a1)

Do

X1 = (a1 + b1) / 2

F2 = Fn(X1)

F3 = Fn(b1)

If F2 = 0 Then Exit Do

If F1 * F2 < 0 And F2 * F3 > 0 Then

b1 = X1

ElseIf F1 * F2 > 0 And F2 * F3 < 0 And F1 * F3 < 0 Then

a1 = X1

Else

MsgBox "На данном промежутке более одного либо ни одного корня", vbOKOnly, "Ошибка"

Exit Function

End If

Loop Until Abs(b1 - a1) <= e

Metod = X1

End Function

Создание приложения


При запуске Microsoft Visual Basic 6.0 автоматически открывается

окно с предложением создать новый проект Standard EXE. Нажимаем OK.

Начнём создание основного листа программы.

В открывшейся форме расставим объекты: Label1, Label2, Label3, Label4, Label5, Frame1, Frame2, TextBox1, TextBox2, TextBox3, PictureBox1, Command1 (Рисунок 1)


1

Спроектируем главное окно приложения как показано на рисунке 2


2

Текстовое меню создадим при помощи Menu Editor (Рисунок 3)

3

При открытии окна “О программе” появляется следующее окно (Рисунок 4)



4
При нажатии на “Визуализация”, появляется следующее окно с графическим решением полинома на заданном промежутке (Рисунок 5)



5

При нажатии на “Справка” появляется окно с кратким описанием метода половинного деления (Рисунок 6)



6
Корень отображается в PictureBox как показано на рисунке 7



7

Выполнив решение полинома в математическом пакете сравним корни (Рисунок 8, 9 , 10, 11, 12)


8



9



10



11


12

Из скриншотов видно что все действительные корни совпадают

Заключение


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

Разработанное в Visual Basic приложение находит корни полинома аппроксимации экспериментальных данных на заданных промежутках с указанной точностью с помощью метода половинного деления. Решение полинома в математическом пакете и сравнение его корней с результатами в программе показали абсолютную сходимость метода.

Список литературы


  1. ГОСТ 19.701-90 Схемы алгоритмов программ, данных и систем. М., 1992. 22 с.

  2. ГОСТ 2.105-95. Общие требования к текстовым документам. М., 1996. 31 с.

  3. http://informatic.ugatu.ac.ru – Официальный сайт кафедры информатики УГАТУ, отдел дистанционной помощи студентам по выполнению курсовых работ.

  4. Лукин С.Н. Visual Basic.Самоучитель для начинающих .- М.; “Диалог - МИФИ”, 2004.

Листинг программы


Form1:

    Private Sub Command1_Click()

    Picture1.Cls

    Picture1.Print Metod(Val(Text1), Val(Text2), Val(Text3))

    End Sub

    Private Sub Form_Load()

    Text1.Text = ""

    Text1.MaxLength = 2

    Text2.Text = ""

    Text2.MaxLength = 2

    Text3.Text = "0.0001"

    End Sub



Private Sub Form_Load()

Text1.Text = ""

Text2.Text = ""

Text3.Text = "0.0001"

End Sub
Form2:

Private Sub Label6_Click()

Unload Me

End Sub
Form3:

Private Sub Form_Activate()

Dim lGran As Integer, rGran As Integer, verh As Integer, niz As Integer ' левая граница, правая граница, верх, низ

Dim xi As Integer, yi As Integer

Cls ' очистка визуального элемента

lGran = -7

rGran = 7

verh = 500

niz = -50

Scale (lGran, verh)-(rGran, niz) ' задание собственного масштаба

Line (lGran, 0)-(rGran, 0) ' рисование оси X

Line (0, niz)-(0, verh) ' рисование оси Y

DrawStyle = 2 'стиль линии пунктир

For xi = lGran To rGran ' цикл оцифровки по X

DoEvents

CurrentX = xi + 0.1

CurrentY = 20

Print xi

Line (xi, verh)-(xi, niz) ' пунктирная линия

Next
For yi = niz To verh Step 50 ' цикл оцифровки по Y

DoEvents

If yi <> 0 Then

CurrentX = -0.1

CurrentY = yi

Print yi

Line (lGran, yi)-(rGran, yi) ' пунктирная линия

End If

Next

DrawWidth = 1

PSet (Val(Form1.Text1.Text), Fn(Val(Form1.Text1.Text))), vbGreen

qe = Val(Form1.Text3.Text)

For xx = Val(Form1.Text1.Text) To Val(Form1.Text2.Text) Step 0.001

y = -0.2 * xx ^ 6 + 5 * xx ^ 4 + 0.5 * xx ^ 3 - 3

PSet (xx, y), vbRed

Next

a1 = Val(Form1.Text1.Text)

b1 = Val(Form1.Text2.Text)

F1 = -0.2 * a1 ^ 6 + 5 * a1 ^ 4 + 0.5 * a1 ^ 3 - 3

X1 = (a1 + b1) / 2

DrawWidth = 2

Line (X1, 0 - 50)-(X1, 0 + 500), vbGreen

Do

DrawWidth = 2

F2 = -0.2 * X1 ^ 6 + 5 * X1 ^ 4 + 0.5 * X1 ^ 3 - 3

If F1 * F2 < 0 Then

b1 = X1

X1 = (a1 + b1) / 2

Line (X1, 0 - 50)-(X1, 0 + 500), vbGreen

Else

a1 = X1

F1 = F2

X1 = (a1 + b1) / 2

Line (X1, 0 - 50)-(X1, 0 + 500), vbGreen

DrawWidth = 2

End If

Loop Until Abs(b1 - a1) <= Val(Form1.Text3.Text)

DrawWidth = 2

Me.DrawWidth = 5

PSet (X1, 0), vbBlack

End Sub
frmAbout:

Private Sub Form_Load()

Dim s As String

s = "УФИМСКИЙ ГОСУДАРСТВЕННЫЙ АВИАЦИОННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ" & vbCrLf & vbCrLf

s = s & "Кафедра Информатики" & vbCrLf & vbCrLf

s = s & "Автор программы студент группы ЭСиС-120" & vbCrLf

s = s & "Ахметов В.Р." & vbCrLf & vbCrLf

s = s & "Уфа 2010"

Label1.Caption = s

s = ""

End Sub
Private Sub cmdOK_Click()

Unload Me

End Sub
MDIForm1:

Private Sub about_Click()

frmAbout.Show

End Sub
Private Sub exit_Click()

End

End Sub
Private Sub help_Click()

Form2.Show

End Sub
Private Sub MDIForm_Load()

Form1.Width = 8500

Form1.Height = 2075

End Sub
Private Sub solve_Click()

Form1.Picture1.Cls

Form1.Picture1.Print Metod(Val(Form1.Text1), Val(Form1.Text2), Val(Form1.Text3))

End Sub
Private Sub visual_Click()
Form3.Show

End Sub

Module1:

Function Fn(x) As Single Функция заданная

Fn = -0.2 * x ^ 6 + 5 * x ^ 4 + 0.5 * x ^ 3 - 3

End Function

'метод половинного деления

Function Metod(a, b, e) As Single

a1 = a

b1 = b

F1 = Fn(a1)

Do

X1 = (a1 + b1) / 2

F2 = Fn(X1)

If F2 = 0 Then Exit Do

If F1 * F2 < 0 Then

b1 = X1

Else

a1 = X1

End If

Loop Until Abs(b1 - a1) <= e

Metod = X1

End Function



Учебный текст
© perviydoc.ru
При копировании укажите ссылку.
обратиться к администрации