Вычислить приближенное значение корня уравнения методом простых итераций - 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. Вот мой код:
Листинг программы
  1. Private Function f(ByVal x As Single) As Single
  2. f = (Log(1 + x) + 3) ^ 1 / 2 - x
  3. End Function
  4. Private Sub koren(ByVal pred As Integer, _
  5. ByVal a As Single, ByVal b As Single, ByVal eps As Single, _
  6. ByRef xw As Single, ByRef it As Integer, ByRef fxw As Single, ByRef Flag As Boolean)
  7. Dim xn As Single, xs As Single
  8. Dim fxn As Single, fxs As Single
  9. Dim Bool As Boolean
  10. xn = (a + b) / 2
  11. it = 0
  12. fxn = f(xn)
  13. Do
  14. xs = xn - fxn
  15. fxs = f(xs)
  16. it = it + 1
  17. Bool = Abs(xs - xn) > eps Or it > pred
  18. fxn = fxs
  19. Loop Until Bool
  20. If it <= pred Then
  21. Flag = False
  22. xw = xs
  23. fxw = f(xw) - xw
  24. Else
  25. Flag = True
  26. End If
  27. End Sub
Я не знаю, правильно или нет? Посмотрите пожалуйста. Не поняла как вставить │j’(x)│< 0,5.

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

textual
Листинг программы
  1. Option Explicit
  2.  
  3. Const MaxIterations As Long = 10  ' Максиальное допустимое количество итераций
  4.  
  5. ' Целевая функция
  6. Private Function Fx(ByVal x As Double) As Double
  7. '    Fx = Sqrt(Log(1 + x) + 3) - x
  8.    Fx = (Log(1 + x) + 3) ^ 0.5 - x
  9. End Function
  10.  
  11. ' Приближенное вычисление производной функции
  12. Private Function DFx(ByVal x As Double) As Double
  13.     Const h As Double = 0.01
  14.     DFx = (Fx(x + h) - Fx(x - h)) / (2 * h)
  15. End Function
  16.  
  17. ' Функция G(x)
  18. Private Function Jx(ByVal x As Double, _
  19.                     ByVal C As Double) As Double
  20.    Jx = x + Fx(x) / C
  21. End Function
  22.  
  23. ' Нахождение корня методом простой итерации
  24. Private Function Iteration(ByVal a As Double, _
  25.                            ByVal b As Double, _
  26.                            ByVal eps As Double, _
  27.                            ByRef Flag As Boolean, _
  28.                            ByRef Iterations As Long) As Double
  29.                            
  30.   Dim x As Double, x1 As Double, dFa As Double, dFb As Double, C As Double
  31.     Iterations = 0                                        ' Счетчик итераций
  32.    x1 = (a + b) / 2                                      ' Берем середину промежутка
  33.    dFa = DFx(a)                                          ' Значение производной в точке а
  34.    dFb = DFx(b)                                          ' Значение производной в точке б
  35.    If Abs(dFa) > Abs(dFb) Then C = -dFa Else C = -dFb    ' Вычислили C
  36.    Do
  37.         Iterations = Iterations + 1                       ' Счетчик итераций
  38.        x = x1                                            ' Запомнили x c предыдущей итерации
  39.        x1 = Jx(x, C)                                     ' Уточнили x
  40.        Flag = Abs(x - x1) < eps                          ' True корень найден с заданной точностью
  41.    Loop Until Flag Or Iterations > MaxIterations - 1     ' Конец цикла
  42.    Iteration = x
  43. End Function
  44.  
  45. Private Sub test1()
  46.   Dim a As Double, b As Double, eps As Double, x As Double
  47.   Dim EpsArr(), i As Long, Flag As Boolean, Iterations As Long
  48.     a = 1
  49.     b = 5
  50.     eps = 0.000002
  51.     EpsArr = Array(0.02, 0.005, 0.0002, 0.00005, 0.000002)
  52.     For i = LBound(EpsArr()) To UBound(EpsArr())
  53.       x = Iteration(a, b, EpsArr(i), Flag, Iterations)
  54.         If Flag Then
  55.           MsgBox "Eps = " & EpsArr(i) & "   " & "Итераций " & Iterations & "   " & " x= " & x & "   F(x)=" & Fx(x)
  56.         Else
  57.           MsgBox "За " & Iterations & " Итераций корень не найден"
  58.       End If
  59.     Next
  60. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы