Автор работы: Пользователь скрыл имя, 25 Ноября 2012 в 14:39, лабораторная работа
Программа предназначена для решения задачи одномерной оптимизации (нахождение минимума и максимума функций) методом золотого сечения, нахождения корней методом половинного деления и построения графика исследованной функции.
Метод золотого сечения — метод поиска значений действительно-значной функции на заданном отрезке. В основе метода лежит принцип деления в пропорциях золотого сечения. Наиболее широко известен как метод поиска экстремума в решении задач оптимизации.
Описание программы …………………………………………стр.3
Функциональное назначение………………………………….стр.3-4
Алгоритм программы…………………………………………стр.5-8
Листинг программы…………………………………………...стр.9-12
Вызов и загрузка………………………………………………стр.12
Входные данные……………………………………………….стр.12
Выходные данные……………………………………………..стр.13-15
Министерство образования и | ||||
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования «Кузбасский государственный технический университет им.Т.Ф.Горбачева» | ||||
Кафедра прикладных информационных технологий | ||||
Дисциплина: |
Информатика | |||
Специальность: |
140404 Электроснабжение | |||
| ||||
Лабораторная работа № |
2 |
Исследование функции с
| ||
|
Выполнил студ. группы |
ЭПб-121 Института энергетики Биятто Елена | ||
Принял: |
профессор кафедры прикладных информационных технологий Ещин Евгений Константинович | |||
Кемерово 2012 |
СОДЕРЖАНИЕ
Описание программы ……………………………
Функциональное назначение……………
Алгоритм программы………………………………
Листинг программы…………………………………………...
Вызов и загрузка………………………………………………
Входные данные……………………………………………….стр.
Выходные данные………………………………………
ОПИСАНИЕ ПРОГРАММЫ
Обозначение и наименование программы: Programm2
Программное обеспечение, необходимое для функционирования программы: ОС Widows 7, Delphi7, Embarcadero Delphi;
Язык программирования: в среде программирования Delphi для записи программ используется язык программирования Delphi. Программа на Delphi представляет собой последовательность инструкций, называемыми операторами.
ФУНКЦИОНАЛЬНОЕ НАЗНАЧЕНИЕ
Программа предназначена для решения задачи одномерной оптимизации (нахождение минимума и максимума функций) методом золотого сечения, нахождения корней методом половинного деления и построения графика исследованной функции.
Метод золотого сечения — метод поиска значений действительно-значной функции на заданном отрезке. В основе метода лежит принцип деления в пропорциях золотого сечения. Наиболее широко известен как метод поиска экстремума в решении задач оптимизации.
L 1-L
X1 X4
1
L=0,618
1-L=0,382
f(2) X2=X1+0,382*(X4-X1)
f(3) X3=X1+0,618*(X4-X1)
X2 X3
X1 X4
0,618 0,618
сближаются
Рисунок 1 График функции sin(x)/х
АЛГОРИТМ ПРОГРАММЫ
Табулирование функции
Поиск максимума функции сужением интервала
нет
да
ЛИСТИНГ ПРОГРАММЫ
unit Unit11;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls, TeEngine, Series, ExtCtrls, TeeProcs, Chart,
Grids;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Chart1: TChart;
Series1: TLineSeries;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
StringGrid2: TStringGrid;
procedure N2Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure N6Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
x0,x1,xk,dx,x,y,eps, MaxY,MaxX,MinY,MinX:real;
n
implementation
{$R *.dfm}
function f(x:real):real;
begin
if X<>0 then f:=sin(X)/X;
end;
//===================
procedure Tab(Chart1:TChart; StringGrid2:TStringGrid);
var i: integer;
begin
//X0:=StrToFloat(Edit1.Text);
//X1:=StrToFloat(Edit2.Text);
//dX:=StrToFloat(Edit3.Text);
Chart1.Series[0].Clear;
X:=X0;
MaxY:=f(X); MinY:=f(X);
StringGrid2.RowCount:=trunc((
StringGrid2.Cells[0,0]:='X=';
StringGrid2.Cells[1,0]:='Y=';
i:=1;
repeat
Y:=f(X);
StringGrid2.Cells[0,i]:=
StringGrid2.Cells[1,i]:=
if Y>=MaxY then begin MaxY:=Y; MaxX:=X; end;
if Y<=MinY then begin MinY:=Y; MinX:=X; end;
Chart1.Series[0].AddXY(X,Y);
X:=X+dX; i:=i+1;
until X>X1 ;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
X0:=StrToFloat(Edit1.Text);
X1:=StrToFloat(Edit2.Text);
dX:=StrToFloat(Edit3.Text);
eps:=StrToFloat(Edit4.Text);
n:=trunc((X1-X0)/dX);
end;
procedure TForm1.N2Click(Sender: TObject);
begin
X0:=StrToFloat(Edit1.Text);
X1:=StrToFloat(Edit2.Text);
dX:=StrToFloat(Edit3.Text);
Tab(Chart1,StringGrid2);
end;
///====Поиск максимума функции сужением интервала===///
procedure TForm1.N4Click(Sender: TObject);
var MaxYz,MinYz: real;
begin
X0:=StrToFloat(Edit1.Text);
X1:=StrToFloat(Edit2.Text);
dX:=StrToFloat(Edit3.Text);
eps:=StrToFloat(Edit4.Text);
n:=trunc((Xk-X0)/dX);
X:=X0;
repeat
Tab(Chart1,StringGrid2);
MaxYz:=MaxY;
X0:=MaxX-dX;
X1:=MaxX+dx;
dX:=(X1-X0)/n;
tab(Chart1,StringGrid2);
until abs (MaxY-MaxYz)<=abs(eps*MaxYz) ;
Label10.Caption:=FloatToStrF(
end;
///===Метод золотого сечения====////
procedure TForm1.N5Click(Sender: TObject);
var X1,X2,X3,X4,f2,f3: real;
begin
X0:=StrToFloat(Edit1.Text);
Xk:=StrToFloat(Edit2.Text);
dX:=StrToFloat(Edit3.Text);
eps:=StrToFloat(Edit4.Text);
X1:=X0;
X4:=Xk;
////====определяем координаты Золотого сечения====////
X2:=X1+0.382*(X4-X1);
f2:=f(x2);
X3:=X1+0.618*(X4-X1);
f3:=f(x3);
while abs(f2-f3)>abs(f2)*eps do
begin
if f2>f3 then
begin
X1:=X2; f2:=f3;
X2:=X3;
X3:=X1+0.618*(X4-X1);
f3:=f(x3);
end
else begin
X4:=X3; f3:=f2;
X3:=X2;
X2:=X1+0.382*(X4-X1);
f2:=f(x2);
end;
end;
Tab(Chart1,StringGrid2);
Label12.Caption:=FloatToStrF(
Label8.Caption:=FloatToStr(
end;
//====нахождение корней функции методом половинного деления===///
procedure TForm1.N6Click(Sender: TObject);
var A,B : real;
i : integer;
begin
X0:=StrToFloat(Edit1.Text);
X1:=StrToFloat(Edit2.Text);
dX:=StrToFloat(Edit3.Text);
eps:=StrToFloat(Edit4.Text);
A:=X0;
X:=A+dX;
i:=1;
StringGrid2.RowCount:=i+1;
StringGrid2.Cells[0,0]:='имя корня';
StringGrid2.Cells[1,0]:='
StringGrid2.Cells[0,1]:=' ';
StringGrid2.Cells[1,1]:=' ';
Chart1.Series[0].Clear;
while X<X1 do begin
if f(A)*f(X)<0 then begin B:=x;
while abs(f(A)-f(B))>=(abs(eps*f(B))
if f(A)*f(X)>0 then A:=X else B:=X;
end;
StringGrid2.Cells[0,i]:='X'+
StringGrid2.Cells[1,i]:=
i:=i+1;
StringGrid2.RowCount:=i;
end;
Chart1.Series[0].AddXY(X,f(X))
A:=X; X:=A+dX;
end;
if i=1 then StringGrid2.Cells[0,i]:='
end;
end.
ВЫЗОВ И ЗАГРУЗКА
Способ вызова программы:
\\Vtit\tom1\EKE\EPB121\
Если ссылка не работает, то
необходимо открыть вручную: EKE→EPB121→epb22045→
ВХОДНЫЕ ДАННЫЕ
X0=-10
X1=20
dX=0,03
eps=0,001
ВЫХОДНЫЕ ДАННЫЕ
Табулирование функции
Рисунок 3 Табулирование функции
Поиск максимума функции сужением интервала
Рисунок 4 Поиск максимума функции сужением интервала
Метод золотого сечения
Рисунок 5 Метод золотого сечения
Нахождение корней функции методом половинного деления
Рисунок 6 Нахождение корней функции методом половинного деления
Информация о работе Исследование функции с использованием метода золотого сечения с помощью Delphi