Отделение и уточнение корней нелинейных уравнений - Pascal
Формулировка задачи:
Сделал вроде все правильно. Но программа решения не находит. Или дело в том, что корней на участке просто нет?
Уравнение:
+5-2x-2=0
Отрезок: [-5;1]
Точность:
uses crt; function f(x:real):real; begin f:=(exp(ln(X) * 4)) + (5 * exp(ln(X) * 3))-(2*x)-2; end; procedure koren(a,b,eps:real); var c:real; begin repeat c:=(f(b)*a-f(a)*b)/(f(b)-f(a)); if f(a)*f(c) > 0 then a := c else b := c; until abs((f(b)*a-f(a)*b)/(f(b)-f(a))-c)<eps; writeLn(c:10:7); end; var a,b,x1,x2,y1,y2,h,eps:real; k:integer; begin clrscr; a:=-5; b:=1; h:=0.5; eps:=0.0001; repeat // writeLn('Vvedite tochnost v predelah ot 0 do 1 eps='); // readln(eps); until (eps >0) and (eps <1); k:=0; x1:=a; x2:=x1+h; y1:=f(x1); y2:=f(x2); while x2<b do begin y2:=f(x2); if y1*y2<0 then begin inc (k); write(k,'-i корень в интервале [',x1:4:1,';',x2:4:1,']='); koren(x1,x2,eps); end; x1:=x2; x2:=x1+h; y1:=y2; end; write('Для выхода нажмите Enter'); readln end.
Решение задачи: «Отделение и уточнение корней нелинейных уравнений»
textual
Листинг программы
uses crt; function f(x:real):real; begin f:=x*x*x*x+5*x*x*x-2*x-2; end; procedure koren(a,b,eps:real); var c:real; begin repeat c:=(f(b)*a-f(a)*b)/(f(b)-f(a)); if f(a)*f(c) > 0 then a := c else b := c; until abs((f(b)*a-f(a)*b)/(f(b)-f(a))-c)<eps; writeLn(c:10:7); end; var a,b,x,h,eps:real; k:integer; begin clrscr; a:=-5; b:=1; h:=0.1; eps:=0.0001; k:=0; x:=a; while x<b+h do begin if f(x)*f(x+h)<0 then begin inc (k); write(k,'-i корень в интервале [',x:4:1,';',x+h:4:1,']='); koren(x,x+h,eps); end; x:=x+h; end; write('Для выхода нажмите Enter'); readln end.
Объяснение кода листинга программы
- В начале кода подключается библиотека crt, которая обеспечивает работу с функциями ввода-вывода в режиме консоли.
- Создается функция f(x), которая вычисляет значение нелинейного уравнения xxxx + 5xxx - 2*x - 2.
- Создается процедура koren(a, b, eps), которая вычисляет корни нелинейного уравнения путем последовательного деления и проверки условия для каждого корня. Переменные a и b представляют начальные значения корней, а переменная eps задает допустимую погрешность.
- Создается переменная a, которая инициализируется значением -5.
- Создается переменная b, которая инициализируется значением 1.
- Создается переменная h, которая инициализируется значением 0.1.
- Создается переменная eps, которая инициализируется значением 0.0001.
- Создается переменная k, которая инициализируется значением 0.
- Инициализируется цикл while, который выполняется до тех пор, пока значение переменной x меньше значения b плюс h.
- Внутри цикла while проверяется условие f(x)*f(x+h)<0. Если это условие истинно, то выполняется блок begin.
- Внутри блока begin выводится значение k с префиксом
-i
, а затем вызывается функция koren(x, x+h, eps). - После завершения блока begin значение переменной x увеличивается на h.
- Цикл while повторяется до тех пор, пока значение x не станет больше значения b плюс h.
- После завершения цикла while выводится сообщение
Для выхода нажмите Enter
. - Запускается цикл чтения, который ожидает ввода пользователя до нажатия клавиши Enter.
- Введенные данные обрабатываются и сохраняются в переменных a, b, x, h и eps.
- Код завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д