Контрольная работа по предмету "Информатика"


Методы синтеза и оптимизации

МИHИСТЕРСТВО ОБРАЗОВАHИЯ И НАУКИ УКРАИHЫ


ДОHБАССКАЯ ГОСУДАРСТВЕHHАЯ МАШИHОСТРОИТЕЛЬHАЯ АКАДЕМИЯ


Кафедра компьютерных информационных технологий


Контрольная работа №1, 2


по дисциплине


«Методы синтеза и оптимизации»


Выполнила


студентка группы ИТ 99-1з Александрова А.Н


Проверила


Веремей О.В.


Краматорск 2002



Задание 1


ПРОГРАММИРОВАНИЕ ЧИСЛЕННЫХ МЕТОДОВ ОДНОМЕРНОЙ ОПТИМИЗАЦИИ


Цель задания: закрепить теоретические сведения и приобрести практические навыки разработки алгоритмов и программ для нахождения экстремальных значений функции одной переменной методом перебора с применением ЭВМ.


Найти максимум и минимум функции при изменении аргумента от -4 до 3 с точностью 0,0001. Функция достигает максимума при меньших значениях аргумента. Постройте график функции.


Исходные данные приведены в таблице 1.


Таблица 1














Номер варианта A B С D
6 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 // ввод начальных условий


withform1 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


ПРИМЕНЕНИЕ ГРАДИЕНТНЫХ МЕТОДОВ ДЛЯ ОПТИМИЗАЦИИ НА ЭВМ МАТЕМАТИЧЕСКИХ МОДЕЛЕЙ ОБЪЕКТОВ


Цель задания: приобрести практические навыки разработки алгоритмов и программ оптимизации математических моделей градиентным методом.


Индивидуальное задание

Найдите минимум функции f(x1,х2) методом наискорейшего спуска, выбрав в качестве начальной точки сначала Хо, а затем точку из противоположного квадраниа. Сравните число итераций. Для определения оптимального шага путём одномерной минимизации вдоль антиградиентного направления примите метод дихотомии в программе, предусмотрите отрисовку траектории наискорейшего спуска.


, при Хо(2,4).


Блок-схема алгоритма решения изображена на рисунке 5





Рисунок 5- блок-схема алгоритма решения методом наискорейшего спуска



Результаты работы программы.


Рисунок 6- Решение задачи на ЭВМ и траектория поиска оптимальных значений (при Хо(2,4))



Рисунок 7 Решение задачи на ЭВМ и траектория поиска оптимальных значений (при Хо(-2,-4))


Вывод: Особенностью метода наискорейшего спуска является то, что поиск решения выполняется с оптимальным шагом, который рассчитывается с помощью одномерной минимизации функции. Градиенты в двух соседних точках ортогональны и поэтому траектория к оптимальному решению в виде зигзага с поворотом под прямым углом. При Хо(2,4) количество итераций – 5, а при Хо(-2,-4) количество итераций уменьшилось до 4,а значение целевой функции осталось прежним – F(x)=0,61370564.

Листинг подпрограммы метода.


unitOpt1_4;


interface


uses


Messages, SysUtils, Graphics, Forms, Dialogs;


const n=2;


type Artype =array[1..n] of real;


Funop=function(xi:Artype):real;


ProcMin=Procedure(a,b,e:real; var xm,ym:real);


type


TForm2 = class(TForm)


private


public


procedure Optimiz(k: integer);


end;


var


Form2: TForm2;


Nmax,prn,NN:integer;


e,Fopt:real;


X0,G:artype;


f1:funop;


Pmin:ProcMin;


kAntGrad:real;


function model1(x: Artype): real;


implementation


uses Main,UnitGraph;


// Подпрограммавычислениязаданнойфункции


function model(x:Artype):real;


begin


model:= exp(x[1])+sqr(x[2])-2*x[1];


end;


{main program}


procedure Grad(n: integer; e: real; x: artype; var g: Artype;


F: Funop);


Var i:integer; fp,fo:real;


begin


for i:=1 to n do


begin


x[i]:=x[i]+e;


fp:=F(x);


x[i]:=x[i]-2*e;


fo:=F(x);


x[i]:=x[i]+e;


g[i]:=(fp-fo)/2/e;


end;


end;


procedure Opgrad(n: integer; e: real; var xk: Artype; Nmax: integer;


prn: byte; var Fopt: real; var nn: integer; F: Funop);


Label 1;


