Получение решения задачи безусловной и условной минимизации функции многих переменных в системе MATCAD с помощью встроенных функций Minimize и MinErr

Получение решения задачи безусловной и условной минимизации функции многих переменных в системе MATCAD с помощью встроенных функций Minimize и MinErr - student2.ru

Получение решения задачи безусловной и условной минимизации функции многих переменных в системе MATCAD с помощью встроенных функций Minimize и MinErr - student2.ru

Получение решения задачи безусловной и условной минимизации функции многих переменных в системе MATCAD с помощью встроенных функций Minimize и MinErr - student2.ru

Получение решения задачи безусловной и условной минимизации функции многих переменных в системе MATCAD с помощью встроенных функций Minimize и MinErr - student2.ru

Получение решения задачи безусловной и условной минимизации функции многих переменных в системе MATCAD с помощью встроенных функций Minimize и MinErr - student2.ru

Получение решения задачи безусловной и условной минимизации функции многих переменных в системе MATCAD с помощью встроенных функций Minimize и MinErr - student2.ru

Приложение №5.

Текст программы на TurboPascal, в которой решатся краевая задача первого типа.

Program difur1;

{$n+}

Const N=2; Lyambda=-1;

Type Real=Extended;

Vect=Array[1..n] of Real;

Var

a:Array[1..3] of Real;

t, t0 ,tk ,h ,hp:Real;

Y, Y0, Y0Z:Vect;

i, c:Integer;

u:ReAL;

Procedure Func( t:Real; Y:Vect; Var F:Vect);

begin

F[1]:=a[1]*sqr(y[1]) + a[2]*y[1]*u + a[3]*u*u ;

F[2]:=y[2]*(2*a[1]*y[1]+a[2]*u);

end;

Procedure R_Q(t:Real) ;

Var k0,k1,k2,k3,Y1,F:Vect;

i,j:Integer;

begin

For j:=1 to Round( hp/h) do begin

if j mod 10 =0 then u:=-a[2]*y[1]/(2*a[3]);

Func(t,Y,F);

For i:=1 to n do

k0[i]:=h*F[i];

For i:=1 to n do

Y1[i]:=Y[i]+k0[i]/2;

Func(t+h/2,Y1,F);

For i:=1 to n do

k1[i]:=h*F[i];

For i:=1 to n do

Y1[i]:=Y[i]+k1[i]/2;

Func(t+h/2,Y1,F);

For i:=1 to n do

k2[i]:=h*F[i];

For i:=1 to n do

Y1[i]:=Y[i]+k2[i];

Func(t+h,Y1,F);

For i:=1 to n do

k3[i]:=h*F[i];

For i:=1 to n do

Y[i]:=Y[i]+(k0[i]+2*k1[i]+2*k2[i]+k3[i])/6;

t:=t+h;

end;

end;

Begin

Write('Введи t0 , tk:'); Read( t0, tk);

Write('Введи h , hp:'); Read( h, hp);

Writeln('Введи Y(t0):');

For i:=1 to n do begin

Write( ' Y(',i,')='); Readln(Y0[i]);

end;

Writeln('Введи a[i]:');

For i:=1 to 3 do begin

Write( ' a(',i,')='); Readln(a[i]);

end;

Assign(output,'Lyambda1.txt');

ReWrite(output);

For i:=1 to 3 do begin

Write( ' a(',i,')=' ,a[i]:5:2);

end;

Writeln;

c:=0;

Repeat

t:=t0; Y:=Y0;

Write( 't':6, 'u':8);

For i:=1 to n do

Write(' ':7, 'Y[',i,']');

Writeln;

u:=-a[2]*y[1]/(2*a[3]);

Write( t:8:1, u:8:1);

For i:=1 to n do

Write( Y[i]:10:5,' ');

Writeln;

While t<tk-h do begin

R_Q(t);

t:=t+hp;

Write( t:8:1, u:8:1);

For i:=1 to n do

