Вычислить приближенное значение корня уравнения методом простых итераций - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д