Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод дихотомии и простых итераций - Нестерова....docx
Скачиваний:
2
Добавлен:
14.11.2019
Размер:
294.57 Кб
Скачать

Заключение

В данной работе была осуществлена разработка программы, которая реализует моделирование и графическое представление метода дихотомии и простых итераций.

Исходные данные: отрезок, точность, начальное приближение.

Было проведено математическое описание задачи, была разработана блок-схема программы с описанием, приведен текст программы, составлена пояснительная записка, дана инструкция пользователю.

Список используемой литературы

  1. Шипачев В. С. Высшая математика. Москва «Высшая школа», 2000.

  2. Лабораторные работы по информатике за 2011 год.

  3. СТО СГАУ 02068410-004-2007. Общие требования к учебным текстовым документам. Самара 2007

Приложение а

unit Unit1;

interfac

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls,math;

type

TForm1 = class(TForm)

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Editx2: TEdit;

Editx1: TEdit;

Label4: TLabel;

Edit_e: TEdit;

mem: TMemo;

Panel1: TPanel;

Img1: TImage;

img2: TImage;

Label5: TLabel;

Label6: TLabel;

Button1: TButton;

Button2: TButton;

Button3: TButton;

Button4: TButton;

Panel2: TPanel;

Timer1: TTimer;

Button5: TButton;

Label7: TLabel;

Editx0: TEdit;

Timer2: TTimer;

