Контрольная работа: Решение задачи параметрической идентификации математической модели объекта управления

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Федеральное агентство по образованию

Государственное образовательное учреждение

высшего профессионального образования

Магнитогорский государственный технический университет им. Г.И. Носова

Кафедра промышленной кибернетики и систем управления

Контрольная работа

по дисциплине «Моделирование систем»

Решение задачи параметрической идентификации математической модели объекта управления

Выполнил студент: Сайров Александр Михайлович

Проверил преподаватель: Мухина Елена Юрьевна

Магнитогорск 2007

Задание 1

Решить задачу многомерной оптимизации 2-мя методами, найти оптимальное значение постоянной времени и времени запаздывания для указанной кривой разгона.

Рис. 1. Кривая разгона

Целевая функция:

min

0, при t < ф

hT (t) = при t > ф

Задание 2

Решение задач линейного программирования.

Задача 1

Максимизировать функцию

f = x1 + 2x2 max

x1, x2 ? 0;

2x1 + 2x2 ? 10;

x1 + 5x2 ? 20;

x1 - x2 ? 4.

Задача 2

Минимизировать функцию

f = 2x1 + x2 min

x1, x2 ? 0;

3x1 + x2 ? 2;

x1 + 5x2 ? 15

Задание 3

Метод покоординатного спуска (метод Гаусса - Зейделя)

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

Основным достоинством метода покоординатного спуска (метод Гаусса - Зейделя) является его простота. Что касается недостатков этого метода, то к ним можно отнести трудности в поиске точки экстремума при наличии ограничений и «оврагов». Также этот метод не обладает высокой точностью.

Программа 1

#include <stdio.h>

#include <conio.h>

#include <math.h>

#include <iostream.h>

const float e=0.001;

const int S=10;

const int N=3;

const float T=2.75;

const float tau=0.88;

const float k=0.02;

float t[10]={0,1.0,1.5,2.0,2.5,4.0,4.5,6.0,6.5,8.0},

he[10]={0, 0,00192, 0,0045, 0,0087, 0,015, 0,0181, 0,0196, 0,0199, 0,0199, 0,02},

m[N]={0.88,2.75,0.02};

float znach[2];

float fr;

int i;

float ht(float tau,float T,float k,float t)

{

if(t<tau)

return 0;

else

return fr=k*(1-exp(-((t-tau)/T)));

}

void f(float tau,float T,float k)

{

int j;

znach[0]=fabs(pow(he[0]-ht(tau,T,k,t[0]),2));

for(j=1;j<10;j++)

if(fabs(pow(he[j]-ht(tau,T,k,t[j]),2))>znach[0])

{znach[0]=fabs(pow(he[j]-ht(tau,T,k,t[j]),2));

znach[1]=t[j];

}

}

float func(float m,int n)

{switch(n)

{

case 1:f(m,T,k);break;

case 2:f(tau,m,k);break;

case 3:f(tau,T,m);break;

}

return 0;

}

double gold(double a,double b,int i)

{

double x1,x2,y1,y2;

x1=a+(1-tau)*(b-a);

y1=func(x1,i);

x2=a+(tau*(b-a));

y2=func(x2,i);

while(fabs(a-b)>e)

{

if(y1<y2)

{

b=x2;x2=x1;y2=y1;

x1=a+(1-tau)*(b-a);

y1=func(x1,i);

}

else

{ a=x1;

x1=x2;

y1=y2;

x2=a+(tau*(b-a));

y2=func(x2,i);

}

}

return (x1+x2)/2;

}

void min()

{

double x[N];

double h[N]={1.0,2.5,0.02},

m[N]={1.5,4.0,0.02};

int j;

float s,x0;

for(j=0;j<N;j++)

x[j]=(h[j]+m[j])/2;

do

{ s=0;

for(j=0;j<N;j++)

{

x0=gold(h[j],m[j],j++);

s+=pow((m[j]-x0),2);

m[j]=x0;

}

}

while(fabs(sqrt(s)>e));

}

