Автор: Пользователь скрыл имя, 08 Января 2013 в 18:04, дипломная работа
Несмотря на то, что безусловная оптимизация функции одной переменной наиболее простой тип оптимизационных задач, она занимает центральное место в теории оптимизации как с теоретической, так и с практической точек зрения. Это связано с тем, что задачи однопараметрической оптимизации достаточно часто встречаются в инженерной практике и, кроме того, находят свое применение при реализации более сложных итеративных процедур многопараметрической оптимизации. На первый взгляд кажется, что задача минимизации функции одного переменного является довольно элементарной.
Введение
1 Понятие о Золотом сечении
1.1.Золотое сечение – гармоническая пропорция
1.2.Второе золотое сечение
1.3.Золотой треугольник
1.4.История золотого сечения
1.5.Ряд Фибоначчи
1.6.Обобщенное золотое сечение
1.7.Принципы формообразования в природе
1.8.Золотое сечение и симметрия
2.Методы одномерной оптимизации
2.1Метод золотого сечения
3.Практическая реализация метода золотого сечения
3.1.Характеристика объекта автоматизации
3.2.Разработка программы
3.3.Обоснование выбора языка программирования
Заключение
Список использованных источников
Приложения
int=b-x1; a=x1; x1=x2; y1=y2; x2=a+(1-sech)*int; y2=f3(x2).
Результаты
2) –e-xln(x)
3) 2x2-ex
Метод золотого сечения является довольно простым методом. Эффективность метода золотого сечения хуже, чем метода дихотомии, но преимущество его в том, что при каждой следующей итерации надо вычислять значение целевой функции один раз (за исключением первой итерации).
3.3 Обоснование выбора языка программирования
Для создания программы курсового проекта я выбрал язык программирования – Delphi.
Delphi — это язык программирования,
который используется для
Образование представленного средства программного обеспечения происходило в рамках компании Borland, которая сейчас занимается разработкой системы управления жизненным циклом приложений.
Специфической особенностью и вместе с тем недостатком Delphi являлось то, что использование подобного языка программирования на первых порах возможно было только в рамках операционной системы Microsoft Windows. Сейчас же работа с Delphi осуществляется и на таких платформах, как GNU/Linux, Mac OS X и Windows CE.
Во многом Delphi стал основой для создания такого языка программирования как С#.
Распространено также использование Delphi при разработке различных компонентов программного обеспечения. Примером категорий программных продуктов могут быть: утилиты, информационное обеспечение в Интернете, веб-проектирование, музыкальное оформление, инженерное программное обеспечение, создание баз данных и др.
Delphi имеет особенность
постоянно модернизироваться,
Заключение
Наилучшими критериями сравнения методов поиска являются их эффективность и универсальность. Под эффективностью алгоритма обычно понимают число вычислений функции, необходимое для достижения требуемого сужения интервала неопределенности. Лучшим в этом отношении является метод Фибоначчи, а худшим – метод общего поиска. Однако при применении метода Фибоначчи требуется заранее задать число вычислений значений функции. Как правило, оказывается, что методы Фибоначчи и золотого сечения, обладающие высокой эффективностью, наиболее подходят для решения одномерных унимодальных задач оптимизации. Вообще говоря, с точки зрения эффективности метод золотого сечения занимает промежуточное положение между методами дихотомии и чисел Фибоначчи.
Универсальность алгоритма означает,
что его можно легко применить
для решения самых
С точки зрения универсальности
малоэффективный метод общего поиска
имеет по крайней мере одно преимущество
– его можно с успехом
В процессе работы над методом золотого сечения нами была разработана программа на Delphi 7.0. работающая на основе этого метода.
При разработке программы были учтены все требования к программе и выполнены в полной мере.
При разработке данной программы были закреплены знания по программированию в среде Delphi 7.0, также получены новые знания в процессе работы над данной программой.
Список использованных источников:
Приложение №1.
Листинг программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
RadioButton3: TRadioButton;
Button1: TButton;
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function f1(x: real): real;
begin
Result:=x*x*x*x-14*x*x*x+60*x*
end;
function f2(x: real): real;
begin
Result:=-exp(-x)*ln(x);
end;
function f3(x: real): real;
begin
Result:=2*x*x-exp(x);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
RadioButton1.Checked:=true;
Memo1.Clear;
end;
procedure TForm1.Button1Click(Sender: TObject);
const
sech=0.3819660113;
e=0.00001;
var
a,b,int,x1,x2,y1,y2:real;
kol:integer;
begin
Memo1.Clear;
with Form1 do
begin
if RadioButton1.Checked then
begin
kol:=0;
a:=0;
b:=2;
int:=2;
Memo1.Lines.Add('x'+#9+'a'+#9+
Memo1.Lines.Add('');
Memo1.Lines.Add('2'+#9+'0'+#9+
x1:=a+sech*(b-a);
x2:=a+(1-sech)*(b-a);
y1:=f1(x1);
y2:=f1(x2);
while int>e*x1 do
begin
kol:=kol+1;
if y2>y1 then
begin
int:=x2-a;
b:=x2;
x2:=x1;
y2:=y1;
x1:=a+sech*int;
y1:=f1(x1);
end
else
begin
int:=b-x1;
a:=x1;
x1:=x2;
y1:=y2;
x2:=a+(1-sech)*int;
y2:=f1(x2);
end;
Memo1.Lines.Add(FloatToStrF(
end;
Memo1.Lines.Add('');
Memo1.Lines.Add('Количество
end;
if RadioButton2.Checked then
begin
kol:=0;
a:=0;
b:=2;
int:=2;
Memo1.Lines.Add('x'+#9+'a'+#9+
Memo1.Lines.Add('');
Memo1.Lines.Add('2'+#9+'0'+#9+
x1:=a+sech*(b-a);
x2:=a+(1-sech)*(b-a);
y1:=f2(x1);
y2:=f2(x2);
while int>e*x1 do
begin
kol:=kol+1;
if y2>y1 then
begin
int:=x2-a;
b:=x2;
x2:=x1;
y2:=y1;
x1:=a+sech*int;
y1:=f2(x1);
end
else
begin
int:=b-x1;
a:=x1;
x1:=x2;
y1:=y2;
x2:=a+(1-sech)*int;
y2:=f2(x2);
end;
Memo1.Lines.Add(FloatToStrF(
end;
Memo1.Lines.Add('');
Memo1.Lines.Add('Количество
end;
if RadioButton3.Checked then
begin
kol:=0;
a:=0;
b:=2;
int:=2;
Memo1.Lines.Add('x'+#9+'a'+#9+
Memo1.Lines.Add('');
Memo1.Lines.Add('2'+#9+'0'+#9+
x1:=a+sech*(b-a);
x2:=a+(1-sech)*(b-a);
y1:=f3(x1);
y2:=f3(x2);
while int>e*x1 do
begin
kol:=kol+1;
if y2>y1 then
begin
int:=x2-a;
b:=x2;
x2:=x1;
y2:=y1;
x1:=a+sech*int;
y1:=f3(x1);
end
else
begin
int:=b-x1;
a:=x1;
x1:=x2;
y1:=y2;
x2:=a+(1-sech)*int;
y2:=f3(x2);
end;
Memo1.Lines.Add(FloatToStrF(
end;
Memo1.Lines.Add('');
Memo1.Lines.Add('Количество
end;
end;
end;
end.
Программа запрашивает интервал неопределенности и требуемую точность вычисления. Результатом работы программы является вывод координаты точки экстремума функции и значение функции в этой точке.
Листинг программы.
program ZolotoeSechenie;
const t1=0.382;
const t2=0.618;
var i: integer;
Eps, a,b,x0,x1,x2,x3,x: real;
function f(x:real):real;
begin
f:=2*x*x-ln(x);
end;
begin
writeln ('Поиск экстремума
функции одной переменной
writeln ('Введите интервал неопределенности');
readln (a, b);
writeln ('Введите требуемую точность');
readln (Eps);
x0:=a; x3:=b; i:=0;
while abs (x3-x0) > Eps do begin
inc(i);
x1:=x0+t1*(x3-x0);
x2:=x0+t2*(x3-x0);
if f(x1)>f(x2) then x0:=x1;
if f(x1)<f(x2) then x3:=x2;
end;
x:=(x0+x3)/2;
writeln ('Значение функции в точке экстремума f(', x, ')=',f(x));
writeln ('Количество итераций',i);
readln;
end.
Результат работы программы.
Поиск экстремума функции одной переменно методом золотого сечения
Введите интервал неопределенности
0
10
Введите требуемую точность
0.0001
Значение функции в точке экстремума
f ( 5.0002792383E-01) = 1.1931471837E+00
Количество итераций 24
Поиск экстремума функции одной переменно методом золотого сечения
Введите интервал неопределенности
0
4
Введите требуемую точность
0.000001
Значение функции в точке экстремума
f ( 5.0000018330E-01)= 1.1931471806E+00
Количество итераций 32
Поиск экстремума функции одной переменно методом золотого сечения
Введите интервал неопределенности
0
4
Введите требуемую точность
0.0001
Значение функции в точке экстремума
f ( 4.9999405402E-01)= 1.1931471807E+00
Количество итераций 23