Вопрос № 29. Поиск корней нелинейного алгебраического уравнения методом сканирования. VBA-программа.
Пусть, дана ф-ция f(x)=0 на интервале [а; b]. Найти корни уравнения для данной функции с точностью ε = 1Е-3.
1. Найдём 1ое приближение к корню х = а и определим значение ф-ции в этой точке.
2. Прибавим постоянный шаг, равный ε = 1Е-3. Определим значение ф-ции в точке х = х + ε.
3. Если f(x)•f(х + ε)<0, то есть корень на интервале [x; х + ε]. В противном случае наращиваем шаг до тех пор, пока x>b.
Достоинство метода заключается в том, что с известной погрешностью можно найти все корни для данной ф-ции, если таковые имеются на заданном интервале.
Option Explicit
Const eps = 0.001
Dim x As Double, a As Double, b As Double, p As Integer
Function F(x As Double) As Double
F = Sin(x)
End Function
Sub skan(a As Double, b As Double, x As Double)
x = a
p = 1 'номер строки
Do
    x = x + eps
    If F(x) * F(x + eps) < 0 Then
Cells(p, 1) = "корень" & Format(x, "0.000")
p = p + 1
    End If
Loop Until x > b
End Sub
Sub My_Pr1()
Worksheets("Лист2").Activate
a = -7
b = 7
'вызов процедуры
skan a, b, x
End Sub