Реферат

Реферат Анализ модели и алгоритм решения задачи

Работа добавлена на сайт bukvasha.net: 2015-10-28

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

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

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

от 25%

Подписываем

договор

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

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


  1. Анализ модели и алгоритм решения задачи


Многомерная оптимизация заключается в поиске экстремумов функции многих переменных F(x1,x2,x3). Наиболее простым является метод покоординатного спуска, и его разновидность спиральный покоординатный спуск.

Метод покоординатного спуска заключается в поочередном поиске минимума по координате х1, затем х2 и т.д. После нахождения точки минимума по координате х1 переходим к нахождению точки минимума по координате х2 и т.д. Поиск ведется с одинаковым шагом, который уменьшается после нахождения всех значений . Таким образом, алгоритм реализации этого метода подобен алгоритму метода поразрядного приближения и лишь дополняется циклом задания переменных х1,х2 и т.д., внутри которого оценивается погрешность нахождения для каждой переменной.

Метод спирального покоординатного спуска отличается от рассмотренного выше лишь тем, что шаг H меняется каждый раз при переходе от поиска минимума по одной переменной к поиску минимума по другой переменной. В трехмерном пространстве это напоминает спуск во впадину по спирали. Обычно этот метод дает некоторое сокращение времени поиска.
Алгоритм решения:

Метод покоординатного спуска


N-количество переменных

E-точность результата

H- начальный шаг поиска

A[i]- массив начальных значений X[i]

B,C,L-вспомогательные переменные.

Func- заданная функция
Реализация задачи в Turbo Pascal:

Этапы решения:

  • создание UNIT- модуля

  • создание рабочей программы.

UNIT –модуль состоит из трех функций и двух процедур. Процедуры реализуют алгоритм поиска минимума функции многих переменных методом покоординатного спуска (pmmks) и методом спирального покоординатного спуска(pmmsks). Функции (f1,f2,f3) возвращают значения:


Программа представлена в виде меню выбора метода поиска и функции:


После выбора метода появляется меню выбора функции



Д
введите начальный шаг поиска

0.5

введите точность

0.00001

X[1]:=0.5

X[2]:=0.5

X[3]:=0.5

Fmin:=3.735451794

X1m:=0.999974

X2m:=1.999997

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

Например: поиск минимума методом покоординатного спуска функции №1
Тестирование программы:

Функция




Метод покоординатного спуска:

Начальный шаг поиска 0,5

Точность 0,0001


х1=х2=х3=0,5

Fmin:=3.735451794

X1m:=0.999974

X2m:=1.999997

X3m:=2.99999


Метод спирального покоординатного спуска:

Начальный шаг поиска 0,5

Точность 0,0001


х1=х2=х3=0,5

Fmin:=3.735451794

X1m:=1.000032

X2m:=2.000032

X3m:=3.000032

Код программы:

Модуль PMIN

unit PMIN;

interface

uses CRT;

type

mas=array[1..20] of real;

function f1(a1,a2,a3:real):real;

function f3 (a1,a2:real):real;

function f2(a1,a2:real):real;

procedure pmmks(nom:integer);

procedure pmmsks(nom:integer);

implementation

function f1(a1,a2,a3:real):real;

begin f1:=exp(a1+a2+a3)/(a1*sqr(a2)*sqr(a3)*a3); end;

function f2(a1,a2:real):real;

begin f2:=sqr(sqr(a1)+sqr(a2)-1)+sqr(sqr(a1)*a1+a2); end;

function f3(a1,a2:real):real;

begin f3:=2*a1-3.5*a2+exp(sqr(a1)+sqr(a2)); end;

procedure pmmks(nom:integer);

label 1,2;

var a:mas; y,h,e,l,b,c:real; i,n:integer;

begin clrscr;

case nom of

1: n:=3;

2: n:=2;

3: n:=2; end;

writeln('введите начальный шаг поиска'); readln(h);

writeln('введите точность '); readln(e);

for i:=1 to n do begin

write('введите начальные x',i,'=');

readln(a[i]); end;

l:=h;

1: for i:=1 to n do begin b:=0.9E38;

2: a[i]:=a[i]+h;

case nom of

1:y:=f1(a[1],a[2],a[3]);

2:y:=f2(a[1],a[2]);

