|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Метод половинного деления. Пусть дано уравнение f(x) = 0, где функция f непрерывна на отрезке [a, b] и на концах отрезка имеет разные знакиПусть дано уравнение f(x) = 0, где функция f непрерывна на отрезке [a, b] и на концах отрезка имеет разные знаки, т.е. f(a)*f(b)<0. Если непрерывная функция на отрезке меняет знак, то она на этом отрезке имеет, по крайней мере, один корень. Пусть [a, b] выделен так, что на нем имеется только один корень уравнения. Найдем этот корень методом половинного деления. Для этого разделим отрезок [a, b] пополам и присвоим x1 = (a+b)/2. Если f(x) = 0, то х1 - корень уравнения. Если f(x) ¹ 0, то выбираем тот из отрезков [a, x1] или [x1, b], на концах которого f(x) имеет противоположные знаки. Полученный отрезок снова делим пополам и проводим те же рассуждения. Процесс продолжаем до тех пор, пока длина отрезка, на концах которого функция имеет противоположные знаки, не станет меньше заданной точности e. Как только длина отрезка станет меньше e, любую точку отрезка можно с точностью e принять за корень уравнения f(x) = 0. В программе используется цикл с условием, поскольку есть две причины выхода из цикла: 1). когда f(x) = 0 или f(x) £ e; 2). |x1 - x2| < e. Задача. Найти корень уравнения на отрезке [1; 2] с точностью e =10-4 методом половинного деления. Const a = 1; b = 2; eps = 1e-4; var x1, x2, x, y1, y2: real; f: boolean; begin x1:= a; x2:= b; f:= true; while f do if abs (x1 - x2) > eps then begin y1:= cos(2/x1) - 2*sin(1/x1) + 1/x1; x:= (x1 + x2)/2; y2:= cos(2/x) - 2*sin(1/x) + 1/x; if abs(y2) > eps then if y1*y2 > 0 then x1:= x else x2:= x else f:= false end else f:= false; writeln (‘корень уравнения ’,x) end. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.002 сек.) |