Function nel_ur_1D(x)
nel_ur_1D = 2 * 3 * x ^ 2 + 2 * x - 3
End Function
Заполнить вторую строку таблицы:
– в ячейку E32записать арифметическое выражение, соответствующее формуле 2.2.1, =E31-F31/G31;
– выделить диапазон F31:G31 первой строки таблицы и скопировать на вторую строку таблицы;
– в ячейку H32 записать условный оператор =ЕСЛИ(ABS(E31-E32)<=$I$30;"Корень ="&ТЕКСТ(E32;"0,0000000000")&" за "&D32&" шагов";ABS(E31-E32)).
– выделить диапазон E32:H32 второй строки таблицы и скопировать вниз до тех пор, пока в столбце H не появится сообщение корень = -1.7148059167 за 4 шагов (для решаемого варианта задания).
Таким образом, нелинейное уравнение 2x3+x2-3x+2=0в среде Excel решено методом Ньютона и корень уравнения равен -1.7148059167.
При этом заданная точность решенияe = 0.00001 достигнута за 4 итерации.
Для решения заданного уравнения в среде VBA необходимо создать модуль VBA:
Function Newton(a As Double, e As Double)
x = a
x1 = x - nel_ur_1(x) / nel_ur_1D(x)
While Abs(x - x1) > e
x = x1
x1 = x - nel_ur_1(x) / nel_ur_1D(x)
Wend
Newton = Format(x1, "0.0000000000")
End Function
И, например, в ячейке J35 с помощью мастера функций fx вызвать этот модуль.
В появившемся окне Аргументы функции подставить значения ячеек E31 и I30, как показано на рис. 2.2.3 и, нажав кнопку OK, получить результат
-1.7148010254.
Рис. 2.2.3
Как и при реализации метода дихотомии в разделе 2.2 недостатком использования функции VBA является то, что функция возвращает только один параметр и определить количество итераций в данном случае невозможно.
К достоинствам использования функции VBA также относится то, что можно изменять значение точности вычислений без построения в данном случае таблицы несколько меньшего объёма, чем при использовании метода дихотомии.
Метод хорд
С особенностями решения нелинейных уравнений методом хорд можно ознакомиться в [3].
В настоящем пособии рассмотрено решение нелинейного уравнения в среде VBA.
Для решения заданного уравнения в среде VBA необходимо создать модуль VBA:
Public Function Horda(a As Double, b As Double, delta As Double)
Dim c1 As Double, c2 As Double, Fa As Double, Fb As Double, Fc As Double
Fa = nel_ur_1(a)
Fb = nel_ur_1(b)
If Fa * Fb > 0 Then
MsgBox ("Интервал [a, b] выбран неправильно")
Exit Function
End If
Do
c2 = c1
c1 = a - (b - a) / (Fb - Fa) * Fa
Fc = nel_ur_1(c)
If Fc * Fa > 0 Then b = c1: Fb = Fc Else a = c1: Fa = Fc
Loop Until Abs(c1 - c2) > delta
Horda = Format(c1, "0.0000000000")
End Function
Затем, например, в ячейке K35 с помощью мастера функций fx вызвать этот модуль.
В появившемся окне Аргументы функции подставить значения ячеек E8, F8 и G5, как показано на рис. 2.3.1 и, нажав кнопку OK, получить результат
-1.7138047138.
Рис. 2.3.1
Как и при реализации метода дихотомии в разделе 2.2 и метода Ньютона в разделе 2.3 недостатком использования функции VBA является то, что функция возвращает только один параметр и определить количество итераций в данном случае невозможно.
К достоинствам использования функции VBA также относится то, что можно изменять значение точности вычислений без построения достаточно объёмной таблицы.
Дата добавления: 2020-07-18; просмотров: 445;