У вас вопросы?
У нас ответы:) SamZan.net

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

Работа добавлена на сайт samzan.net: 2016-03-13

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 2.2.2025

30

МИ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

,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 не является точкой экстремума

) Переместимся изХ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) количество итераций, а при  Хо(-2,-4) количество итераций уменьшилось до 4,а значение целевой функции осталось прежнимF(x)=0,61370564.

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

unit Opt1_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;

: 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);

: 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;

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

ip:=ip+1;

if l=0 then goto 6;

: 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;

: 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.

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

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

unit Opt1_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;

case Kod of

 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;

: k:=0;

: 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.




1. Теоретическая часть
2. реферат дисертації на здобуття наукового ступеня кандидата педагогічних наук Киї
3. Категориальные модели социальной структуры
4. ЛУЧЕВАЯ ДИАГНОСТИКА ЗАБОЛЕВАНИЙ ОРГАНОВ ПИЩЕВАРЕНИЯ
5. ТЕМАТИЧНИЙ ПЛАН ВИВЧЕННЯ ДИСЦИПЛІНИ VI семестр з
6. Бюст состоит из 15 20 железистых долек имеющих вид виноградной кисти и расположенных в толще соединительной
7. Человек как основная тема и главный предмет искусства
8. Електромашини
9. реферат. Время представления ~ до 16 декабря 2013 г
10. Менеджмент у вузькому розумінні- а процес планування організації керування та контролю організаційних