3:y:=f3(a[1],a[2]); end;

c:=b; b:=y;

if y-c<0 then goto 2;

h:=-h/3;

if abs(h)>=abs(l/3) then goto 2;

h:=l; end;

l:=l/9; h:=l;

if e/9<=l then goto 1;

writeln('fmin=',y:4:10);

for i:=1 to n do

writeln('x',i,'min=',a[i]:4:10); end;

procedure pmmsks(nom:integer);

label 1,2;

var

a:mas; y,h,e,b,c:real; i,n:integer;

begin clrscr;

case nom of

1: n:=3;

2: n:=2;

3: n:=2; end;

writeln('введите начальный шаг поиска'); readln(h);

writeln('введите точность'); readln(e);

for i:=1 to n do begin write('x',i,'=');readln(a[i]); end;

1:for i:=1 to n do begin b:=0.9E38;

2: a[i]:=a[i]+h;

case nom of

1: y:=f1(a[1],a[2],a[3]);

2: y:=f2(a[1],a[2]);

3: y:=f3(a[1],a[2]); end;

c:=b; b:=y;

if y-c<0 then goto 2; end;

h:=-h/5;

if abs(h)>e/5 then goto 1;

writeln('fmin=',y:4:10);

for i:=1 to n do

writeln(a[i]:4:10);

end;

end.


Программа

program kurs;

uses crt,pmin;

label 1,2,3,4,5;

type

mas=array[1..3] of string[31];

mas1=array[1..3] of string[42];

const

stor:mas=(' покоординатный спуск ',


'спиральный покоординатный спуск',


' выход ');

stor2:mas1=(' f(x1,x2,x3)=exp(x1+x2+x3)/(x1*x2^2*x3^3)',

' f(x1,x2)=(x1^2+x2^2-1)^2+(x1^3-x2)^2 ',

' f(x1,x2)=2*x1-3.5*x2+exp(x1^2 +x2^2) ');

var i,k,k1:integer; kod:char;

begin

textmode(co80); clrscr; window(10,10,40,15);

textbackground(1); textcolor(14); clrscr;

k:=1;

1: for i:=1 to 3 do begin

if i=k then begin textbackground(14); textcolor(1); end else

begin textbackground(1); textcolor(14); end;

gotoxy(1,i+2); write(stor[i]); end;

while true do begin

kod:=readkey;

sound(700); delay(500); nosound;

if kod=#13 then goto 2;

if kod=#0 then begin kod:=Readkey;

if kod=#72 then begin

if k>1 then k:=k-1

else k:=3; goto 1; end;

if kod=#80 then begin if k<3 then k:=k+1 else k:=1;

goto 1; end;end;

2:if (k=1) or (k=2) then begin

clrscr; window(10,10,50,15); textbackground(1); textcolor(14);

clrscr; k1:=1;

4:for i:=1 to 3 do begin

if i=k1 then begin textbackground(14); textcolor(1); end else

begin textbackground(1); textcolor(14); end;

gotoxy(1,i+2); write(stor2[i]); end;

while true do begin

kod:=readkey; sound(700); delay(500); nosound;

if kod=#13 then goto 3;

if kod=#0 then begin

kod:=Readkey;

if kod=#72 then begin

if k1>1 then k1:=k1-1

else k1:=3; goto 4; end;

if kod=#80 then begin if k1<3 then k1:=k1+1 else k1:=1; end; end; end; end else clrscr; write(' нажмите любую клавишу'); goto 5; end;

3:CASE k of

1: begin clrscr; window(10,10,50,20); pmmks(k1); end;

2: begin clrscr; window(10,10,50,20); pmmsks(k1); end;

end;

5: kod:=Readkey;

end.


1. Курсовая на тему Административные правонарушения посягающие на права граждан общая
2. Реферат Особливості реклами на місці продажу послуг
3. Реферат Топливно-энергетический комплекс России 2
4. Реферат на тему I Am Become Death Essay Research Paper
5. Шпаргалка на тему Организация бухгалтерского учета 2 Учет денежных
6. Реферат на тему Crucible Essay Research Paper English
7. Реферат Развитие психологических знаний в средние века и эпоху возрождения
8. Реферат Желчнокаменная болезнь и ЛФК при ней
9. Реферат Південна Корея 2
10. Реферат Государственный долг 12