int main()

{

double a[2]={0.5,2.0},b[2]={1.0,4.0},m[2]={0.88,2.75},x0,s;

int j;

clrscr();

do

{

s=0;

for(j=0;j<N;j++)

{

x0=gold(a[j],b[j],j++);

s+=pow((m[j]-x0),2);

m[j]=x0;

}

}

while(fabs(sqrt(s)>0.001));

printf("\n\n\t\t\t**********Metod 1**********\n\n\t\t\t");

printf("tau=%.1f,T=%.0f\n",tau,T);

printf("\min=%.5f\n",znach[0]);

for(j=0;j<10;j++)

{

printf("ht(t)=%.4f\n",ht(tau,T,k,t[j]));

}

getch();

return 0;

}

Результаты выполнения программы 1 заношу в сводную таблицу

Таблица 1

Время

Экспериментальные значения

Расчетные значения

(метод Гаусса - Зейделя)

t

he

ht

0

0

0

1

0,00192

0,0018

1.5

0,0045

0,0035

2

0,0087

0,0076

2.5

0,015

0,012

4

0,0181

0,0157

4.5

0,0196

0,0178

6

0,0199

0,0188

6.5

0,0199

0,019

8

0,02

0,0192

Динамические параметры

фз

0.88

1

Tоб

2.75

3

Минимальное значение функции

0,0082

Метод конфигураций (метод Хука - Дживса)

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

параметрическая идентификация математическая модель

Программа 2

#include <stdio.h>

#include <conio.h>

#include <math.h>

#include <iostream.h>

const float e=0.01;

const int S=10;

const int N=3;

const float T=2.75;

const float tau=0.88;

const float k=0.02;

float t[10]={0,1.0,1.5,2.0,2.5,4.0,4.5,6.0,6.5,8.0},

he[10]={0, 0,00192, 0,0045, 0,0087, 0,015, 0,0181, 0,0196, 0,0199, 0,0199, 0,02};

float znach[2],

bb[N],y[N],p[N],h=1.0;

float ps,bs,kk,fi,fb;

float xx[N]={0.88,2.75,0.02};

float fx;

float ht(float tau,float T,float k,float t)

{

if(t<tau)

return 0;

else

return fx=k*(1-exp(-((t-tau)/T)));

}

void f(float tau,float T,float k)

{

int j;

znach[0]=fabs(pow(he[0]-ht(tau,T,k,t[0]),2));

for(j=1;j<10;j++)

if(fabs(pow(he[j]-ht(tau,T,k,t[j]),2))>znach[0])

{znach[0]=fabs(pow(he[j]-ht(tau,T,k,t[j]),2));

znach[1]=t[j]; }

}

float func(float x,int n)

{switch(n)

{

case 1:f(x,T,k);break;

case 2:f(tau,x,k);break;

case 3:f(tau,T,x);break;

case 4:f(xx[0],xx[1],xx[2]);break;

}

return znach[0];

}

void min(void)

{

int i;

clrscr();

kk=h;

for(i=0;i<N;i++)

{y[i]=xx[i];

p[i]=xx[i];

bb[i]=xx[i];

}

fi=func(0,0.03);

ps=0;

bs=1;

int j=0;

fb=fi;

do

{xx[j]=y[j]+kk;

if(func(0,0.03)<fi) y[j]=xx[j];

else

{xx[j]=y[j]-kk;

if(func(0,0.03)<fi) y[j]=xx[j];

else xx[j]=y[j];

}

fi=func(0,0.03);

if(j!=N)

{j+=1;

continue;

}

if(fi<fb-1e-08)

{for(i=0;i<N;i++)

{p[i]=2*y[i]-bb[i];

bb[i]=y[i];

y[i]=xx[i];}

fb=fi;

ps=1;

bs=0;

fi=func(0,0.03);

j=0;

continue;}

if((ps==1)&&(bs==0))

{for(i=0;i<N;i++)

{ p[i]=bb[i];

y[i]=bb[i];

xx[i]=bb[i];}

bs=1;

ps=0;

fi=func(0,0.03);

fb=func(0,0.03);

j=0;

continue;}

else

{kk=h/10;

if(kk<e)break;

j=1;

continue;

}

}

while(1);

}

