На заданном отрезке найти все корни уравнения 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.
- В конце программы выводится сообщение о количестве найденных корней или об их отсутствии.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д