Отделение и уточнение корней нелинейных уравнений. Метод половинного деления(Проб) - Pascal ABC
Формулировка задачи:
Помогите исправить ошибку, пожалуйста.
Определение и уточнение корней нелинейных уравнений.
Уравнение: x3 + 3x2 - 8x - 3 = 0
Интервал: [-5; 3]
Точность: 10-3
Программа:
Листинг программы
- Program laba2;
- function f(x:real):real;
- begin
- f:=power(x,3)+3*sqr(x)-8*x-3;
- end;
- var
- a,b,eps,x,x0:Real;
- i:real;
- begin
- Write(' Левая граница интервала:'); Readln(a);
- write(' Правая граница интервала:'); Readln(b);
- Write(' точность:');Readln(eps);
- repeat
- i:=i+1;
- x:=(a+b)/2;
- if f(a)*f(x0)<0 then b:=x
- else a:=x;
- until abs(f(x-x0))>eps;
- writeln('x=',x:3:3,' f(x)=',f(x):4:4);
- Writeln('Количество итераций:',i );
- readln();
- end.
Решение задачи: «Отделение и уточнение корней нелинейных уравнений. Метод половинного деления(Проб)»
textual
Листинг программы
- const a=-5;
- b=3;
- eps=0.0001;
- function f(x:real):real;
- begin
- f:=power(x,3)+3*sqr(x)-8*x-3;
- end;
- function Bisec(xn,xk:real):real; //функция уточнения корня методом бисекции
- var x,c:real;
- begin
- repeat
- c:=(xn+xk)/2;
- if F(xn)*F(xk)<0 then xk:=c
- else xn:=c;
- until xk-xn<eps;
- Bisec:=(xn+xk)/2;
- end;
- var x,dx,x11,x12:real;
- i:integer;
- begin
- dx:=0.1; //идем по интервалу с шагом 0.1
- x:=a;
- i:=0;
- while x<=b do
- begin
- x11:=x;
- x12:=x+dx;
- if F(x11)*F(x12)<0 then //если знаки функции разные на концах отрезка
- begin
- i:=i+1;
- writeln('X',i,'=',Bisec(x11,x12):8:5);//уточняем корень
- end;
- x:=x+dx;
- end;
- end.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д