Контрольная работа №1, 2
По дисциплине
«Методы синтеза и оптимизации»
Выполнила
студентка группы ИТ 99-1з Александрова А.Н
Проверила
Веремей О.В.
Краматорск 2002
Задание 1
ПРОГРАММИРОВАНИЕ ЧИСЛЕННЫХ МЕТОДОВ ОДНОМЕРНОЙ ОПТИМИЗАЦИИ
Цель задания: закрепить теоретические сведения и приобрести практические навыки разработки алгоритмов и программ для нахождения экстремальных значений функции одной переменной методом перебора с применением ЭВМ.
Найти максимум и минимум функции при изменении аргумента от -4 до 3 с точностью 0,0001. Функция достигает максимума при меньших значениях аргумента. Постройте график функции.
Исходные данные приведены в таблице 1.
Таблица 1
Номер варианта | A | B | С | D |
1,5 | 0,4 | -5,6 | -10,8 |
Рисунок 1 – блок-схема метода
Решение задачи на ЭВМ с графиком исследуемой функции
На рисунке 2 изображено решение задачи на ЭВМ с графиком функции.
Рисунок 2- результаты работы программы, график функции
Краткие выводы по работе
Задача решена методом последовательного равномерного перебора с уточнением, т.е. вначале проводится поиск с большим шагом, а при нахождении экстремума поиск повторяется в зоне экстремума с уменьшенным шагом.
Программа реализующая алгоритм
:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var a,b,c,d,e,y,Ymax,Xmax,
x0,X,Xk,Xmin,Ymin,h,k:real;
i,n,count:integer;
status:integer; // 0-убывание, 1-возрастание
label l1;
Function MOO(x:real):real;
begin
result:=a*x*x*x + b*x*x + c*x + d;
end;
begin
Form1.Series1.Clear;
try // ввод начальных условий
with form1 do
begin
LabelXmin.Caption:='Xmin = 0';
LabelYmin.Caption:='Ymin = 0';
LabelXmax.Caption:='Xmax = 0';
LabelYmax.Caption:='Ymax = 0';
end;
a:=strtofloat(form1.Edit1.Text);
b:=strtofloat(form1.Edit2.Text);
c:=strtofloat(form1.Edit3.Text);
d:=strtofloat(form1.Edit4.Text);
e:=strtofloat(form1.Edit5.Text);
h:=strtofloat(form1.Edit6.Text);
x0:=strtofloat(form1.Edit7.Text);
xk:=strtofloat(form1.Edit8.Text);
k:=10;
Ymin:=1000000000;
Ymax:=-10000000000;
status:=1;
count:=1;
except
showMessage('Неправильно введены начальные условия');
end;
l1: n:=trunc((xk-x0)/h)+1;
x:=x0;
for i:=1 to n do
begin
y:=MOO(x);
case status of
0: if y<Ymin then
begin
Ymin:=y;
Xmin:=x;
X:=x+h;
end;
1: if Y>Ymax then
begin
Ymax:=y;
Xmax:=x;
X:=x+h;
end;
end;
end;
if count <= 2 then
if h <= e then
begin
with form1 do // вывод результата
begin
LabelXmin.Caption:='Xmin = '+floatTostr(Xmin);
LabelYmin.Caption:='Ymin = '+floatTostr(Ymin);
LabelXmax.Caption:='Xmax = '+floatTostr(Xmax);
LabelYmax.Caption:='Ymax = '+floatTostr(Ymax);
end;
status:=(status+1) mod 2; //Следующий экстремум
count:=count+1;
x0:=Xmin;
xk:= strtofloat(form1.Edit8.Text);
h:=strtofloat(form1.Edit6.Text);
goto l1;
end
else
begin
x0:=Xmin-h;
xk:=Xmin+h;
h:=h/k;
goto l1;
end;
x:=strtofloat(form1.Edit7.Text);
while x < strtofloat(form1.Edit8.Text) do
begin
y:=MOO(x);
form1.Series1.AddXY(x,y);
x:=x+0.1;
end;
end;
Задание 2
РЕШЕНИЕ ОДНОМЕРНЫХ ЗАДАЧ ОПТИМИЗАЦИИ МЕТОДАМИ ПОСЛЕДОВАТЕЛЬНОГО ПОИСКА
Цель задания: приобрести практические навыки разработки алгоритмов и программ для решения одномерных задач оптимизации методами последовательного поиска: дихотомии и золотого сечения.
Индивидуальное задание
Найти минимум функции f(x) на промежутке [a,b] с точностью . Исходные данные и номера вариантов приведены в таблице 2. Построить график минимизируемой функции.
Найдите минимум функции на промежутке [a,b] c точностью ε = 10-4, методом «золотого сечения»постройте график минимизируемой функции.
Блок-схема метода «Золотого сечения» представлена на рисунке3.
Рисунок 3 – Блок-схема метода «Золотого сечения»
На рисунке 4 изображено решение задачи на ЭВМ и график минимизируемой функции.
Вывод: Методы последовательного поиска строятся в предположении унимодальности функции на заданном интервале. Исходя из свойств, унимодальности строится такая стратегия последовательного поиска экстремальной точки Х*, при которой любая пара вычислений f(x) позволяет сузить область поиска (интервал неопределённости).
Процедура минимизации функции:
procedure TForm1.SpeedButton2Click(Sender: TObject);
label l2;
Var a,b,e,x,x1,x2,y,y1,y2,Xmin,Ymin:real;
n:integer;
t:string;
Function f(x:real):real;
begin
f:=tan(x)+exp(-x)+x;
{ f:=x*x+sin(x);}
end;
begin
Form1.Series1.Clear;
try // ввод начальных условий
a:=strtofloat(form1.Edit9.Text);
b:=strtofloat(form1.Edit10.Text);
e:=strtofloat(form1.Edit11.Text);
except
showMessage('Неправильно введены начальные условия');
end;
x1:=a+0.382*(b-a); x2:=b-0.382*(b-a);
y1:=f(x1); y2:=f(x2);
n:=1;
l2: n:=n+1;
if y1<= y2 then
begin
b:=x2;
if (b-a) >= e then
begin
x2:=x1;
x1:=a+0.382*(b-a);
y2:=y1;
y1:=f(x1);
goto l2;
end;
end
else
begin
a:=x1;
if (b-a)>=e then
begin
x1:=x2;
x2:=b-0.382*(b-a);
y1:=y2;
Y2:=f(x2);
goto l2;
end;
end;
Xmin:=(a+b)/2;
Ymin:=f(Xmin);
str(Xmin:10:4,t);
form1.Label20.Caption:='Xmin = '+t;
str(Ymin:10:4,t);
form1.Label21.Caption:='Ymin = '+t;
form1.Label22.Caption:='n = '+Inttostr(n);
x:=strtofloat(form1.Edit9.Text);
while x < strtofloat(form1.Edit10.Text) do
begin
y:=f(x);
form1.Series1.AddXY(x,y);
x:=x+0.1;
end;
end;
Задание 3
ГРАДИЕНТНЫЕ МЕТОДЫРЕШЕНИЯ МНОГОМЕРНЫХ ЗАДАЧ ОПТИМИЗАЦИИ
Цель задания: закрепить теоретические сведения и приобрести практические навыки поиска безусловного экстремума функции многих переменных градиентным методом.
Индивидуальное задание
Найдите минимум функции методом наискорейшего спуска, выбрав начальную точку .Дать геометрическую иллюстрацию решения задачи.
Решение
1) В точке f(X0) = = -14,5
Вычислим координаты градиента функции в точке Х0:
.
Поскольку , то Х0 не является точкой экстремума
2) Переместимся изХ0 вдоль градиента - в новую точкуХ1 по формуле:
т.е. .
Для определения координат точки Х1 нужно выбрать значение шага . Получим:
Из соотношения (, )=0 имеем:
(-3-3 )(-3)+(1+ )=10+10 =0
откуда =
Задание 4