Решение уравнения с помощью методов дихотомии, хорд, Ньютона в MSExcel и в VisualBasic, страница 3

Метод хорд

точность приближения

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  не будет записан корень.

Решение уравнения методом Ньютона  в MS Excel.

Здесь также используем уже найденные промежутки, где существуют корни, и уже созданную функцию 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

User Form по решению уравнения   указанными методами

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.: Учебное пособие