Метод половинного деления (Дихотомия) — КиберПедия 

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...

Метод половинного деления (Дихотомия)

2021-04-18 101
Метод половинного деления (Дихотомия) 0.00 из 5.00 0 оценок
Заказать работу

Определение 2.1.1 –  корень уравнения это число (или числа), при подстановке которого (которых) в уравнение оно обращается в ноль или тождество.

Любому методу решения нелинейного уравнения предшествует этап отделения корней.

Определение 2.1.2 – отделение корней это установление достаточно тесного промежутка (или промежутков) значений на оси Х, в котором (в которых) находится корень.

Алгоритм нахождения корней нелинейного уравнения методом половинного деления с заданной точностью e представлен на 2.1.1.

Рис. 2.1.1

 

Суть алгоритма в следующем:

– в программу, в данном случае, с именем Pol _ del с тремя формальными параметрами a, b и e, передаются значения промежутка [ a; b ], в котором обнаружен корень, и значение точности;

– вычисляется значение средней точки промежутка c =(a + b)/2;

– определяется, в какой половине промежутка функция уравнения f (x) поменяла знак, для чего вычисляется логическое выражение f (a) * f (c)<0;

– если результат вычисления логического выражения равен 1, значит функция уравнения f (x) поменяла знак в первой половине промежутка [ a; b ] и поэтому b = c, в противном случае a = c;

– процесс повторяется до тех пор, пока не выполнится условие | a - b |<= e;

– значение средней точки последнего промежутка [ a; b ] и есть корень уравнения с заданной точностью e.

На рис. 2.1.2 приведён пример решения нелинейного уравнения

2 x 3 + x 2 -3 x +2=0.

 

 

Рис. 2.1.2

Начинать выполнение задания следует с создания в VBA модуля, соответствующего функции уравнения задания, в данном случае это:

Function nel_ur_1(x)

nel_ur_1 = 2 * x ^ 3 + x ^ 2 - 3 * x + 2

End Function

Затем в диапазоне A 5: B 25, в данной адресации, необходимо получить таблицу значений функции nel _ ur _1 от аргумента X. Построить график этой функции.

При этом начальное значение аргумента X, ячейка A 5, и начальное значение шага изменения аргумента X, ячейка B 2, подбираются таким образом, чтобы на графике чётко увидеть пересечение кривой графика функции с осью абсцисс. Это есть графическое решение заданного нелинейного уравнения.

В таблице, в столбце значений аргументов X, диапазон A 5: A 25, определить пару значений аргумента X, при которых функция, диапазон B 5: B 25, меняет знак. В данном случае это пара ячеек A 17: A 18.

Таких пар может быть несколько.

Этап отделения корней завершён.

Далее в строке 7, оформить “шапку” таблицы, как показано на рис. 2.1.2.

Заполнить первую строку таблицы:

– в ячейку E 8 записать = A 17;

– в ячейку F 8 записать = A 18;

– в ячейку G 8 записать арифметическое выражение, вычисляющее значение средней точки =(F8+E8)/2;

– в ячейке H 8 с помощью мастера функций fx вызвать модуль, соответствующий решаемому уравнению =nel_ur_1(E8);

– в ячейке I 8 с помощью мастера функций fx вызвать модуль, соответствующий решаемому уравнению =nel_ur_1(F 8);

– в ячейке J 8 с помощью мастера функций fx вызвать модуль, соответствующий решаемому уравнению =nel_ur_1(G 8);

– убедиться, что значения ячеек B 17 и H 8 совпадают;

– убедиться, что значения ячеек B 18 и I 8 совпадают;

– в ячейку F 8 записать условный оператор =ЕСЛИ(ABS (E 8- F 8)<=$ G $5;"корень ="&ТЕКСТ(G 8;"0.0000000000")&" за "& D 8&" шагов"; ABS (E 8- F 8)).

Заполнить вторую строку таблицы:

– в ячейку E 9 записать условный оператор =ЕСЛИ(H8*J8<0;E8;G8);

– в ячейку F 9 записать условный оператор =ЕСЛИ(H 8* J 8<0; G 8; F 8);

– выделить диапазон G 8: K 8 первой строки таблицы и скопировать на вторую строку таблицы;

– выделить диапазон E 9: K 9 второй строки таблицы и скопировать вниз до тех пор пока, в столбце K не появится сообщение корень = -1.7148040771 за 15 шагов (для решаемого варианта задания).

Таким образом, нелинейное уравнение 2 x 3 + x 2 -3 x +2=0 в среде Excel решено методом дихотомии и корень уравнения равен -1.7148040771.

При этом заданная точность решения e = 0.00001 достигнута за 15 итераций.

Для решения заданного уравнения в среде VBA необходимо создать модуль VBA:

 

Function Pol_del(a As Double, b As Double, e As Double)

Dim c As Double

10 c = (a + b) / 2

If nel_ur_1(a) * nel_ur_1(c) < 0 Then b = c Else a = c

If Abs(a - b) <= e Then Pol_del = Format(c, "0.0000000000") Else GoTo 10

End Function

И, например, в ячейке K 26 с помощью мастера функций fx вызвать этот модуль.

В появившемся окне Аргументы функции подставить значения ячеек E 8, F 8 и E 8, как показано на рис. 2.1.3 и, нажав кнопку OK, получить результат

-1.7148010254.

Рис. 2.1.3

Недостатком использования функции VBA является то, что функция возвращает только один параметр и определить количество итераций в данном случае невозможно.

К достоинствам использования функции VBA следует отнести то, что можно изменять значение точности вычислений без построения достаточно объёмной таблицы.


Поделиться с друзьями:

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...

Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.009 с.