Метод хорд |
|||||
точность приближения |
0,0001 |
||||
a |
b |
f(a) |
f(b) |
xi |
|
-1,3 |
-1,2 |
-0,40576 |
0,570726 |
-1,258446681 |
0,041553319 |
-1,3 |
-1,25845 |
-0,40576 |
0,015345318 |
-1,259960894 |
0,040039106 |
-1,3 |
-1,25996 |
-0,40576 |
0,000386708 |
-1,259999016 |
Корень найден и равен-1,260 |
1,5 |
1,6 |
0,022356 |
-0,182754 |
1,510899517 |
0,010899517 |
1,5 |
1,5109 |
0,022356 |
-0,001991736 |
1,510007896 |
0,010007896 |
1,5 |
1,510008 |
0,022356 |
-1,74977E-05 |
1,510000069 |
Корень найден и равен1,510 |
2,3 |
2,4 |
-0,02812 |
0,293166 |
2,308753463 |
0,008753463 |
2,308753463 |
2,4 |
-0,00355 |
0,293166 |
2,309846173 |
0,001092711 |
2,309846173 |
2,4 |
-0,00044 |
0,293166 |
2,309981041 |
0,000134868 |
2,309981041 |
2,4 |
-5,4E-05 |
0,293166 |
2,309997664 |
Корень найден и равен2,310 |
В А3 и В3 вводим промежуток на котором имеется корень.
B1=0.001
C3 =fur(A3)
D3 =fur(B3)
E3 =A3-((B3-A3)*C3)/(D3-C3)
A4 =ЕСЛИ(fur(A3)*fur(E3)<=0;A3;E3)
B4 ==ЕСЛИ(fur(A3)*fur(E3)<=0;E3;B3)
C4 = fur(A4)
D4 =fur(B4)
E4 =A4-((B4-A4)*fur(A4))/(fur(B4)-fur(A4))
F4 =ЕСЛИ(ИЛИ(ABS(E44-A44)<=$B$2;ABS(B44-E44)<=$B$2);ЕСЛИ(ABS(E44-A44)<=$B$2;"Корень найден и равен"&ТЕКСТ(A44;"0,000");"Корень найден и равен"&ТЕКСТ(B44;"0,000"));ABS(E44-A44))
Выделяем для автозаполнения блок A4:F4 и выполняем его до тех пор пока в столбце F не будет записан корень.
Здесь также используем уже найденные промежутки, где существуют корни, и уже созданную функцию fur(x)
|
Метод Ньютона |
|||
точность нахождения корней |
0.0001 |
|||
xi |
fur(xi) |
fpr(xi) |
xi+1 |
|
-1,3 |
-0,40576 |
10,4009 |
-1,260987607 |
0,039012393 |
-1,26098761 |
-0,00977 |
9,901426 |
-1,260000625 |
0,000986982 |
-1,26000062 |
-6,2E-06 |
9,888908 |
-1,26 |
Корень найден и равен-1,260 |
2,3 |
-0,02812 |
2,7689 |
2,310157102 |
0,010157102 |
2,3101571 |
0,000449 |
2,857373 |
2,310000038 |
0,000157064 |
2,31000004 |
1,08E-07 |
2,856 |
2,31 |
Корень найден и равен2,310 |
1,5 |
0,022356 |
-2,2551 |
1,509913529 |
0,009913529 |
1,50991353 |
0,000192 |
-2,21634 |
1,509999993 |
Корень найден и равен1,510 |
Создадим функцию для производной:
Function fpr(x)
fpr = 3 * x ^ 2 – 1,7* x – 0,4317
End Function
В3 =fur(A3)
C3 =fpr(A3)
D3 =A3-B3/C3
E3 =ЕСЛИ(ABS(D3-A3)<=$B$1;"Корень найден и равен"&ТЕКСТ(A3;"0,000");ABS(D3-A3))
A4 =D3
Далее автозаполнение A4:E4
Private Sub CommandButton1_Click()
Dim a As Double, b As Double, eps As Double, x As Double
If IsNumeric(TxtA) And IsNumeric(TxtB) And IsNumeric(TxtEps) Then
a = CDbl(Txt1)
b = CDbl(Txt2)
eps = CDbl(Txt3)
If OptD = True Then
LblRez.Caption = "c помощью метода дихотомии х="
x = dihot(a, b, eps)
End If
If OptH = True Then
LblRez.Caption = "c помощью метода хорд х="
x = hord(a, b, eps)
End If
If OptN = True Then
LblRez.Caption = "c помощью метода Ньютона х="
x = newton(a, b, eps)
End If
Else
MsgBox ("Введите A,B,Eps!")
TxtRez = x
End Sub
Private Sub CommandExit_Click()
Unload Me
End Sub
Создадим в новом модуле следующие функции:
Function dihot(a, b, eps)
Dim с As Double
Do While Abs(b - a) > eps
c = (a + b) / 2
If fur(a) * fur(c) <= 0 Then b = с Else a = с
Loop
dihot = c
End Function
Function hord(a, b, eps)
Dim x As Double
While Abs(b - a) > eps
x = a - ((b - a) * fur(a)) / (fur(b) - fur(a))
If fur(a) * fur(x) < 0 Then b = x Else a = x
Wend
hord = x
End Function
Function newton(a, b, eps)
Dim x1 As Double, x As Double
If fur(a) * fpr2(x) < 0 Then x = a Else x = b
Do
x1 = x
x = x - fur(x1) / fpr(x1)
Loop While Abs(x1 - x) > eps
newton = x
End Function
Список используемой литературы:
1.Гарнаев А.Ю. Excel, VBA, Internet в экономике и финансах. – Спб.: Бхв-Петербург, 2005
2. Федорова Е.Г. Microsoft Visual Basic 6.0.: Учебное пособие
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.