int main()

{

int j;

printf("\n\n\t\t\t**********Metod 2**********\n\n\t\t\t");

printf("tau=%.1f,T=%.1f\n",tau,T);

printf("\min=%.5f\n",znach[0]);

for(j=0;j<10;j++)

{

printf("ht(t)=%.4f\n",ht(tau,T,k,t[j]));

}

getch();

return 0;

}

Результаты выполнения программы 2 заношу в сводную таблицу

Таблица 2

Время

Экспериментальные значения

Расчетные значения

(метод Гаусса - Зейделя)

t

he

ht

0

0

0

1

0,00192

0,00182

1.5

0,0045

0,0015

2

0,0087

0,005

2.5

0,015

0,0096

4

0,0181

0,0137

4.5

0,0196

0,0164

6

0,0199

0,0178

6.5

0,0199

0,0185

8

0,02

0,0189

Динамические параметры

фз

0.88

0.9

Tоб

2.75

2.8

Минимальное значение функции

0,0056

Таблица 3 Сравнительная таблица

Время

Экспериментальные значения

Расчетные значения

(метод Гаусса - Зейделя)

Расчетные значения

(метод Хука - Дживса)

t

he

ht

ht

0

0

0

0

1

0.004

0,0018

0,00182

1.5

0.007

0,0035

0,0015

2

0.01

0,0076

0,005

2.5

0.013

0,012

0,0096

4

0.018

0,0157

0,0137

4.5

0.019

0,0178

0,0164

6

0.019

0,0188

0,0178

6.5

0.02

0,019

0,0185

8

0.02

0,0192

0,0189

Динамические параметры

фз

0.88

1

88

0.9

Tоб

2.75

3

2.8

Минимальное значение функции

0,0082

0,0056

Вывод

В процессе решения задачи многомерной оптимизации были использованы два метода: метод покоординатного спуска (метод Гаусса - Зейделя) и метод конфигураций (метод Хука - Дживса).

Все результаты, как экспериментальные, так и полученные в процессе расчетов, представлены в сравнительной таблице (таблица 3).

В качестве модели можно использовать кривую, полученную методом конфигураций (метод Хука - Дживса), так как эта кривая и её динамические параметры наиболее близки к кривой и динамическим параметрам, полученным экспериментально. Минимальное значение функции, полученное методом конфигураций (метод Хука - Дживса), равно 0,0056, что меньше, чем значение, полученное методом покоординатного спуска (метод Гаусса - Зейделя), которое равно 0,0082. Одним из условий задачи является получение наименьшего значения функции, поэтому метод конфигураций (метод Хука - Дживса) наиболее приемлем для применения в качестве модели.

Задание 2

Задача 1.

f = x1 + 2x2 max

x1, x2 ? 0;

2x1 + 2x2 ? 10;

x1 + 5x2 ? 20;

x1 - x2 ? 4.

f = 0; x1 + 2x2 = 0; 1; 2 /*вектор с координатами x1, x2*/

В точке А находится максимум функции. Для нахождения координат т. А решим систему уравнений:

2x1 + 2x2 = 10; /x(-1)

x1 + 5x2 = 20; /x(2)

-2x1 - 2x2 = -10;

2x1 + 10x2 = 40;

8x2 =30;

x2 = 3.75; x1 = 1.25;

f = 1.25 + 2*3.75 =8.75

Ответ: Линейная целевая функция принимает наибольшее значение в точке А (1.25; 3.75), максимальное значение функции fmax = 8.75.

Задача 2

f = 2x1 + x2 min

x1, x2 ? 0;

3x1 + x2 ? 2;

x1 + 5x2 ? 15

Ответ: ОДР не существует, потому что система неравенств противоречива. Решений нет.