Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Met_Lab4.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
515.58 Кб
Скачать

3. Лабораторне завдання

Варіант 19

19.

Знайти мінімум за допомогою симплекс-методу

4. Виконання роботи Текст програми

% Lab No 4: sympl_met

% Two dimensional space

% ------------------------

% Minimum search

% REGULAR SYMPLEX-METHOD

% ------------------------

nx1=40;nx2=40;

a1=0;b1=1;

a2=0;b2=1;

h1=(b1-a1)/(nx1-1);

h2=(b2-a2)/(nx2-1);

for ii=1:nx1,

x01m(ii)=a1+h1*(ii-1);

end;

for ii=1:nx2,

x02m(ii)=a2+h2*(ii-1);

end;

[sur]=surface_ch(x01m,x02m,nx1,nx2);

N=2;

x0=[1 1];

% al - long multiplier

al=1;

% epc - additional value of exactness

epc=0.001;

epc1=0.0001;

% x1,x2 - first points in initial symplex

% del1, del2 - increments of argument

del1=((N+1)^(1/2)+N-1)/(N*2^(1/2))*al;

del2=((N+1)^(1/2)-1)/(N*2^(1/2))*al;

% calculation of x1, x2

x1=x0+[del1 del2];

x2=x0+[del2 del1];

f0=fza(x0)

f1=fza(x1)

f2=fza(x2)

fv=[f0 f1 f2];

% fmin=-100000;

fmin=min(fv);

fn=fmin-epc;

fn

fmin

% ----------------------

kit0=0;

while (al > 0.0015625)

kit0=kit0+1

kit=0;

disp ('new_po');

while (fn < fmin)

kit=kit+1

[x01 x11 x21 fn,fmin,xn,x1n,x2n]=new_po(x0,x1,x2,epc);

fn

fmin

x0=x01;x1=x11;x2=x21;

end;

% ---------------------------

xn0=xn;it=0;

fn=fmin-epc;

disp ('new_po1');

while (fn < fmin)

kit=kit+1

[x00,x10,x20,fn,fmin,xn,x1n,x2n,it1]=new_po1(xn0,x1n,x2n,epc,it);

fn

fmin

x0=x01;x1=x11;x2=x21;it=it1;

end;

%----------------------------

al=al/2;

fn=fmin-epc;

x0=xn;x1=x0+[del1 del2]*al;x2=x0+[del2 del1]*al;

end;

disp ('symplex:');

x2n

fmin

disp ('min_two:');

[fminz,x1z,x2z]=min_two(sur,x01m,x02m,nx1,nx2);

x1z

x2z

fminz

return

function [f]=fza(x);

% Calculation of prescribed function

f=x(1)^2+2*x(1)*x(2)+4*x(2)^2-3*x(1)-6*x(2)+8;

return

function[fmin,x1,x2]=min_two(sur,x01,x02,n1x,n2x);

% ------------------------------------------------

% search of minimum point of two-dimensional array

% ------------------------------------------------

for ij=1:n2x,

jmi1=1;fmin1=sur(1,ij);

jm(ij)=jmi1;fmj(ij)=fmin1;

for ii=2:n1x,

if (sur(ii,ij) < fmin1),

fmin1=sur(ii,ij);jmi1=ii;

end;

end;

jm(ij)=jmi1;fmj(ij)=fmin1;

end;

in1=jm(1);

in2=1;fjmm=fmj(1);

for ij=2:n2x,

if (fmj(ij) < fjmm)

in1=jm(ij);in2=ij;

fjmm=fmj(ij);

end;

end;

% jm

x1=x01(in1);x2=x02(in2);

xv=[x1 x2];

fmin=fza(xv);

% jm

return

function [x00,x10,x20,fn,fmin,xn,x1n,x2n]=new_po(x0,x1,x2,epc)

% search of new point in symplex-method

% fmin - function minimum in points of previous symplex

% fn - function value in new point

f0=fza(x0);

f1=fza(x1);

f2=fza(x2);

fv=[f0 f1 f2];

fm=max(fv);

fmin=min(fv);

% search of two points for determination of xs

% xp - point of function maximum

% xn1, xn2 - points for search xs

if(abs(fm-f0) < epc)

x1n=x1; x2n=x2;xp=x0;

end

if(abs(fm-f1) < epc)

x1n=x0; x2n=x2;xp=x1;

end

if(abs(fm-f2) < epc)

x1n=x0; x2n=x1;xp=x2;

end

xs=(x1n+x2n)/2;

% xn - new point

xn=2*xs-xp;

fn=fza(xn);

% choice of new points

x00=x1n;x10=x2n;x20=xn;

return

function[sur]=surface_ch(x01,x02,n1,n2);

for ii=1:n1,

for ij=1:n2,

xv=[x01(ii) x02(ij)];

sur(ii,ij)=fza(xv);

end

end

[xxx,yyy]=meshgrid(x01,x02);

figure (1); mesh(xxx,yyy,sur);

return

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]