Вычислить приближенное значение корня уравнения методом простых итераций - VB

Формулировка задачи:

Здравствуйте! Пытаюсь сделать лабораторную работу. Необходимо вычислить приближенное значение корня уравнения f(x)=0. Мое уравнение из задания (Ln(1+x)+3)^1/2-x. Еще надо показать результаты вычислений значения корня для заданных пяти вариантов допустимой ошибки 0,02; 0,005; 0,0002; 0,00005; 0,000002. Написать функцию, вычисляющую значение функции j(x), где j(x)=x. Вот мой код:
Private Function f(ByVal x As Single) As Single
        f = (Log(1 + x) + 3) ^ 1 / 2 - x
    End Function
    Private Sub koren(ByVal pred As Integer, _
    ByVal a As Single, ByVal b As Single, ByVal eps As Single, _
    ByRef xw As Single, ByRef it As Integer, ByRef fxw As Single, ByRef Flag As Boolean)
        Dim xn As Single, xs As Single
        Dim fxn As Single, fxs As Single
        Dim Bool As Boolean
        xn = (a + b) / 2
        it = 0
        fxn = f(xn)
        Do
            xs = xn - fxn
            fxs = f(xs)
            it = it + 1
            Bool = Abs(xs - xn) > eps Or it > pred
            fxn = fxs
        Loop Until Bool
        If it <= pred Then
            Flag = False
            xw = xs
            fxw = f(xw) - xw
        Else
            Flag = True
        End If
    End Sub
Я не знаю, правильно или нет? Посмотрите пожалуйста. Не поняла как вставить │j’(x)│< 0,5.

Код к задаче: «Вычислить приближенное значение корня уравнения методом простых итераций - VB»

textual
Option Explicit
 
Const MaxIterations As Long = 10  ' Максиальное допустимое количество итераций
 
' Целевая функция
Private Function Fx(ByVal x As Double) As Double
'    Fx = Sqrt(Log(1 + x) + 3) - x
    Fx = (Log(1 + x) + 3) ^ 0.5 - x
End Function
 
' Приближенное вычисление производной функции
Private Function DFx(ByVal x As Double) As Double
    Const h As Double = 0.01
    DFx = (Fx(x + h) - Fx(x - h)) / (2 * h)
End Function
 
' Функция G(x)
Private Function Jx(ByVal x As Double, _
                    ByVal C As Double) As Double
   Jx = x + Fx(x) / C
End Function
 
' Нахождение корня методом простой итерации
Private Function Iteration(ByVal a As Double, _
                           ByVal b As Double, _
                           ByVal eps As Double, _
                           ByRef Flag As Boolean, _
                           ByRef Iterations As Long) As Double
                           
  Dim x As Double, x1 As Double, dFa As Double, dFb As Double, C As Double
    Iterations = 0                                        ' Счетчик итераций
    x1 = (a + b) / 2                                      ' Берем середину промежутка
    dFa = DFx(a)                                          ' Значение производной в точке а
    dFb = DFx(b)                                          ' Значение производной в точке б
    If Abs(dFa) > Abs(dFb) Then C = -dFa Else C = -dFb    ' Вычислили C
    Do
        Iterations = Iterations + 1                       ' Счетчик итераций
        x = x1                                            ' Запомнили x c предыдущей итерации
        x1 = Jx(x, C)                                     ' Уточнили x
        Flag = Abs(x - x1) < eps                          ' True корень найден с заданной точностью
    Loop Until Flag Or Iterations > MaxIterations - 1     ' Конец цикла
    Iteration = x
End Function
 
Private Sub test1()
  Dim a As Double, b As Double, eps As Double, x As Double
  Dim EpsArr(), i As Long, Flag As Boolean, Iterations As Long
    a = 1
    b = 5
    eps = 0.000002
    EpsArr = Array(0.02, 0.005, 0.0002, 0.00005, 0.000002)
    For i = LBound(EpsArr()) To UBound(EpsArr())
      x = Iteration(a, b, EpsArr(i), Flag, Iterations)
        If Flag Then
          MsgBox "Eps = " & EpsArr(i) & "   " & "Итераций " & Iterations & "   " & " x= " & x & "   F(x)=" & Fx(x)
        Else
          MsgBox "За " & Iterations & " Итераций корень не найден"
      End If
    Next
End Sub

12   голосов, оценка 4.333 из 5


СОХРАНИТЬ ССЫЛКУ