Нахождение всех действительных корней алгебраического многочлена методом деления отрезка пополам (бисекции)

Дипломная работа - Математика и статистика

Другие дипломы по предмету Математика и статистика

кнопок F(X), F”(X), F(X)ВВОД КОЭФФИЦИЕНТОВВыводит на экран окно ввода коэффициентовГРАФИКВыводит график функцииПОИСК КОРНЕЙОтображает окно, управляющее поиском корнейО ПРОГРАММЕВыводит окно О программеВЫХОДЗавершает работу програмы, предварительнозадавая вопрос о сохранении изменений

Ввод коэффициентов осуществляется следующим образом: в появившемся окне имеются 2 поля одно для указания степени, другое для ввода собственно коэффициента. Если Вы уже вводили некоторую функцию, то для ее удаления нажмите кнопку “очистить”, для запоминания коэффициента нажмите “Ок”, для завершеня ввода “завершить”.

 

Поиск корней упрощен до предела. Вам достаточно указать неоюходимую точность и выбрать метод поиска: бисекционый или комбинированный.

 

6.5. Исходный текст программы

 

UNIT1

Dim curcell As Range

Dim ma As Double

Dim Ao As Double

 

Public Function F(x As Variant)

F = (x ^ 20 * Range("a20").Value) + (x ^ 19 * Range("a19").Value) + (x ^ 18 * Range("a18").Value) + (x ^ 17 * Range("a17").Value) + (x ^ 16 * Range("a16").Value) + (x ^ 15 * Range("a15").Value) + (x ^ 14 * Range("a14").Value) + (x ^ 13 * Range("a13").Value) + (x ^ 12 * Range("a12").Value) + (x ^ 11 * Range("a11").Value) + (x ^ 10 * Range("a10").Value) + (x ^ 9 * Range("a9").Value) + (x ^ 8 * Range("a8").Value) + (x ^ 7 * Range("a7").Value) + (x ^ 6 * Range("a6").Value) + (x ^ 5 * Range("a5").Value) + (x ^ 4 * Range("a4").Value) + (x ^ 3 * Range("a3").Value) + (x ^ 2 * Range("a2").Value) + (x * Range("a1").Value) + Range("a21").Value

End Function

 

Public Function F1(x As Variant)

F1 = (x ^ 20 * Range("j20").Value) + (x ^ 19 * Range("j19").Value) + (x ^ 18 * Range("j18").Value) + (x ^ 17 * Range("j17").Value) + (x ^ 16 * Range("j16").Value) + (x ^ 15 * Range("j15").Value) + (x ^ 14 * Range("j14").Value) + (x ^ 13 * Range("j13").Value) + (x ^ 12 * Range("j12").Value) + (x ^ 11 * Range("j11").Value) + (x ^ 10 * Range("j10").Value) + (x ^ 9 * Range("j9").Value) + (x ^ 8 * Range("j8").Value) + (x ^ 7 * Range("j7").Value) + (x ^ 6 * Range("j6").Value) + (x ^ 5 * Range("j5").Value) + (x ^ 4 * Range("j4").Value) + (x ^ 3 * Range("j3").Value) + (x ^ 2 * Range("j2").Value) + (x * Range("j1").Value) + Range("j21").Value

End Function

 

Public Function F2(x As Variant)

F2 = (x ^ 20 * Range("m20").Value) + (x ^ 19 * Range("m19").Value) + (x ^ 18 * Range("m18").Value) + (x ^ 17 * Range("m17").Value) + (x ^ 16 * Range("m16").Value) + (x ^ 15 * Range("m15").Value) + (x ^ 14 * Range("m14").Value) + (x ^ 13 * Range("m13").Value) + (x ^ 12 * Range("m12").Value) + (x ^ 11 * Range("m11").Value) + (x ^ 10 * Range("m10").Value) + (x ^ 9 * Range("m9").Value) + (x ^ 8 * Range("m8").Value) + (x ^ 7 * Range("m7").Value) + (x ^ 6 * Range("m6").Value) + (x ^ 5 * Range("m5").Value) + (x ^ 4 * Range("m4").Value) + (x ^ 3 * Range("m3").Value) + (x ^ 2 * Range("m2").Value) + (x * Range("m1").Value) + Range("m21").Value

