Заключение
В данной работе была осуществлена разработка программы, которая реализует моделирование и графическое представление метода дихотомии и простых итераций.
Исходные данные: отрезок, точность, начальное приближение.
Было проведено математическое описание задачи, была разработана блок-схема программы с описанием, приведен текст программы, составлена пояснительная записка, дана инструкция пользователю.
Список используемой литературы
Шипачев В. С. Высшая математика. Москва «Высшая школа», 2000.
Лабораторные работы по информатике за 2011 год.
СТО СГАУ 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.