- •ТИПОВОЙ РАСЧЕТ
- •Приближенное решение уравнения на отрезке
- •Приближенное решение уравнения на отрезке
- •Метод деления отрезка пополам (дихотомии)
- •Метод деления отрезка пополам (дихотомии)
- •Метод деления отрезка пополам (дихотомии)
- •Вариант-образец.
- •Состав данных
- •Текст программы
- •Текст программы
- •Текст программы
- •Текст программы
- •Результаты выполнения программы
- •Приближенное вычисление корня на отрезке - метод подбора параметра (Excel)
ТИПОВОЙ РАСЧЕТ
Задача 1.7. Приближенное вычисление корня уравнения на отрезке [a,b] методом деления отрезка пополам. Типовой расчет. Часть 1
1
Приближенное решение уравнения на отрезке
Известно, что уравнение
F(x)=0 (*)
на отрезке [A,B] имеет ровно один корень.
Требуется найти приближенное значение корня с точностью :
|x*-xпр|< ,
где x* - точное значение корня, xпр – приближенное значение корня.
2
Приближенное решение уравнения на отрезке
y=F(x)
A |
x* |
B |
x |
|
|
|
|
|
|
|
|
|
|
|
Если уравнение (*) имеет на отрезке [A,B] ровно один корень, то F(A)*F(B) 0.
3
Метод деления отрезка пополам (дихотомии)
y=F(x)
A |
x=(a+b)/2 |
x* |
B |
|
||||
|
|
x |
||||||
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
x1 |
x2 |
|
x3 |
|
|
|
|
|
|
|
||||
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
Если F(x)*F(B) 0, то x* [x,B] корень надо искать на правой половине отрезка: A=x;
иначе x* [A,x] корень надо искать на левой половине отрезка: B=x.
Далее деление пополам нового отрезка. 4
Метод деления отрезка пополам (дихотомии)
i-ая итерация (цикл): вычисление xi - середины
i-го отрезка и выбор его левой или правой половины.
{xi} x* при i .
Условие продолжения цикла: B-A> .
5
Метод деления отрезка пополам (дихотомии)
|
|
|
|
|
|
начало |
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ввод A,B, |
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
x=(A+B)/2 |
|
|
|
|
|||
|
- |
|
|
|
|
|
|
|
+ |
|
|||
|
|
|
|
F(x)*F(B) 0 |
|
||||||||
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
B=x |
|
|
|
|
|
|
|
|
|
A=x |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
B-A> |
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
вывод x |
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
конец |
|
|
|
|
Алгоритм для идеального случая: на [A,B] ровно один корень.
Более надежный алгоритм учитывает ограничение на число итераций: если число итераций больше некоторого предельного значения, то цикл завершается с выводом сообщения о некорректной постановке задачи.
6
Вариант-образец.
Задание. Вычислить значение корня уравнения Sin(x)-X+2=0
на отрезке [2,3] методом деления отрезка пополам.
7
Состав данных
true, при _ продолжении _ цикла Fl false, при _ завершении _ цикла _
8
|
|
начало |
Блок-схема алгоритма |
|
|
ввод A,B, ,Np |
|
|
|
N=0 |
|
|
|
Fl=1 |
|
|
|
- |
|
|
|
Fl + |
|
|
|
N=N+1 |
|
|
|
x=(A+B)/2 |
|
|
- |
F(x)*F(B) 0 |
+ |
|
B=x |
|
A=x |
- |
- |
+ Abs(B-A)< |
+ |
N>Np |
Fl=0 |
||
|
|
Fl=0 |
вывод x |
|
|
вывод “N>Np” |
|
|
|
конец |
9 |
Текст программы
program example17; SysUtils;
Var
A,B,E,x,y: real;
Np,N: integer; Fl: boolean; begin
writeln('Input A,B,E,Np:'); read(A,B,E,Np);
if (sin(A)-A+2)*(sin(B)-B+2)>0 then begin writeln('Interval [A, B] is invalid'); readln; end
10