End Function

 

Public Sub Gra()

Sheets("Лист1").Select

Range("e1").Select

For i = -10 To 10

ActiveCell.Value = F(i)

ActiveCell.Cells(2).Select

Next i

End Sub

 

 

Public Function DetectBorders()

Функция определения границ действительных корней

ma = 0

For Each curcell In Range("Koeffs")

maThenma=curcell.Value"> If curcell.Value > ma Then ma = curcell.Value

0ThenAo=curcell.Value"> If curcell.Value <> 0 Then Ao = curcell.Value

Next curcell

DetectBorders = 1 + (ma * Ao)

End Function

 

 

 

UNIT2

Sub auto_open()

Sheets("Лист1").Select

Form_Main.Show

End Sub

 

 

FORM_ABOUT

Private Sub CommandButton1_Click()

Form_About.Hide

End Sub

 

FORM_KOEFF

Private Sub CommandButton1_Click()

ko = TextBox1.Value

st = TextBox2.Value

 

Select Case st

Case 0

Range("A21").Value = ko

Case 1

Range("A1") = ko

Case 2

Range("A2") = ko

Case 3

Range("A3") = ko

Case 4

Range("A4") = ko

Case 5

Range("A5") = ko

Case 6

Range("A6") = ko

Case 7

Range("A7") = ko

Case 8

Range("A8") = ko

Case 9

Range("A9") = ko

Case 10

Range("A10") = ko

Case 11

Range("A11") = ko

Case 12

Range("A12") = ko

Case 13

Range("A13") = ko

Case 14

Range("A14") = ko

Case 15

Range("A15") = ko

Case 16

Range("A16") = ko

Case 17

Range("A17") = ko

Case 18

Range("A18") = ko

Case 19

Range("A19") = ko

Case 20

Range("A20") = ko

Case Else

MsgBox ("Выход за пределы допустимых значений")

st = st - 1

End Select

TextBox1.Value = 0

TextBox2.Value = st + 1

 

 

End Sub

 

Private Sub CommandButton2_Click()

Form_Koeff.Hide

End Sub

 

Private Sub CommandButton3_Click()

Range("a1").Value = 0

Range("a2").Value = 0

Range("a3").Value = 0

Range("a4").Value = 0

Range("a5").Value = 0

Range("a6").Value = 0

Range("a7").Value = 0

Range("a8").Value = 0

Range("a9").Value = 0

Range("a10").Value = 0

Range("a11").Value = 0

Range("a12").Value = 0

Range("a13").Value = 0

Range("a14").Value = 0

Range("a15").Value = 0

Range("a16").Value = 0

Range("a17").Value = 0

Range("a18").Value = 0

Range("a19").Value = 0

Range("a20").Value = 0

Range("a21").Value = 0

 

End Sub

 

Private Sub UserForm_initialize()

st = 0

ko = 0

TextBox1.Value = ko

TextBox2.Value = st

End Sub

 

 

FORM_KORNI

Private Sub CommandButton1_Click()

ListBox1.Clear

TextBox1.Value = 0

Form_Korni.Hide

End Sub

 

Private Sub CommandButton2_Click()

Range("Toc").Value = TextBox1.Value

Call FindKor

Call Perenos

End Sub

 

Sub FindKor()

Range("Curright") = Range("Right").Value

 

Range("Curleft") = -Range("Right").Value - 0.333

Range("right").Value = DetectBorders

Range("Stepleft").Value = Range("right").Value * (-1) - 0.333

 

 

Do

nashli = False

Call MoveLe

If Sgn(F(Range("curleft").Value)) = Sgn(F(Range("curright").Value)) Then

End If

If Sgn(F(Range("curleft").Value)) <> Sgn(F(Range("curright").Value)) Then

Do

nashli = True

Range("Curcenter").Value = ((Range("curleft").Value) + (Range("curright").Value)) / 2

If Abs(F(Range("Curcenter").Value)) > Range("toc").Value Then If Sgn(F(Range("curleft").Value)) <> Sgn(F(Range("curcenter").Value)) Then Range("curright").Value = Range("curcenter").Value Else: Range("cur