Нахождение всех действительных корней алгебраического многочлена методом деления отрезка пополам (бисекции)
Дипломная работа - Математика и статистика
Другие дипломы по предмету Математика и статистика
кнопок 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