Вычислить приближенное значение корня уравнения методом простых итераций - 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. Вот мой код:
Я не знаю, правильно или нет? Посмотрите пожалуйста. Не поняла как вставить │j’(x)│< 0,5.

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

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
Похожие ответы