На заданном отрезке найти все корни уравнения f(x)=0 с точностью e - Free Pascal
Формулировка задачи:
на заданном отрезке найти все корни уравнения f(x)=0 с точностью e
Решение задачи: «На заданном отрезке найти все корни уравнения f(x)=0 с точностью e»
textual
Листинг программы
function F(x:real):real; begin F:=1/sin(x)-exp(ln(2)*x)+0.5; end; {нахождение корня методом бисекции} function Bisec(a,b,e:real):real; var x,c:real; begin repeat c:=(a+b)/2; if F(a)*F(c)<0 then b:=c else a:=c; until b-a<e; Bisec:=(a+b)/2; end; var x,x1,x2,dx,x11,x12,eps:real; i:integer; begin repeat writeln('Введите начало и конец отрезка'); readln(x1,x2); until x2>x1; repeat write('Введите точность 0<eps<1 eps='); readln(eps); until(eps>0)and(eps<1); dx:=0.1; x:=x1; i:=0; while x<=x2 do begin x11:=x; x12:=x+dx; if(sin(x11)*sin(x12)>0) and(F(x11)*F(x12)<0) then begin i:=i+1; writeln('X',i,'=',Bisec(x11,x12,eps):8:5); end; x:=x+dx; end; if i=0 then write('На данном интервале корней нет'); readln end.
Объяснение кода листинга программы
- Введенные пользователем значения функции F(x) хранятся в переменных типа real: F(x) = 1/sin(x) - exp(ln(2)*x) + 0.5
- Функция Bisec(a, b, e) используется для нахождения корня методом бисекции. Она принимает на вход значения a и b, обозначающие начало и конец интервала, в котором ищется корень, а также точность e.
- Логика работы функции Bisec следующая:
- Если значения функций F(a) и F(c) имеют разные знаки, то новое значение интервала равно половине старого интервала.
- Если значения функций F(a) и F(c) имеют одинаковый знак, то новое значение интервала равно середине старого интервала.
- Этот процесс продолжается до тех пор, пока новое интервал не станет меньше заданной точности e.
- В основной программе введены следующие переменные:
- x1, x2 - начало и конец интервала, в котором ищется корень;
- eps - заданная точность;
- dx - шаг интервала;
- x - текущее значение интервала;
- i - счетчик найденных корней;
- x11, x12 - ближайшие точки интервала, значение функции в которых проверяется на наличие корня.
- В цикле while происходит перебор значений интервала от x1 до x2 с шагом dx.
- Для каждой пары соседних точек интервала проверяется условие (sin(x11)sin(x12)>0) and(F(x11)F(x12)<0), которое означает, что точка x11 является левым корнем, а точка x12 - правым корнем.
- Если это условие выполняется, то значение интервала заменяется на середину между x11 и x12, а счетчик i увеличивается на 1.
- В конце программы выводится сообщение о количестве найденных корней или об их отсутствии.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д