Метод золотого сечения
Дипломная работа, 08 Января 2013, автор: пользователь скрыл имя
Описание работы
Несмотря на то, что безусловная оптимизация функции одной переменной наиболее простой тип оптимизационных задач, она занимает центральное место в теории оптимизации как с теоретической, так и с практической точек зрения. Это связано с тем, что задачи однопараметрической оптимизации достаточно часто встречаются в инженерной практике и, кроме того, находят свое применение при реализации более сложных итеративных процедур многопараметрической оптимизации. На первый взгляд кажется, что задача минимизации функции одного переменного является довольно элементарной.
Содержание
Введение
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.Обоснование выбора языка программирования
Заключение
Список использованных источников
Приложения
Работа содержит 1 файл
КУРСОВАЯЯЯЯ.docx
— 439.57 Кб (Скачать)- Находят две дополнительные точки x1:=a+sech*(b-a) и x2:=a+(1-sech)*(b-a), где sech=0.3819660113;
- Находят значение функции в этих точках: y1 и y2;
- Рассматривают дополнительную переменную int – расстояние между рабочими точками (длина текущего итерационного отрезка), начальное значение которой êa-bú.
- Если int>e*x1, где е – относительная погрешность, то переходят к пункту 5, в противном случае происходит окончание итерационного процесса и x1 – искомая точка минимума.
- Если y2>y1, тогда уменьшаем рабочий интервал int=x2-a. Переприсваиваем: b=x2; x2=x1; y2=y1; x1=a+sech*int; y1=f3(x1).
- Если y2>y1, тогда уменьшаем рабочий интервал int=b-x1. Переприсваиваем:
int=b-x1; a=x1; x1=x2; y1=y2; x2=a+(1-sech)*int; y2=f3(x2).
- Возвращаемся к пункту 4.
Результаты
- x4-14x3+60x2-70x
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, также получены новые знания в процессе работы над данной программой.
Список использованных источников:
- Ковалев Ф.В. Золотое сечение в живописи. К.: Выща школа, 1989.
- Кеплер И. О шестиугольных снежинках. – М., 1982.
- Дюрер А. Дневники, письма, трактаты – Л., М., 1957.
- Цеков-Карандаш Ц. О втором золотом сечении. – София, 1983.
- Стахов А. Коды золотой пропорции.
- Виктор Лаврус Золотое сечение. - Киев, 2000 года
Приложение №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.
Приложение № 2.
Программа запрашивает интервал неопределенности и требуемую точность вычисления. Результатом работы программы является вывод координаты точки экстремума функции и значение функции в этой точке.
Листинг программы.
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