Write( Y[i]:10:5,' ');

Writeln;

end;

Y0[n]:=Abs(Lyambda/Y[n])*Y0[n] ;

Writeln( ' Y0[',n,']=',Y0[n]:10:5,' ');

c:=c+1;

Until c=2;

End.

Текст программы на TurboPascal, в которой решатся краевая задача второго типа.

Program difur2;

{$n+}

Const N=3; Lyambda=0; Eps=1E-4; Delta=0.1;

Type Real=Extended;

Vect=Array[1..n] of Real;

Var

a:Array[1..4] of Real;

t, t0 ,tk ,h ,hp, L1, L2:Real;

Y, Y0, Y0Z:Vect;

i:Integer;

u:ReAL;

Procedure Func( t:Real; Y:Vect; Var F:Vect);

begin

F[1]:=a[1]*y[1] + a[2]*u ;

F[2]:=a[3]*sqr(y[1])+ a[4]*u*u ;

F[3]:=-a[1]*y[3] + 2*a[3]*y[1] ;

end;

Procedure R_Q(t:Real) ;

Var k0,k1,k2,k3,Y1,F:Vect;

i,j:Integer;

begin

For j:=1 to Round( hp/h) do begin

u:=a[2]*y[3]/(2*a[4]);

Func(t,Y,F);

For i:=1 to n do

k0[i]:=h*F[i];

For i:=1 to n do

Y1[i]:=Y[i]+k0[i]/2;

Func(t+h/2,Y1,F);

For i:=1 to n do

k1[i]:=h*F[i];

For i:=1 to n do

Y1[i]:=Y[i]+k1[i]/2;

Func(t+h/2,Y1,F);

For i:=1 to n do

k2[i]:=h*F[i];

For i:=1 to n do

Y1[i]:=Y[i]+k2[i];

Func(t+h,Y1,F);

For i:=1 to n do

k3[i]:=h*F[i];

For i:=1 to n do

Y[i]:=Y[i]+(k0[i]+2*k1[i]+2*k2[i]+k3[i])/6;

t:=t+h;

end;

end;

Begin

Write('Введи t0 , tk:'); Read( t0, tk );

Write('Введи h , hp:'); Read( h, hp);

Writeln('Введи Y(t0):');

For i:=1 to n do begin

Write( ' Y(',i,')='); Readln(Y0[i]);

end;

Writeln('Введи a[i]:');

For i:=1 to 4 do begin

Write( ' a(',i,')='); Readln(a[i]);

end;

Assign(output,'Lyambda2.txt');

ReWrite(output);

Writeln;

For i:=1 to 4 do begin

Write( ' a(',i,')=' ,a[i]:5:2);

end;

Writeln;

Repeat

t:=t0; Y:=Y0; u:=a[2]*y[3]/(2*a[4]);

Write( 't':7, 'u':7);

For i:=1 to n do

Write(' ':7, 'Y[',i,']');

Writeln;

Write( t:8:1, u:8:4);

For i:=1 to n do

Write( Y[i]:10:5,' ');

Writeln;

While t<tk-h do begin

R_Q(t);

t:=t+hp;

Write( t:8:1, u:8:4);

For i:=1 to n do

Write( Y[i]:10:5,' ');

Writeln;

end;

Y0Z[n]:=Y0[n];

if Y[n]> Lyambda then begin L1:=Y0[n]; Y0[n]:=Y0[n]*1.1 end

else begin L2:=Y0[n]; Y0[n]:=Y0[n]*0.8 end

Until Abs( Y[n]-Lyambda)<Delta;

Writeln( ' Y0[',n,']=',Y0Z[n]:10:5,' ');

Y0[n]:=(L1+L2)/2;

Repeat

t:=t0; Y:=Y0; u:=a[2]*y[3]/(2*a[4]);

Write( 't':7, 'u':7);

For i:=1 to n do

Write(' ':7, 'Y[',i,']');

Writeln;

Write( t:8:1, u:8:4);

For i:=1 to n do

Write( Y[i]:10:5,' ');

Writeln;

While t<tk-h do begin

R_Q(t);

t:=t+hp;

Write( t:8:1, u:8:4);

For i:=1 to n do

Write( Y[i]:10:5,' ');

Writeln;

end;

Y0Z[n]:=Y0[n];

if (Y[n]- Lyambda)>0 then L1:=Y0[n]

else L2:=Y0[n] ;

Y0[n]:=(L1+L2)/2;

Until Abs( Y[n]-Lyambda)<Eps;

Writeln( ' Y0[',n,']=',Y0Z[n]:10:5,' ');

End.

Приложение №6.

Текст программы на TurboPascal, в которой решатся задача быстродействия без демпфирования.

Program difur3;

{$n+}

Uses Graph,Crt;

Const N=2; Eps=1E-6;

Type Real=Extended;

Vect=Array[1..n] of Real;

Var

t, t0 ,tk ,h ,hp:Real;

Y, Y0Z:Vect;

x0, y0, m:integer;

i:Integer;

u, u0:ReAL;

Log, Stop:Boolean;

{* Процедура инициализации графики *}

Procedure Gr(x,y:real);

Var gd,gm,a:integer;

s:string;

Begin

gd:=detect;

initgraph(gd,gm,'c:\tp\bgi');

SetBkColor(15);

x0:=320;y0:=240;

SetColor(4);

Line(0,y0,600,y0);

Line(x0,20,x0,480);

settextstyle(1,0,1) ;

outtextXY(x0-5,15, '^');

outtextXY(x0-10,2, 'y(2)');

outtextXY(595,y0-10,'>');

outtextXY(605,y0-10,'y(1)');

a:=1;

str(a,s);

outtextXY(x0-10,round(y0-a*m)-20,s);

outtextXY(x0-6,round(y0-a*m)-20,'_');

str(a,s);

outtextXY(round(x0+a*m),y0,s);

outtextXY(round(x0+a*m),y0-8,'|');

SetColor(2);

MoveTo(round(x0+x*m),round(y0-y*m));

End;

{* Процедура вывода графиков *}

Procedure Gr_out(x,y:real);

Begin

LineTo(round(x0+x*m),round(y0-y*m));

End;

Procedure Create_U ;

begin

If (Y[2]>=0) and (abs(Y[1]+sqr(Y[2])/2)<Eps) or

(Y[2]>=0) and (abs(Y[1])<Eps) then u:=-1; { BO }

If (Y[2]<0) and (abs(Y[1]-sqr(Y[2])/2)<Eps) or

(Y[2]<0) and (abs(Y[1])<Eps) then u:=1; { AO }

If (Y[2]>=0) and (Y[1]>0) then u:=-1; { 1 четверть }

If (Y[2]<=0) and (Y[1]<0) then u:=1; { 3 четверть }

If (Y[1]>0)and (Y[2]<=0) and (abs(Y[1])-sqr(Y[2])/2>Eps) then u:=-1;{ D }

If (Y[1]>0)and (Y[2]<=0) and (abs(Y[1])-sqr(Y[2])/2<Eps) then u:=1;{ C }

If (Y[2]>=0)and (Y[1]<0)and (abs(Y[1])-sqr(Y[2])/2>Eps) then u:=1; { C }

If (Y[2]>=0)and (Y[1]<0)and (abs(Y[1])-sqr(Y[2])/2<Eps) then u:=-1;{ D }

end;

Procedure Func( t:Real; Y:Vect; Var F:Vect);

begin

F[1]:=y[2] ;

F[2]:=u ;

end;

Procedure R_Q(Var t:Real) ;

Var k0,k1,k2,k3,Y1,F:Vect;

i,j:LongInt;

begin

j:=-1;

While( (Abs(y[1])>Eps) or (Abs(y[2])>Eps) ) and (t<tk-h/2) do begin

j:=j+1;

IF j mod 10 =0 then Begin

If not Stop then Create_U;

if u*u0<0 then begin

write(' Pri t=', t:1:4, ' u=',u:1:0); u0:=u ; Stop:=True;

For i:=1 to n do

Write( ' Y(',i,')=',Y[i]:10:6);

Writeln;

end ;

End;

Func(t,Y,F);

For i:=1 to n do

k0[i]:=h*F[i];

For i:=1 to n do

Y1[i]:=Y[i]+k0[i]/2;

Func(t+h/2,Y1,F);

For i:=1 to n do

k1[i]:=h*F[i];

For i:=1 to n do

Y1[i]:=Y[i]+k1[i]/2;

Func(t+h/2,Y1,F);

For i:=1 to n do

k2[i]:=h*F[i];

For i:=1 to n do

Y1[i]:=Y[i]+k2[i];

Func(t+h,Y1,F);

For i:=1 to n do

k3[i]:=h*F[i];

For i:=1 to n do

Y[i]:=Y[i]+(k0[i]+2*k1[i]+2*k2[i]+k3[i])/6;

t:=t+h;

end;

If t<tk-h/2 then log:=True;

end;

{================================================================}

Begin

Write( 'Введи h , hp:'); Read( h, hp);

m:=20; { Масштаб }

t0:=0;

Writeln('Введи Y(t0):');

For i:=1 to n do begin

Write( ' Y(',i,')='); Readln(Y0Z[i]);

end;

Assign(output,'Tmin.txt');

ReWrite(output);

Writeln;

t:=t0; Y:=Y0Z; tk:=hp; Log:=False; Stop:=False;

Create_U;

u0:=u;

Write( 't':7, 'u':5);

For i:=1 to n do

Write(' ':6, 'Y[',i,']');

Writeln;

Write( t:8:3, u:4:0);

For i:=1 to n do

Write( Y[i]:10:6,' ');

Writeln;

Gr(y[1],y[2]);

While (t<100) and not log do begin

Gr_out(y[1],y[2]); {* Рисование графика *}

R_Q(t);

Write( t:8:3, u:4:0);

For i:=1 to n do

Write( Y[i]:10:6,' ');

Writeln;

t:=tk; tk:=tk+hp;

end;

ReadKey;

End.

Текст программы на TurboPascal, в которой решатся задача быстродействия cучетом демпфирования.

Program difur; {Max bystrodeistvie c dempferom}

{$n+}

Uses Graph,Crt;

Const N=2; Eps=1E-5;

Type Real=Extended;

Vect=Array[1..n] of Real;

Var

t, t0 ,tk ,h ,hp:Real;

Y, YZ:Vect;

x0, y0, m:integer;

i:Integer;

u, u0:ReAL;

R:Real;

Log, Stop:Boolean;

{* Процедура инициализации графики *}

Procedure Gr(x,y:real);

Var gd,gm,a:integer;

s:string;

Begin

gd:=detect;

initgraph(gd,gm,'c:\tp\bgi');

SetBkColor(15);

x0:=320;y0:=240;

SetColor(4);

Line(0,y0,600,y0);

Line(x0,20,x0,480);

settextstyle(1,0,1) ;

outtextXY(x0-5,15, '^');

outtextXY(x0-10,2, 'y(2)');

outtextXY(595,y0-10,'>');

outtextXY(605,y0-10,'y(1)');

a:=1;

str(a,s);

outtextXY(x0-10,round(y0-a*m)-20,s);

outtextXY(x0-6,round(y0-a*m)-20,'_');

str(a,s);

outtextXY(round(x0+a*m),y0,s);

outtextXY(round(x0+a*m),y0-8,'|');

SetColor(2);

MoveTo(round(x0+x*m),round(y0-y*m));

End;

{* Процедура вывода графиков *}

Procedure Gr_out(x,y:real);

Begin

LineTo(round(x0+x*m),round(y0-y*m));

End;

Procedure Create_U ;

begin

{BO} If (Y[2]>=0) and (abs(sqr(Y[1]-1)-sqr(Y[2])-1)<Eps) or

( (Y[2]>=0) and (abs(Y[1]-(R-1)/4)<Eps) ) Then u:=-1 Else

{AO} If (Y[2]<=0) and (abs(sqr(Y[1]+1)-sqr(Y[2])-1)<Eps) or

( (Y[2]<0) and (abs(Y[1]+(R-1)/4)<Eps) ) then u:=1 else

{C} If(Y[2]>=0)and(Y[1]<0)and (abs(Y[1]-(R-1)/4)>Eps)then u:=1 else

{D} If(Y[2]<=0)and(Y[1]>0)and (abs(Y[1]+(R-1)/4)>Eps)then u:=-1

end;

Procedure Func( t:Real; Y:Vect; Var F:Vect);

begin

F[1]:=y[2] ;

F[2]:=y[1]+u

end;

Procedure R_Q(Var t:Real) ;

Var k0,k1,k2,k3,Y1,F:Vect;

i,j:LongInt;

begin

j:=-1;

While(y[2]*yz[2]>0) and ( t<tk-h/2 ) do begin

yz:=y;

j:=j+1;

IF j mod 10 =0 then Begin

If not Stop then Create_U;

if u*u0<0 then begin

write(' Pri t=', t:1:4, ' u=',u:1:0); u0:=u ; Stop:=True;

For i:=1 to n do

Write( ' Y(',i,')=',Y[i]:10:6);

Writeln;

end ;

End;

Func(t,Y,F);

For i:=1 to n do

k0[i]:=h*F[i];

For i:=1 to n do

Y1[i]:=Y[i]+k0[i]/2;

Func(t+h/2,Y1,F);

For i:=1 to n do

k1[i]:=h*F[i];

For i:=1 to n do

Y1[i]:=Y[i]+k1[i]/2;

Func(t+h/2,Y1,F);

For i:=1 to n do

k2[i]:=h*F[i];

For i:=1 to n do

Y1[i]:=Y[i]+k2[i];

Func(t+h,Y1,F);

For i:=1 to n do

k3[i]:=h*F[i];

For i:=1 to n do

Y[i]:=Y[i]+(k0[i]+2*k1[i]+2*k2[i]+k3[i])/6;

t:=t+h;

end;

If t<tk-h/2 then log:=True;

end;

{================================================================}

Begin

Write( 'Vvedi h , hp:'); Read( h, hp);

m:=20; { Масштаб }

Writeln( 'Vvedi Y(t0):');

For i:=1 to n do begin

Write( ' Y(',i,')='); Readln(YZ[i]);

end;

YZ:=Y; t0:=0;

Write('u='); Read(u);

If u=1 then R:= sqr(Y[1]+1)-sqr(Y[2])

else R:= sqr(Y[1]-1)-sqr(Y[2]);

Assign(output,'Tmin2.txt');

ReWrite(output);

Writeln;

t:=t0; tk:=hp; Log:=False; Stop:=False;

Create_U;

u0:=u;

Write( 't':7, 'u':5);

For i:=1 to n do

Write(' ':6, 'Y[',i,']');

Writeln;

Write( t:8:3, u:4:0);

For i:=1 to n do

Write( Y[i]:10:6,' ');

Writeln;

Gr(y[1],y[2]);

While (t<100) and not log do begin

Gr_out(y[1],y[2]); {* Рисование графика *}

R_Q(t);

Write( t:8:3, u:4:0);

For i:=1 to n do

Write( Y[i]:10:6,' ');

Writeln;

t:=tk; tk:=tk+hp;

end;

ReadKey;

End.

СПИСОК ЛИТЕРАТУРЫ

1. Ашманов С.А., Тимохов А.В. Теория оптимизации в задачах и упражнениях.

СПб: ООО Издательство « Лань» 2012. 176 с.

2. Лесин В.В., Лисовец Ю.П. Основы методов оптимизации. СПб: ООО Издательство « Лань» 2011. 352 с.

3. Зубов В.И. Лекции по теории управления. СПб: ООО Издательство « Лань» 2012. 496 с.

СОДЕРЖАНИЕ

Лабораторная работа №1. Минимизация функции многих переменных прямыми методами………………………………………………………………………………..… 2

1. Постановка задачи……………………………………………………………..….2

2. Метод покоординатного спуска…………………………………………………...3

3. Алгоритм метода покоординатного спуска…………………………………..…..4

4. Текст программы………………………………………………………………..….4

5. Метод деформируемого многогранника (метод Нелдера — Мида)……….….4

6. Алгоритм метода……………………………………………………………….…..5

7. Текст программы…………………………………………………………………...8

  1. Задание……………………………………………………………………….……...8

Лабораторная работа №2.Минимизация функции многих переменных градиентными методами……..………………………………………………………………………………9

1. Постановка задачи……………………………………………………………….….9

2. Градиентный метод ………………………………………………………………….9

3. Алгоритм градиентного метода ……………………………………………………10

4. Текст программы…………………………………………………………………….11

5. Метод наискорейшего спуска………………………………………………………11

6. Алгоритм метода…………………………………………………………………....11

7. Текст программы…………………………………………………………………....12

  1. Задание……………………………………………………………………………….12

Лабораторная работа №3. Численные методы нахождения экстремума функции многих переменных с ограничениями в форме равенств и неравенств( метод штрафных функций, метод барьерных функций)………………………………………………………………….13

1. Постановка задачи……………………………………………………………….…...13

2. Метод штрафных функций при существующих ограничениях в форме равенств

и неравенств…………………………………………………………………………13

3. Алгоритм метода штрафных функций ……………………………………………..14

4. Текст программы………………………………………………………………………14

5. Метод барьерных функций …………………………………………………………..14

6. Алгоритм метода ……………………………………………………………………....15

7. Текст программы……………………………………………………………………....15

8. Задание………………………………………………………………………………….15

Лабораторная работа № 4. Безусловная и условная минимизация функции многих переменных с использованием систем MATCAD………………………………17

1. Постановка задачи……………………………………………………………….…...17

2. Метод решения в системе MATCAD ………………………………………………17

3. Алгоритм метода ……………………………………………………………………..18

4. Текст программы………………………………………………………………………19

5. Задание………………………………………………………………………………….19

Лабораторная работа №5. Формирование оптимального управления в соответствие с принципом максимума Понтрягина. Решение краевой задачи…………………………….20

1. Постановка задачи…………………………………………………………..…….…...20

2.Краевая задача первого типа……………………………………………………………..21

3. Алгоритм решения краевой задачи первого типа……………...………………………22

4. Текст программы………………………………………………………………………...22

5. Краевая задача второго типа…………………………………………………………….22

6. Алгоритм решения краевой задачи второго типа……………...………………………23

7. Текст программы…………………………………………………………………...……24

8. Задание…………………………………………………………………………………...24

Лабораторная работа №6. Формирование оптимального управления для решения различных задач на максимальное быстродействие…………………………………………25

1. Постановка задачи…………………………………………………………..…….…...25

2. Метод решения задачи на быстродействие при отсутствии демпфирования………26

3. Алгоритм решения задачи на быстродействие при отсутствии демпфирования…..28

4. Текст программы……………………………………………………...………………...28

5. Метод решения задачи на быстродействие с учетом демпфирования……..………28

6. Алгоритм решения задачи на быстродействие с учетом демпфирования……..…..33

7. Текст программы…………………………………………………………………..……33

8. Задание…………………………………………………………………………………...33

Приложение……………………………………………………………………………………..34

Список литературы……………………………………………………………………………..61

Наши рекомендации