Автор работы: Пользователь скрыл имя, 06 Ноября 2012 в 21:35, контрольная работа
Алгоритм: 1)  Найдем середину отрезка [a; b]: c=(a+b)/2;        
2)    Вычислим  значения функции в точках a и  c и найдем произведение полученных  значений: d=f(c)ּf(a);
3)    Если d>0, то теперь точкой a станет c: a=c;
Если d<0, то точкой b станет c: b=c;
Метод половинного деления.
Вычислить корни уравнения
с точностью e=10-4
Определим интервалы изоляции корней.
| x | 0 | 1 | 2 | 3 | 4 | 
| f(x) | - | - | - | + | + | 
Найден отрезок, на концах которого функция имеет разные знаки: [2,3]. a и b границы этого интервала. a=2, b=3, c-середина интервала. c=(a+b)/2. Дальнейшие вычисления оформляем в виде таблицы:
| a | b | c | f(a) | f(b) | f(с) | |b-a|<2E | 
| 2 | 3 | 2,5 | -8 | 13 | 0,625 | ЛОЖЬ | 
| 2 | 2,5 | 2,25 | -8 | 0,625 | -4,109375 | ЛОЖЬ | 
| 2,25 | 2,5 | 2,375 | -4,109375 | 0,625 | -1,85351563 | ЛОЖЬ | 
| 2,375 | 2,5 | 2,4375 | -1,8535156 | 0,625 | -0,64282227 | ЛОЖЬ | 
| 2,4375 | 2,5 | 2,46875 | -0,6428222 | 0,625 | -0,0161438 | ЛОЖЬ | 
| 2,46875 | 2,5 | 2,484375 | -0,0161438 | 0,625 | 0,30260849 | ЛОЖЬ | 
| 2,46875 | 2,484375 | 2,4765625 | -0,0161438 | 0,30260849 | 0,14277887 | ЛОЖЬ | 
| 2,46875 | 2,4765625 | 2,47265625 | -0,0161438 | 0,14277887 | 0,06320434 | ЛОЖЬ | 
| 2,46875 | 2,47265625 | 2,47070312 | -0,0161438 | 0,06320434 | 0,023502 | ЛОЖЬ | 
| 2,46875 | 2,47070312 | 2,46972656 | -0,0161438 | 0,023502 | 0,00367203 | ЛОЖЬ | 
| 2,46875 | 2,46972656 | 2,46923828 | -0,0161438 | 0,00367203 | -0,00623765 | ЛОЖЬ | 
| 2,46923828 | 2,46972656 | 2,46948242 | -0,0062376 | 0,00367203 | -0,00128325 | ЛОЖЬ | 
| 2,46948242 | 2,46972656 | 2,46960449 | -0,0012832 | 0,00367203 | 0,00119428 | ЛОЖЬ | 
| 2,469482422 | 2,469604492 | 2,469543457 | -0,0012832 | 0,00119428 | -4,4511E-05 | ЛОЖЬ | 
| 2,469543457 | 2,469604492 | 2,469573975 | -4,4511E-0 | 0,00119428 | 0,00057487 | ИСТИНА | 
Ответ: x 2,469573975
Алгоритм: 1) Найдем середину отрезка [a; b]: c=(a+b)/2;
2)    Вычислим 
значения функции в точках a и 
c и найдем произведение 
3) Если d>0, то теперь точкой a станет c: a=c;
Если d<0, то точкой b станет c: b=c;
4)    Вычислим 
разность a и b, сравним ее с 
точностью ε: если |a-b|> ε, то 
идем в пункт 1), если нет, 
то корень с нужной нам 
да нет
да нет
Программа
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, TeeProcs, TeEngine, Chart, Menus, StdCtrls, Math,
Series;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
MainMenu1: TMainMenu;
Chart1: TChart;
N1: TMenuItem;
N2: TMenuItem;
Series1: TLineSeries;
procedure N1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
private
{ Private declarations }
a,b:real;
eps:real;
hx:real;
k:integer;
function F(x:real):real;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.N1Click(Sender: TObject);
const
NT=100;
var
x,y:double;
i:integer;
begin
a:=StrToFloat(Edit1.Text);
b:=StrToFloat(Edit2.Text);
hx:=(a-b)/NT;
for i:=0 to NT do begin
x:=a+i*hx;
y:=F(x);
           
Series1.AddXY(x,y,'',
end;
end;
procedure TForm1.N2Click(Sender: TObject);
var
c:real;
begin
eps:=StrToFloat(Edit3.Text);
k:=0;
while(abs(b-a)>eps)do begin
inc(k);
c:=(b+a)/2;
if(F(a)*F(c)>=0)then
a:=c
else
b:=c;
end;
  Edit4.Text:=FloatToStr((b+a)/
Edit5.Text:=IntToStr(k);
end;
function TForm1.F(x:real):real;
begin
F:=power(x,3)+2*x-20;
end;
end.
Сравнивая ответы в ручном счете и в среде программирования Delphi, получили результат: х=2,46957