Метод половинного деления

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

Вложенные файлы: 1 файл

Половинное деление.docx

— 56.56 Кб (Скачать файл)

Метод половинного  деления.

Вычислить корни уравнения 

с точностью e=10-4

  1. Ручной счет

Определим интервалы  изоляции корней.

 

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. Блок- схема.

Алгоритм: 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;

4)    Вычислим  разность a и b, сравним ее с  точностью ε: если |a-b|> ε, то  идем в пункт 1), если нет,  то корень с нужной нам точностью  найден, и он равен: x=(a+b)/2;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 







 


 

      да         нет



 

 


 



 

            да         нет



 

 



 


 



 


 

 

 

  1. Расчет  в среде программирования Delphi.

Программа

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,'',clTeeColor);

       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)/2);

  Edit5.Text:=IntToStr(k);

end;

function TForm1.F(x:real):real;

begin

    F:=power(x,3)+2*x-20;

end;

end.

 

  1. Листинг. Результат расчета


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Сравнивая ответы в  ручном счете и в среде программирования Delphi, получили результат: х=2,46957


Информация о работе Метод половинного деления