Var dk:Artype;//Градиент


od{нормавектор-градиента},


lambda{шаг},s,sf:real;


i:integer;


Function FF(x:real):real;


Var i:integer;


begin


for i:=1 to n do


xk[i]:=xk[i]+abs(x)*dk[i]/od;


FF:=F(xk);


for i:=1 to n do


xk[i]:=xk[i]-abs(x)*dk[i]/od;


end;


Procedure Min(a0,b0,e:real; Var xm,ym:real);// Метод Дихотомии


Label 1,2;


Var x1,x2,y1,y2,delta,a,b:real;


k,n:integer;


begin


a:=a0; b:=b0;


delta:=e/2;


1: n:=2*k;


x1:=(a+b-delta)/2;


x2:=(a+b+delta)/2;


y1:=ff(x1); y2:=ff(x2);


if y1<=y2 then b:=x2


else a:=x1;


if (b-a)<e then


begin


xm:=(a+b)/2;


ym:=ff(xm);


end


else


begin


k:=k+1;


goto 1


end;


end;


{main prcvedure}


BEGIN


nn:=0; lambda:=0;


if prn=0 then


begin


for i:=1 to n do


form1.ListBox1.Items.Add('x'+inttostr(i)+'='+Floattostr(xk[i])+' ');


form1.ListBox1.Items.Add(#13 + 'Целевая функция = '+ Floattostr(F(xk))+#13);


end;


repeat


Grad(n,e/2,xk,dk,F);


for i:=1 to n do


dk[i]:=-dk[i]; sf:=F(xk);


if prn=1 then


begin


form1.ListBox1.Items.Add('Итерация №'+inttostr(nn)+ #13 +' Шаг = '+Floattostrf(lambda,ffGeneral,8,5) );


form1.ListBox1.Items.Add('Текущая точка ');


for i:=1 to n do


begin


form1.ListBox1.Items.Add('X'+inttostr(i)+'='+floattostrf(xk[i],ffGeneral,8,5));


formGraph.imGraph.Canvas.LineTo(round( mx* xk[1]+ Sx),round( -my* xk[2]+ Sy));


end;


form1.ListBox1.Items.Add(#13+'Текущий антиградиент');


for i:=1 to n do


form1.ListBox1.Items.Add('g'+inttostr(i)+'='+Floattostrf(dk[i],ffGeneral,8,5)+' ');


form1.ListBox1.Items.Add(' Целевая функция F = '+Floattostrf(sf,ffGeneral,8,5));


form1.ListBox1.Items.Add('-------------------------------------------');


end;


od:=0;


for i:=1 to n do


od:=od+sqr((dk[i]));


od:=sqrt(od); if od<e then goto 1;


nn:=nn+1;


if nn>Nmax then


begin


nn:=nn-1;


showmessage('Минимум не найден !!!'+ #13+' Необходимое числоитераций больше выделенного ресурса'+Inttostr(Nmax));


Fopt:=F(xk);


Exit


end;


Min(0,10,e,lambda,s);


for i:=1 to n do


xk[i]:=xk[i]+lambda*dk[i]/od;


Until(lambda<e);


1: Fopt:=F(xk);


with form1.ListBox1.Items do


begin


Add(' Оптимальные значения за '+inttostr(nn)+' итерации');


for i:=1 to n do


Add('X'+inttostr(i)+'*'+'='+floattostrf(xk[i],ffGeneral,8,5));


Add(' Целевая функция F(X*) = '+Floattostrf(fopt,ffGeneral,8,5));


end;


end;


function model1(x: Artype): real;


begin


end;


procedure TForm2.Optimiz(k: integer);


begin


try // вводначальныхусловий


with form1 do


begin


X0[1]:=strtofloat(form1.Edit12.Text);


X0[2]:=strtofloat(form1.Edit13.Text);


end


except


showMessage('Неправильно введены начальные условия');


end;


with FormGraph do //координатная плоскость


begin


{Установка максимума и минимума функции}


Xb:=-abs(X0[1])-5; Xe:=abs(X0[1])+5; Ymin:=-abs(X0[2])-5;Ymax:=abs(X0[2])+5;


GrafOrt;


end;


Nmax:=500; e:=0.00001;prn:=1;


formGraph.imGraph.Canvas.Pen.Color:=clRed;


formgraph.imGraph.Canvas.Pen.Width:=2;


formgraph. imGraph.Canvas.TextOut(round( mx* x0[1]+ Sx),


round( -my* x0[2]+ Sy),'0');


formGraph.imGraph.Canvas.MoveTo(round( mx* x0[1]+ Sx),round( -my* x0[2]+ Sy));


F1:=Model;


Grad(n,0.1,X0,g,f1);


Opgrad(n,e,X0,Nmax,prn,fopt,NN,f1);


formgraph.imGraph.Canvas.Pen.Width:=1;


end;


end.




Задание 5


МЕТОДЫ НУЛЕВОГО ПОРЯДКА РЕШЕНИЯ МНОГОМЕРНЫХ ЗАДАЧ ОПТИМИЗАЦИИ


Цель задания: приобрести практические навыки разработки алгоритмов и программ оптимизации многомерных функций методами ненулевого порядка, в частности методом прямого поиска.




Рисунок 8 – блок-схема подпрограммы циклического изменения координат базисной точки







Рисунок 9 – Блок-схема метода прямого поиска


Индивидуальное задание.

Найдите минимум функции методом прямого поиска, выбрав в Хо(3, -1, 2), а потом Хо(-3, 1, -2).


Алгоритм с помощью которого проводилась оптимизация функции изображена на рисунках 8, 9 в виде блок-схем.


Решение задачи на ЭВМ.

На рисунках 10, 11 изображены результаты оптимизации на ЭВМ при различных начальных условиях



Рисунок 10 – результаты и траектория движения базиса при Хо(3, -1, 2)



Рисунок 11 – результаты при Хо(-3,1, -2)


Вывод: В ходе работы при изменении начальных условий было выявлено, что приближение начальных условий к оптимальным значениям количество итераций значительно уменьшается.

Листингподпрограммы


procedure Poisk(n:integer; zb:Artype; delta:real;


Var z1:Artype; Var w:real;


Var l:integer; F:Funop);


Var


z:Artype; i:integer; y:real;


begin


w:=f(zb);


z:=zb; z1:=zb; l:=0;


for i:=1 to n do


begin


z[i]:=zb[i]+delta; y:=f(z);


if y<w then


begin


z1[i]:=z[i]; l:=l+1; w:=y


end


else begin


z[i]:=zb[i]-delta; y:=f(z);


if y<w then


begin


z1[i]:=z[i]; l:=l+1; w:=y


end


end;


end;


w:=f(z1);


end;


procedure MyClass.OptPoisk(n,m:integer;


delta,eps:real; xo:Artype; Var xb:Artype;


Var Yopt:real; Var ip:integer; F:Funop);


Label 6,7,10;


Var x1,x2,x3:Artype;


d,wo,y1,y2,y3:real; i,l:integer;


a,b:string;


Procedure Outt(x:Artype; y:real);


Var i:integer;


begin


for i:=1 to n do


begin


str( x[i]:8:3,a); str(y:9:3,b);


form1.ListBox2.Items.Add('X'+inttostr(i)+'='+a);


with formgraph do


begin


imGraph.Canvas.Pen.Color:=clRed;


imgraph.Canvas.LineTo(round( mx* x[1]+ Sx),


round( -my* x[2]+ Sy));


imGraph1_3.Canvas.Pen.Color:=clBlue;


imgraph1_3.Canvas.LineTo(round( mx* x[1]+ Sx),


round( -my* x[3]+ Sy));


imGraph2_3.Canvas.Pen.Color:=clBlack;


imgraph2_3.Canvas.LineTo(round( mx* x[2]+ Sx),


round( -my* x[3]+ Sy));


end;


end;


str(y:9:1,b);


form1.ListBox2.Items.Add('--------------------- F='+b+'-----------');


end;


Begin


f:=model;


d:=delta;


wo:=f(xo);


ip:=0;


with formGraph do


begin


imGraph.Canvas.Pen.Width:=2;


imGraph1_3.Canvas.Pen.Width:=2;


imGraph2_3.Canvas.Pen.Width:=2;


for i:=1 to n do


begin //Перовначальнуюточку


imGraph.Canvas.TextOut(round( mx* xo[1]+ Sx),


round( -my* xo[2]+ Sy),inttostr(ip));


imGraph.Canvas.MoveTo(round( mx* xo[1]+ Sx),


round( -my* xo[2]+ Sy));


imGraph1_3.Canvas.TextOut(round( mx* xo[1]+ Sx),


round( -my* xo[3]+ Sy),inttostr(ip));


imGraph1_3.Canvas.MoveTo(round( mx* xo[1]+ Sx),


round( -my* xo[3]+ Sy));


imGraph2_3.Canvas.TextOut(round( mx* xo[2]+ Sx),


round( -my* xo[3]+ Sy),inttostr(ip));


imGraph2_3.Canvas.MoveTo(round( mx* xo[2]+ Sx),


round( -my* xo[3]+ Sy));


end;


end;


Outt(xo,wo);


xb:=xo;


10: Poisk(n,xb,d,x1,y1,l,F);


ip:=ip+1;


if l=0 then goto 6;


7: for i:=1 to n do


x2[i]:=2*x1[i]-xb[i];


y2:=f(x2);


Poisk(n,x2,d,x3,y3,l,F);


ip:=ip+1;


if ip>m then


begin


ShowMessage('Число итераций > '+inttostr(m)+#13+'Минимум не найден!!!');


xb:=x3;


Yopt:=f(xb);


Exit


end;


if y3<y1 then


begin


xb:=x1; wo:=f(xb);


Outt(xb,wo);


x1:=x3; y1:=y3;


goto 7


end


else


begin


xb:=x1; wo:=f(xb);


Outt(xb,wo);


goto 10


end;


6: if d>=eps then


begin


d:=d/5;


goto 10


end


else Yopt:=f(xb);


form1.ListBox2.Items.Add('Число итераций - '+InttoStr(ip));


for i:=1 to n do


begin


str( xb[i]:8:3,a);


form1.ListBox2.Items.Add('X'+inttostr(i)+'опт'+'='+a);


end;


form1.listbox2.Items.Add('Минимум - '+FloatToStr(opt1_5.Yopt));


end;


function model(x:Artype): real;


begin


model:={25*sqr(x[1]+3)+4*sqr(x[3]-4)+10*sqr(x[1]-x[2])+10;}


{3*sqr(x[1]-4)+50*sqr(x[2]-3)+16*sqr(x[1]-x[3])+12;}


16*sqr(x[1]+2)+4*sqr(x[2]-3)+5*sqr(x[3]-x[2])-8;


end;




Задание 6


МЕТОДЫ СЛУЧАЙНОГО ПОИСКА РЕШЕНИЯ МНОГОМЕРНЫХ ЗАДАЧ ОПТИМИЗАЦИИ


Цель задания: приобрести практические навыки поиска на ЭВМ условного экстремума функций многих переменных методом случайного поиска с пересчетом.


Индивидуальное задание.

Найдите минимум функции методом случайного поиска, выбрав начальной точкой Хо(0, 0, 0) при изменении аргументов Xi в пределах [ai, bi]. Предусмотрите отрисовку поиска минимума в координатах x1Ox2, x1Ox3, x2Ox3.


Проведите сравнительный анализ по числу вычислений функции задавая параметр М=10, 15, 20 при шаге Н=20 и, задавая Н=0,5; 1; 2 при М=15





Рисунок 12 – блок-схема метода случайного поиска с перечётом.




Рисунок 13 решение задачи на ЭВМ и траектория поиска оптимальных значений функции


Результаты работы программы изображены на рисунке 13.


Вывод: в основе метода случайного поиска лежит внесение элементов случая в процедуру формирования пробных точек, которые используются для определения направления поиска. Данный метод эффективен для функций с большим количеством переменных, так как ограничивается количество вычислений функции за счёт нахождения антиградиентного направления с помощью пробных точек.


Листинг подпрограммы метода



unitOpt1_6;


interface


uses


Dialogs, SysUtils,Graphics;


Const n=3;


Type Artype=array[1..n] of real;


Funop=function(xi:Artype):real;


type MyClass=class


public


procedure slpoisk(n,m,mf:integer;


h,hmin:real; xmin,xmax:Artype;


Var xo:Artype; Var Yopt:real; F:Funop);


end;


var opt6:MyClass;


var


F:FUNOP;


i,m,mf,im:integer;


h,hmin:real;


xmin,xmax:Artype;


xo,x:Artype;


Yopt:real;


function model(x:Artype): real;


implementation


uses main,unitGraph;


function model(x:Artype): real;


begin


model:={25*sqr(x[1]+3)+4*sqr(x[3]-4)+10*sqr(x[1]-x[2])+10;}


{10*sqr(x[1]-x[2])+4*sqr(x[1]-2)+25*sqr(x[3]+x[2])+8;}


16*sqr(x[1]+2)+4*sqr(x[2]-3)+5*sqr(x[3]-x[2])-8;


end;


procedure Myclass.slpoisk(n,m,mf:integer;


h,hmin:real; xmin,xmax:Artype;


Var xo:Artype; Var Yopt:real; F:Funop);


Label 9,10;


Var x,d,s:Artype; b,hr,y0,y,qsi:real; i,l,k:integer;


Procedure Outt(x:Artype; y:real; kod:integer);


Var i:integer;a,b,c:string;


begin


for i:=1 to n do


begin


str( x[i]:8:3,a); str(y:9:3,b);


form1.ListBox3.Items.Add('X'+inttostr(i)+


'='+a);


if (kod=1) then


with formgraph do


begin


imGraph.Canvas.Pen.Color:=clRed;


imgraph.Canvas.LineTo(round( mx* x[1]+ Sx),


round( -my* x[2]+ Sy));


imGraph1_3.Canvas.Pen.Color:=clBlue;


imgraph1_3.Canvas.LineTo(round( mx* x[1]+ Sx),


round( -my* x[3]+ Sy));


imGraph2_3.Canvas.Pen.Color:=clBlack;


imgraph2_3.Canvas.LineTo(round( mx* x[2]+ Sx),


round( -my* x[3]+ Sy));


end;


end;


caseKodof


0: c:='Начальная точка';


1: c:='Функция убывает';


2: c:='Пробннаяточка';


end;


form1.ListBox3.Items.Add('----------- '+c+' ------'+' F='+b);


end;


// main


begin


f:=model;


b:=-1e20;


for i:=1 to n do


begin


d[i]:=xmax[i]-xmin[i];


if d[i]>b then


b:=d[i];


end;


for i:=1 to n do


s[i]:=d[i]/b;


hr:=h; y0:=f(xo); im:=1;


with formGraph do


begin


imGraph.Canvas.Pen.Width:=2;


imGraph1_3.Canvas.Pen.Width:=2;


imGraph2_3.Canvas.Pen.Width:=2;


for i:=1 to n do


begin //Перовначальнуюточку


imGraph.Canvas.TextOut(round( mx* xo[1]+ Sx),


round( -my* xo[2]+ Sy),inttostr(im));


imGraph.Canvas.MoveTo(round( mx* xo[1]+ Sx),


round( -my* xo[2]+ Sy));


imGraph1_3.Canvas.TextOut(round( mx* xo[1]+ Sx),


round( -my* xo[3]+ Sy),inttostr(im));


imGraph1_3.Canvas.MoveTo(round( mx* xo[1]+ Sx),


round( -my* xo[3]+ Sy));


imGraph2_3.Canvas.TextOut(round( mx* xo[2]+ Sx),


round( -my* xo[3]+ Sy),inttostr(im));


imGraph2_3.Canvas.MoveTo(round( mx* xo[2]+ Sx),


round( -my* xo[3]+ Sy));


end;


end;


Outt(xo,y0,0);


randomize;


9: k:=0;


10: l:=0;


for i:=1 to n do


begin


qsi:=2*random-1;


x[i]:=xo[i]+hr*s[i]*qsi;


if x[i]>xmax[i] then


begin


x[i]:=xmax[i]; l:=l+1


end


else if x[i]<xmin[i] then


begin


x[i]:=xmin[i]; l:=l+1


end


end;


if l<n then


begin


y:=f(x);


outt(x,y,2);


if y<y0 then outt(x,y,1);


im:=im+1;


if im>mf then


begin


showMessage('Число вычислений функции > '+IntTostr(mf)+#13+'Минимум не нейден !!!');


Yopt:=y0;


Exit


end;


if y<y0 then


begin


y0:=y;xo:=x;


goto 9;


end


end;


k:=k+1;


if k<m then goto 10


else


begin


hr:=hr/2;


if hr<hmin then


begin


Yopt:=y0;


for i:=1to n do


form1.ListBox3.Items.Add('X'+inttostr(i)+'опт'+'='+floattostrf(x[i],ffGeneral,5,2)) ;


form1.ListBox3.Items.Add( 'Yопт = '+floattostrf(Yopt,ffGeneral,5,2));


form1.ListBox3.Items.Add('Число вычислений функции = '+InttoStr(im)) ;


Exit end


else goto 9;


end;


end;


end.



Не сдавайте скачаную работу преподавателю!
Данную контрольную работу Вы можете использовать для выполнения своих заданий.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :