Мегаобучалка Главная | О нас | Обратная связь


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



2015-12-15 811 Обсуждений (0)
Получение решения задачи безусловной и условной минимизации функции многих переменных в системе MATCAD с помощью встроенных функций Minimize и MinErr 0.00 из 5.00 0 оценок




 

 

 

Приложение №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

 

 

 



2015-12-15 811 Обсуждений (0)
Получение решения задачи безусловной и условной минимизации функции многих переменных в системе MATCAD с помощью встроенных функций Minimize и MinErr 0.00 из 5.00 0 оценок









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

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как построить свою речь (словесное оформление): При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою...
Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы...
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...
Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (811)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.009 сек.)