- •ВВЕДЕНИЕ
- •1 ЧИСЛЕННЫЕ МЕТОДЫ РЕШЕНИЯ УРАВНЕНИЙ
- •1.1 Методы отделения корней
- •1.1.1 Постановка задачи
- •1.1.2 Табличный метод отделения корней
- •1.1.3 Графический метод отделения корней
- •1.1.4 Метод интервалов отделения корней
- •1.2.2 Оценка погрешности приближенного корня
- •1.2.3 Метод половинного деления
- •1.2.3.1 Алгоритм метода половинного деления
- •1.2.4 Метод итераций
- •1.2.4.1 Алгоритм метода итераций
- •1.2.5 Метод Ньютона
- •1.2.5.1 Алгоритм метода Ньютона
- •1.2.6 Метод хорд
- •1.2.6.1 Алгоритм метода хорд
- •1.2.7 Комбинированный метод
- •1.2.7.1 Алгоритм комбинированного метода
- •1.2.8 Пример решения уравнения
- •1.2.8.1 Метод половинного деления
- •1.2.8.2 Метод итераций
- •1.2.8.3 Метод Ньютона
- •1.2.8.4 Метод хорд
- •1.2.8.5 Комбинированный метод
- •1.2.9 Уточнение корней уравнений в Excel с помощью циклической ссылки
- •1.2.9.1 Метод половинного деления
- •1.2.9.2 Метод итераций
- •1.2.9.3 Метод Ньютона
- •1.2.9.4 Метод хорд
- •1.2.9.5 Комбинированный метод
- •1.2.10 Решение уравнений средствами MathCAD
- •ПРИЛОЖЕНИЕ
22
L = Sgn(M) * 2 / Abs(M) 'определить параметр ' Начать процесс итераций
x0 = a Do
x1 = x0 - L * f(x0) d = Abs(x1 - x0) x0 = x1
Loop Until d < e
MsgBox x1, , " Корень уравнения на отрезке [" & a & ", " & b & "]" End Sub
1.2.8.3 Метод Ньютона
Function f(x) |
' вычисление функции f(x) |
f = 5 ^ x - 6 * x - 3 |
|
End Function |
|
Function f1(x) |
' производная функции f(x) |
f1 = Log(5) * 5 ^ x - 6 |
|
End Function |
|
Function f2(x) |
'вторая производная функции f(x) |
f2 = Sqr(Log(5)) * 5 ^ x
End Function
Sub Newton() Const e = 0.0000001
Dim a As Double, b As Double, x As Double, M1 As Double
Dim M2 As Double, dx As Double, x0 As Double, x1 As Double, p As Double a = InputBox("Введите значение а")
b = InputBox("Введите значение b")
'Найти наибольшее значение модуля второй производной M2 = f2(a)
x = a
dx = 0.01 Do
x = x + dx p = f2(x)
If Abs(p) > Abs(M2) Then M2 = p
End If
Loop Until x > b
'Найти наименьшее значение модуля производной
M1 = Abs(f1(a)) x = a
dx = 0.01
23
Do
x = x + dx
p = Abs(f1(x))
If p < M1 Then M1 = p
End If
Loop Until x > b
If Sgn(M2) = Sgn(f(a)) Then x0 = a
Else x0 = b End If
' Начать процесс итераций Do
x1 = x0 - f(x0) / f1(x0) d = Sqr(Abs(x1 - x0)) x0 = x1
Loop Until d < 2 * M1 * e / Abs(M2) If Sgn(f(a)) <> Sgn(f(b)) Then
MsgBox x1, , " Корень уравнения на отрезке [" & a & ", " & b & "]" Else
MsgBox "Метод не применим" End If
End Sub
1.2.8.4 Метод хорд
Function f(x) |
' вычисление функции f(x) |
f = 5 ^ x - 6 * x - 3 |
|
End Function |
|
Function f1(x) |
'производная функции f(x) |
f1 = Log(5) * 5 ^ x - 6 |
|
End Function |
|
Function f2(x) 'вторая производная функции f(x)
f2 = Sqr(Log(5)) * 5 ^ x End Function
Sub Hord()
Const e = 0.0000001
Dim a As Double, b As Double, x As Double, M As Double Dim M1 As Double, dx As Double, err As integer, p As Double
24
a = InputBox("Введите значение а") b = InputBox("Введите значение b")
err = 0
If Sgn(f(a)) <> Sgn(f(b)) Then
' Установить вариант сужения интервала изоляции корня
If Sgn(f1(a)) = Sgn(f2(a)) Then v = 1
Else v = 2 End If
'Найти наибольшее значение модуля производной
M = Abs(f1(a)) x = a
dx = 0.01 Do
x = x + dx
p = Abs(f1(x))
If p > M Then M = p
End If
Loop Until x > b
'Найти наименьшее значение модуля производной
M1 = Abs(f1(a)) x = a
dx = 0.01 Do
x = x + dx
p = Abs(f1(x))
If p < M1 Then M1 = p
End If
Loop Until x > b
' Цикл уточнения корня
Do
x = a - f(a) * (b - a) / (f(b) - f(a)) If v = 1 Then
d = x - a a = x Else
d = b - x b = x End If
25
Loop Until d < M1 / (M - M1) * e MsgBox x, , "Корень уравнения" Else
MsgBox "Метод не применим" End If
End Sub
1.2.8.5 Комбинированный метод
Function f(x) |
' вычисление функции f(x) |
f = 5 ^ x - 6 * x - 3 |
|
End Function |
|
Function f1(x) |
'производная функции f(x) |
f1 = Log(5) * 5 ^ x - 6 |
|
End Function |
|
Function f2(x) |
' вторая производная функции f(x) |
f2 = Sqr(Log(5)) * 5 ^ x |
|
End Function |
|
Sub Kombi()
Const e = 0.0000001
Dim a As Double, b As Double, a1 As Double, b1 As Double, x As Double Dim err As integer, p As Double
a = InputBox("Введите значение а") b = InputBox("Введите значение b")
a1 = a
b1 = b err = 0
If Sgn(f(a)) <> Sgn(f(b)) Then
' Установить вариант сужения интервала изоляции корня If Sgn(f1(a)) = Sgn(f2(a)) Then
v = 1 Else v = 2 End If Do
If v = 1 Then
a1 = a1 - (f(a1) / (f(b1) - f(a1))) * (b1 - a1) b1 = b1 - f(b1) / f1(b1)
Else