procedure FormCreate(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure Timer2Timer(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

function Func (x:real):real;

function Func1(xx:real):real;

function Pro(x:real):real;

procedure setka;

procedure grafic;

procedure sbros;

end;

var

Form1: TForm1;

i,k:integer;

x1,x2,x3,x0,x4, max, h, o1, o2, e, y, d:real;

a,b:array [0..100] of real;

implementation

{$R *.dfm}

function power(Base, Exponent: Extended): Extended;

var

ex: extended;

begin

power := 0;

if (exponent <> 0)

and (frac(trunc((1 / exponent) * 1000000) / 1000000) = 0)

and (base < 0) then

begin

if round(1 / exponent) mod 2 = 0 then

exit;

ex := Exp(Exponent * Ln(-Base));

power := -ex;

end

else

begin

if Exponent = 0.0 then

power := 1.0

else if (Base = 0.0) and (Exponent > 0.0) then

power := 0.0

else if (Frac(Exponent) = 0.0) and (Abs(Exponent) <= MaxInt) then

power := IntPower(Base, Integer(Trunc(Exponent)))

else

power := Exp(Exponent * Ln(Base))

end;

end;

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

begin

func:=x*x*x-x-3;

end;

function TForm1.Func1(xx:real):real;

begin

func1:= power(xx+3,1/3);

end;

function Tform1.Pro(x:real):real ;

begin

pro:= 1/(power(sqr((x+3)),1/3));

end;

procedure TForm1.setka;

begin

img1.Canvas.Pen.Style:=psdot;

img1.Canvas.Pen.Color:=clMoneyGreen;

img2.Canvas.Pen.Style:=psdot;

img2.Canvas.Pen.Color:=clMoneyGreen;

for i:= 1 to 20 do

begin

img1.Canvas.MoveTo(round((img1.Width*i)/(20)),0);

img1.Canvas.lineto(round((img1.Width*i)/(20)), img1.Height);

img1.Canvas.TextOut(round((img1.Width*i)/(20))-8, img1.Height -15, floattostrf(x1+ (abs(x2-x1)) *i/20 ,fffixed,7,2));

img2.Canvas.MoveTo(round((img2.Width*i)/(20)),0);

img2.Canvas.lineto(round((img2.Width*i)/(20)), img2.Height);

img2.Canvas.TextOut(round((img2.Width*i)/(20))-8, img2.Height -15, floattostrf(x1+ (abs(x2-x1)) *i/20 ,fffixed,7,2));

end;

for i:= 1 to 20 do

begin

begin

img1.Canvas.MoveTo(0, round((img1.Height/(20) )*i));

img1.Canvas.LineTo(img1.Width , round((img1.Height/(20) )*i));

img1.Canvas.Pen.Color:=clMoneyGreen;

img1.Canvas.TextOut( 3, round((img1.Height/(20) )*i) -15, floattostrf(-max+ (max)*2*i/20 ,fffixed,7,1));

img2.Canvas.MoveTo(0, round((img2.Height/(20) )*i));

img2.Canvas.LineTo(img2.Width , round((img2.Height/(20) )*i));

img2.Canvas.Pen.Color:=clMoneyGreen;

img2.Canvas.TextOut( 3, round((img2.Height/(20) )*i) -15, floattostrf(-max+ (max)*2*i/20 ,fffixed,7,1));

end;

end;

img1.Canvas.Pen.Color:=clblack;

img1.Canvas.Pen.Width:=1;

img1.Canvas.MoveTo(img1.Width div 2,0);

img1.Canvas.LineTo(img1.Width div 2,img1.Height);

img1.Canvas.MoveTo(0,img1.Height div 2);

img1.Canvas.lineto(img1.Width,img1.Height div 2);

//////////////////////////////////////////////

img2.Canvas.Pen.Color:=clblack;

img2.Canvas.Pen.Width:=1;

img2.Canvas.MoveTo(img2.Width div 2,0);

img2.Canvas.LineTo(img2.Width div 2,img2.Height);

img2.Canvas.MoveTo(0,img2.Height div 2);

img2.Canvas.lineto(img2.Width,img2.Height div 2);

//////////////////////////////////////////////

end;

procedure Tform1.sbros;

begin

img1.Canvas.FillRect(rect(0,img1.Height,img1.Width,0));

img1.Canvas.Pen.Width:=1;

img2.Canvas.FillRect(rect(0,img2.Height,img2.Width,0));

img2.Canvas.Pen.Width:=1;

mem.Lines.Clear;

end;

procedure TForm1.grafic;

begin

for i := 1 to 99 do

begin

img1.Canvas.Pen.Width:=2;

img1.Canvas.Pen.Color:=clTeal;

img1.Canvas.MoveTo(round(i*img1.Width/100),img1.Height div 2 - round(b[i]*(img1.Height/(2*max))));

img1.Canvas.lineto(round((i+1)*(img1.Width/100)),img1.Height div 2 - round(b[i+1]*(img1.Height/(2*max))));

img2.Canvas.Pen.Width:=2;

img2.Canvas.Pen.Color:=clTeal;

img2.Canvas.MoveTo(round(i*img1.Width/100),img2.Height div 2 - round(b[i]*(img2.Height/(2*max))));

img2.Canvas.lineto(round((i+1)*(img2.Width/100)),img2.Height div 2 - round(b[i+1]*(img2.Height/(2*max))));

end;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

timer1.Enabled:=false;

timer2.Enabled:=false;

end;

procedure TForm1.Button4Click(Sender: TObject);

begin

close;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

x1:=strtofloat(editx1.text);

x2:=strtofloat(editx2.Text);

x0:=strtofloat(editx0.Text);

if x1 > x2 then

begin

x2 :=x1;

x1:=strtofloat(editx2.text);

end;

o1:=x1;

o2:=x2 ;

e:=strtofloat(Edit_e.Text);

i:=0;

timer1.Enabled:=true;

timer2.Enabled:=true;

x4:=x0;

end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin

img1.Canvas.Pen.Width:=4;

img1.Canvas.Pen.color:=clblue;

x3:=o1+(o2-o1)/2;

img1.Canvas.Ellipse({X1}round( (x3-x1)*img1.Width/abs(x2-x1) ), img1.Height div 2 - round(func(x3)*img1.Height/(2*max)) ,{x2}round((x3-x1)*img1.Width/abs(x2-x1) ) +2, img1.Height div 2 - round(func(x3)*(img1.Height/(2*max)))+2 );

if func(x3)*func(o1)>0 then o1:=x3 else o2:=x3;

i:=i+1;

a[i]:=x3;

if (abs(o1-o2)<=E) or (i>99) then

begin

timer1.enabled:=false;

with mem do

begin

lines.Add('Метод дихотомии. Количество итераций:') ;

lines.Add(floattostr(i));

text;

end;

end;

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

sbros;

setka;

grafic;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

if timer1.Enabled=false then

Timer1.Enabled:=true

else

Timer1.Enabled:=false;

end;

procedure TForm1.Button5Click(Sender: TObject);

begin

// x4:=func1(3)

sbros;

max:=0;

h:=0.01;

x1:=strtofloat(editx1.Text);

x2:=strtofloat(editx2.Text);

x0:=strtofloat(editx0.Text);

b[0]:=func(x1);

for i:= 1 to 100 do

begin

b[i]:=func(x1+((x2-x1)/100)*i);

if max<abs(b[i]) then max:=abs(b[i]);

end;

setka;

i:=0;

k:=0;

grafic;

end;

procedure TForm1.Timer2Timer(Sender: TObject);

begin

img2.Canvas.Pen.Width:=4;

img2.Canvas.Pen.color:=clblue;

img2.Canvas.Ellipse({X1}round( (x4-x1)*img1.Width/abs(x2-x1) ), img1.Height div 2 - round(func(x4)*img1.Height/(2*max)) ,{x2}round((x4-x1)*img1.Width/abs(x2-x1) ) +2, img1.Height div 2 - round(func(x4)*(img1.Height/(2*max)))+2 );

K:=k+1;

{if pro(4)<1 then

begin }

y:=func1(x4) ;

d:=abs(y-x4);

x4:=y;

//end;

if (d<=e) or (x4>=x2) then

begin

timer2.Enabled:=false;

with mem do

begin

lines.Add('Метод простых итераций. Количество итераций:') ;

lines.Add(floattostr(k));

text;

end;

end;

end;

end.