Автор работы: Пользователь скрыл имя, 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