文档库 最新最全的文档下载
当前位置:文档库 › 系统辨识实验报告

系统辨识实验报告

系统辨识实验报告
系统辨识实验报告

实验一矩阵相乘与求逆

一、实验要求

1)请编出矩阵A和B相乘得到矩阵R的运算计算机程序,要求A和B的维数及数值可以通过键盘及数据文件输入,计算结果R可由屏幕及文件输出。

2)将题一的程序改为子程序。

3)查找有关的资料,读懂及调通矩阵求逆子程序,并改写为子程序。

二、实验过程

1)键盘输入矩阵A和B,屏幕上显示计算结果矩阵R。

#include

#include

int main()

{

int i,j,k,m,n,p,q;

printf("请输入A矩阵的行数:");

scanf("%d",&m);

printf("请输入A矩阵的列数:");

scanf("%d",&n);

printf("请输入B矩阵的行数:");

scanf("%d",&p);

printf("请输入B矩阵的列数:");

scanf("%d",&q);

if(n!=p)

printf("请检查A矩阵的列数与B矩阵的行数是否一致!");

else

{

double **matrixA,**matrixB,**matrixC;

matrixA=(double **)malloc(sizeof(double *)*m);

matrixA[0]=(double *)malloc(sizeof(double)*m*n);

matrixB=(double **)malloc(sizeof(double *)*p);

matrixB[0]=(double *)malloc(sizeof(double)*p*q);

matrixC=(double **)malloc(sizeof(double *)*m);

matrixC[0]=(double *)malloc(sizeof(double)*m*q);

for(i=1;i

{

matrixA[i]=matrixA[i-1]+n;

}

for(i=1;i

{

matrixB[i]=matrixB[i-1]+q;

for(i=1;i

{

matrixC[i]=matrixC[i-1]+q;

}

printf("请输入A矩阵的数:\n");

for(i=0;i

for(j=0;j

scanf("%lf",&matrixA[i][j]);

printf("\n输入的A矩阵是:\n");

for(i=0;i

{

for(j=0;j

printf("%7.3lf\t",matrixA[i][j]);

printf("\n");

}

printf("请输入B矩阵的数:\n");

for(i=0;i

for(j=0;j

scanf("%lf",&matrixB[i][j]);

printf("\n输入的B矩阵是:\n");

for(i=0;i

{

for(j=0;j

printf("%7.3lf\t",matrixB[i][j]);

printf("\n");

}

for(i=0;i

for(j=0;j

matrixC[i][j]=0;

for(i=0;i

for(j=0;j

for(k=0;k

matrixC[i][j]=matrixC[i][j]+matrixA[i][k]*matrixB[k][j];

printf("\n矩阵A*B的结果是:\n");

for(i=0;i

{

for(j=0;j

printf("%7.3lf\t",matrixC[i][j]);

printf("\n");

}

free (matrixA);

free (matrixB);

free (matrixC);

getchar();

getchar();

}

运行的结果如下:

2)实现文本的矩阵输入与计算结果的输出,并将相乘改为子程序。

#include"stdio.h"

int main()

{ void matrix_mutipl(double **matrixA,double **matrixB,double **matrixC,int m,int n,int q);

char ch;

int m=0,n=0,p=0,q=0,i=0,j=0,k=0;

char infileA[80],infileB[80],outfile[80];

FILE *fpin1,*fpin2,*fpin3;

double **matrixA,**matrixB,**matrixC;

printf("Enter the infileA name:\n");

scanf("%s",infileA);

if((fpin1=fopen(infileA,"r"))==NULL)

{

printf("Can't open file %s\n",infileA);

exit(0);

}

do

ch=fgetc(fpin1);

if(ch=='\t')

n++;

if(ch=='\n')

m++;

} while(!feof(fpin1));

n=(n+m)/m;

printf("输入的矩阵A行与列数分别为:%d,%d\n",m,n); fclose(fpin1);

fflush(stdin);

matrixA=(double **)malloc(sizeof(double *)*m); matrixA[0]=(double *)malloc(sizeof(double)*m*n);

for(i=1;i

{

matrixA[i]=matrixA[i-1]+n;

}

for(i=0;i

for(j=0;j

matrixA[i][j]=0;

if((fpin1=fopen(infileA,"r"))==NULL)

{

printf("Can't open file %s\n",infileA);

exit(0);

}

do

{

ch=fgetc(fpin1);

}while(!feof(fpin1)&&(ch<'0'||ch>'9'));

if (feof(fpin1))

exit(0);

ungetc(ch,fpin1);

do

{

i=k/n;

j=k%n;

fscanf(fpin1,"%lf",&matrixA[i][j]);

k++;

}while(!feof(fpin1)&&k

fclose(fpin1);

printf("输入的A矩阵为:\n");

for(i=0;i

{

for(j=0;j

{

printf("%lf",matrixA[i][j]);

printf("\t");

}

printf("\n");

}

fflush(stdin);

printf("Enter the infileB name:\n");

scanf("%s",infileB);

if((fpin2=fopen(infileB,"r"))==NULL)

{

printf("Can't open file %s\n",infileB);

exit(0);

}

do

{

ch=fgetc(fpin2);

if(ch=='\t')

q++;

if(ch=='\n')

p++;

} while(!feof(fpin2));

q=(p+q)/p;

printf("输入的矩阵B行与列数分别为:%d,%d\n",p,q);

fclose(fpin2);

fflush(stdin);

matrixB=(double **)malloc(sizeof(double *)*p);

matrixB[0]=(double *)malloc(sizeof(double)*p*q);

for(i=1;i

{

matrixB[i]=matrixB[i-1]+q;

}

for(i=0;i

for(j=0;j

matrixB[i][j]=0;

if((fpin2=fopen(infileB,"r"))==NULL)

{

printf("Can't open file %s\n",infileB);

exit(0);

}

do

{

ch=fgetc(fpin2);

}while(!feof(fpin2)&&(ch<'0'||ch>'9'));

if (feof(fpin2))

exit(0);

ungetc(ch,fpin2);

k=0;

do

{

i=k/q;

j=k%q;

fscanf(fpin2,"%lf",&matrixB[i][j]);

k++;

}while(!feof(fpin2)&&k

fclose(fpin2);

printf("输入的B矩阵为:\n");

for(i=0;i

{

for(j=0;j

{

printf("%lf",matrixB[i][j]);

printf("\t");

}

printf("\n");

}

fflush(stdin);

matrixC=(double **)malloc(sizeof(double *)*m);

matrixC[0]=(double *)malloc(sizeof(double)*m*q);

for(i=1;i

{

matrixC[i]=matrixC[i-1]+q;

}

for(i=0;i

for(j=0;j

matrixC[i][j]=0;

matrix_mutipl((double**)matrixA,(double**)matrixB,(double**)matrixC,m,n,q); printf("矩阵A*B为:\n");

for(i=0;i

{

for(j=0;j

{

printf("%lf",*(*(matrixC+i)+j));

printf("\t");

}

printf("\n");

}

fflush(stdin);

printf("Enter the outfile name:\n");

scanf("%s",outfile);

if((fpin3=fopen(outfile,"w"))==NULL)

{

printf("Can't open file %s\n",outfile);

exit(0);

}

for(i=0;i

{

for(j=0;j

{

fprintf(fpin3,"%lf",*(*(matrixC+i)+j));

fprintf(fpin3,"\t");

}

fprintf(fpin3,"\n");

}

fflush(stdin);

getchar();

}

void matrix_mutipl(double **matrixA,double **matrixB,double **matrixC,int m,int n,int q) { int k=0,j=0,i=0;

for(i=0;i

for(j=0;j

for(k=0;k

*(*(matrixC+i)+j)=*(*(matrixC+i)+j)+*(*(matrixA+i)+k)*(*(*(matrixB+k)+j)); }

运行结果如下:

文本文件1.dat和2.dat需要放在程序的同一文件夹下,否则需要说明路径。3)矩阵求逆子程序

#include"stdio.h"

#include"malloc.h"

#include"math.h"

void main()

{ int inv(double *p,int n);

double a[4][4]={{1,2,0,0},{1,2,0,0},{0,0,3,0},{0,0,0,1}},*ab;

ab=a[0];

int n=4,i=0,j;

i=inv(ab,n);

if(i!=0)

for(i=0;i

{ putchar('\n');

for(j=0;j

printf("%f ",a[i][j]);

}

getchar();

}

int inv(double *p,int n)

{

void swap(double *a,double *b);

int *is,*js,i,j,k,l;

for(i=0;i

{ putchar('\n');

for(j=0;j

printf("%f ",*(p+i*n+j));

}

puts("\n\n\n\n");

double temp,fmax;

is=(int *)malloc(n*sizeof(int));

js=(int *)malloc(n*sizeof(int));

for(k=0;k

{

fmax=0.0;

for(i=k;i

for(j=k;j

{

temp=fabs(*(p+i*n+j));

if(temp>fmax)

{

fmax=temp;

is[k]=i;js[k]=j;

}

}

if((fmax+1.0)==1.0)

{ free(is);free(js);

printf("no inv");

return(0);

}

if((i=is[k])!=k)

for(j=0;j

swap(p+k*n+j,p+i*n+j);

if((j=js[k])!=k)

for(i=0;i

swap(p+i*n+k,p+i*n+j);

p[k*n+k]=1.0/p[k*n+k];

for(j=0;j

if(j!=k)

p[k*n+j]*=p[k*n+k];

for(i=0;i

if(i!=k)

for(j=0;j

if(j!=k)

p[i*n+j]=p[i*n+j]-p[i*n+k]*p[k*n+j];

for(i=0;i

if(i!=k)

p[i*n+k]*=-p[k*n+k];

}

for(k=n-1;k>=0;k--)

{

if((j=js[k])!=k)

for(i=0;i

swap((p+j*n+i),(p+k*n+i));

if((i=is[k])!=k)

for(j=0;j

swap((p+j*n+i),(p+j*n+k));

}

free(is);

free(js);

return 1;

}

void swap(double *a,double *b)

{

double c;

c=*a;

*a=*b;

*b=c;

}

如上所示,本子程序先将输入的矩阵进行全对角占优的方法,避免了矩阵处理过程中的“病态”情况。

三、实验总结

在整个实验过程中,出现了三个问题:

1)文本输入是实现矩阵相乘的重要点,由于本人在实验的文本文件中加了一些提示语言,因此需要判断何时是数据,再进行矩阵数据的读入,因此增加了一个数据判断过程。

2)矩阵程序改为子程序时,需要实现地址之间的传递,我们不能简单地进行matrixA[i][j]处理,应该改为*(*(matrixA+i)+j)进行处理,而且还要实现二维数组的动态分配存储空间,如下:

double **matrixA;

matrixA=(double **)malloc(sizeof(double *)*m);

matrixA[0]=(double *)malloc(sizeof(double)*m*n);

for(i=1;i

{

matrixA[i]=matrixA[i-1]+n;

}

for(i=0;i

for(j=0;j

matrixA[i][j]=0;

最后的动态数组赋初值也是很重要的,否则在数据处理过程中会出现错误。

3)矩阵求逆的子程序中,需要先对矩阵进行全对角占优的处理,能很好避免数据处理过程中一些“病态”的处理,而且能避免复杂的计算量问题。

实验二M序列的生成与输出计算

一、实验要求

编写并调试动态模型仿真程序

模型:)

k

k

y

y

u

k

y+

k

-

+

-

-

=

+

u

-

-

k

(

)2

5.0

(

(

)2

(

)1

(k

v

)

5.1

)1

(

7.0

已知白噪声{v(k)}数据文件为DV,数据长度L=500

要求:(1)产生长度为L的M序列数据文件

(2)产生长度为L的模型输出数据文件DY

二、实验过程

1)产生M序列

M序列是一种幅值为二值的伪随机序列,周期=(2n-1)(其中n为系统的阶次,即辨识的参数的个数)。

有两种产生方法:

1.采用随机函数。即先随机一个周期的M序列的值(-a或a),再据此更新其他的数据即可。

#include

#include

#include

#include

main()

{

int i,k,n=3,m=2,p;

int *a,*mfuc;

FILE *fp;

p=pow(m,n)-1;

a=(int *)malloc(sizeof(int *)*p);

mfuc=(int *)malloc(sizeof(int *)*500);

srand( (unsigned)time( NULL ) );

for(i=0;i

a[i]=0;

for(i=0;i

{

a[i]=0.5+(float)rand()/(RAND_MAX+1);

a[i]=2*a[i]-1;

printf("%d\n",a[i]);

}

printf("\n\n\n\n\n");

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

{

k=i%p;

mfuc[i]=a[k];

printf("%d\n",mfuc[i]);

}

if((fp=fopen("m.dat","w"))==NULL)

{

printf("Cannot open this file!\n");

exit(0);

}

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

{

fprintf(fp,"%d",mfuc[i]);

fputc('\n',fp);

}

fclose(fp);

fflush(stdin);

getchar();

}

2.M序列用模二加和门电路生成。我们以4阶的进行说明,首先给4个初始状态,如0001,再下一位的数据为该数据的前面第3、4位数据的异或值,一次循环下去,就可以得到一个周期为15的M序列,因为均值需要为0,我们这里命0为-1,实验程序如下:

#include

main()

{

int i=0;

int a=1,b=1,c=-1,d=-1,e=0;

int m=500;

int *m1;

m1=(int *)malloc(sizeof(int *)*m);

FILE *fpin;

printf("%d\n",a);

printf("%d\n",b);

printf("%d\n",c);

printf("%d\n",d);

m1[0]=a;

m1[1]=b;

m1[2]=c;

m1[3]=d;

for(i=4;i

e=a;

a=b;

b=c;

c=d;

if (e==a)

d=-1;

else

d=1;

printf("%d\n",d);

m1[i]=d;

}

if((fpin=fopen("u.dat","w"))==NULL)

{

printf("Cannot open this file!\n");

exit(0);

}

for(i=0;i

{

fprintf(fpin,"%d",m1[i]);

fputc('\n',fpin);

}

fclose(fpin);

free(m1);

fflush(stdin);

getchar();

}

在上面程序运行过后,会生成一个u.dat的文件,即为以后的输入的数据。

2)y值的输出。

输入的值选用前面我们生成的M序列,这样可以开始计算对应的输出值,这里还有白噪声的干扰,具体的编程如下:

#include

{

int i;

int num=500;

FILE *fpu,*fpy,*fpdv;

double u[500],dv[500],y[500];

double u_k1=0,u_k2=0,y_k=0,y_k1=0,y_k2=0;

for(i=0;i

{u[i]=0;dv[i]=0;}

if((fpu=fopen("u.dat","r"))==NULL)

{

printf("Cannot open u.dat file!\n");

exit(0);

}

i=0;

do

{

fscanf(fpu,"%lf",&u[i]);

i++;

}while(!feof(fpu)&&i<500);

fclose(fpu);

if((fpdv=fopen("DV","r"))==NULL)

{

printf("Cannot open DV file!\n");

exit(0);

}

i=0;

do

{

fscanf(fpdv,"%lf",&dv[i]);

i++;

}while(!feof(fpdv)&&i<500);

fclose(fpdv);

y[0]=0;y[1]= 0;

for(i=2;i

{

u_k1=u[i-1];

u_k2=u[i-2];

y_k=1.5*y_k1-0.7*y_k2+u_k1+0.5*u_k2+dv[i-2];

y[i]=y_k;

y_k2=y_k1;

y_k1=y[i];

}

for(i=0;i

printf("%lf\n",y[i]);

if((fpy=fopen("y.dat","w"))==NULL)

{

printf("Cannot open y.dat file!\n");

exit(0);

}

for(i=0;i

{

fprintf(fpy,"%lf",y[i]);

fputc('\n',fpy);

}

fclose(fpy);

fflush(stdin);

getchar();

}

通过上面的程序,我们可以得到一个y.dat的数据输出数据,方便我们以后调用。

三、实验分析

1)采用M序列来替代白噪声,是因为它没有白噪声的缺点,如:要求无限长时间等,但它是接近白噪声的,是比较理想的辨识输入的激励信号。

2)数据的输出值,我们是根据离散函数进行计算的,是一种理论的数据输出,我们在此加上白噪声,以模仿实际的数据输出。

实验三 成批最小二乘法(BLS )

一、实验要求

编写并调试动态离散时间模型LS 成批算法程序。 要求:

1.原始数据由DU 和DY 读出;

2.调用求逆及相乘子程序;

3.显示参数辨识结果。

二、实验过程

1)成批最小二乘法的计算流程

系统模型:

)

()(......)2()1()(......)2()1()(2121k v n k u b k u b k u b n k y a k y a k y a k y n n +-++-+-+-------=或写成:

)()()()()(1

1

k v k u q B k y q

A +=--

其中,u (k )我们选为M 序列产生的数据,即u.dat 里的数据,v (k )为白色随机噪声。 即可写成以下形式:

)()()(k v k x k y T

+=θ

式中,

T

n k u k u n k y k y k x )](),.......,1(),(),......,1([)(------=

],......,,,,......,,[2121n n b b b a a a =θ

对于k=n+1,n+2,.....,n+m ,以上方程可以构成一个线性方程组。 可以写成:V X Y +=θ 其中,

T

T m n v n v n v V m n y n y n y Y )]

(),......,2(),1([)](),.....,2(),1([+++=+++=

??

???

?

?

??

?

??+-+-+--+-+--+------=)(...

)

()

1()

(...

)

()

1(........................)

2(...)()1()2(...)()

1()1(...)1()()1(...)1()(m u m n u m n u m y m n y m n y u n u n u y n y n y u n u n u y n y n y X 参数估计Y X X X T

T

1

)(-=θ

其中u(k)应取:1)随机序列(白噪声);2)伪随即序列(M 序列)。

2)具体的程序如下:

#include

main()

{

void matrix_mutipl(float **matrixA,float **matrixB,float **matrixC,int m,int n,int q);

float inv(float *p,int n);

void swap(double *a,double *b);

int i,j;

float u[500];

float **y,**x,**xt,**c,**d,**o,**yt;

y=(float **)malloc(sizeof(float *)*500);

y[0]=(float *)malloc(sizeof(float)*500*1);

for(i=1;i<500;i++)

{

y[i]=y[i-1]+1;

}

x=(float **)malloc(sizeof(float *)*498);

x[0]=(float *)malloc(sizeof(float)*498*4);

for(i=1;i<498;i++)

{

x[i]=x[i-1]+4;

}

xt=(float **)malloc(sizeof(float *)*4);

xt[0]=(float *)malloc(sizeof(float)*4*498);

for(i=1;i<4;i++)

{

xt[i]=xt[i-1]+498;

}

c=(float **)malloc(sizeof(float *)*4);

c[0]=(float *)malloc(sizeof(float)*4*4);

for(i=1;i<4;i++)

{

c[i]=c[i-1]+4;

}

d=(float **)malloc(sizeof(float *)*4);

d[0]=(float *)malloc(sizeof(float)*4*498);

for(i=1;i<4;i++)

{

d[i]=d[i-1]+498;

}

o=(float **)malloc(sizeof(float *)*4);

o[0]=(float *)malloc(sizeof(float)*4*1);

for(i=1;i<4;i++)

{

o[i]=o[i-1]+1;

}

yt=(float **)malloc(sizeof(float *)*498);

yt[0]=(float *)malloc(sizeof(float)*498*1);

for(i=1;i<498;i++)

{

yt[i]=yt[i-1]+1;

}

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

u[i]=0;

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

y[i][1]=0;

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

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

x[i][j]=0;

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

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

xt[i][j]=0;

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

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

c[i][j]=0;

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

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

d[i][j]=0;

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

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

o[i][j]=0;

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

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

yt[i][j]=0;

FILE *fpdu,*fpdy;

if((fpdu=fopen("u.dat","r"))==NULL)

{

printf("Can't open file u.dat\n");

exit(0);

}

i=0;

do

{

fscanf(fpdu,"%f",&u[i]);

i++;

}while(!feof(fpdu)&&i<500);

fclose(fpdu);

if((fpdy=fopen("y.dat","r"))==NULL)

{

printf("Can't open file y.dat\n");

exit(0);

}

i=0;

do

{

fscanf(fpdy,"%g",&y[i][0]);

i++;

}while(!feof(fpdy)&&i<500);

fclose(fpdy);

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

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

yt[i][j]=y[i+2][j];

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

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

x[i][j]=(-1)*y[i-j+1][0];

for(j=2;j<4;j++)

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

x[i][j]=u[i-j+3];

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

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

xt[j][i]=x[i][j];

matrix_mutipl((float **)xt,(float **)x,(float **)c,4,498,4);

i=inv(*c,4);

if(i!=0)

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

{ putchar('\n');

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

printf("%f ",c[i][j]);

}

matrix_mutipl((float **)c,(float **)xt,(float **)d,4,4,498);

matrix_mutipl((float **)d,(float **)yt,(float **)o,4,498,1);

printf("\n\n");

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

printf("%g\n",o[i][0]);

getchar();

}

void matrix_mutipl(float **matrixA,float **matrixB,float **matrixC,int m,int n,int q) { int k=0,j=0,i=0;

for(i=0;i

for(j=0;j

for(k=0;k

*(*(matrixC+i)+j)=*(*(matrixC+i)+j)+*(*(matrixA+i)+k)*(*(*(matrixB+k)+j)); }

float inv(float *p,int n)

{

void swap(double *a,double *b);

int *is,*js,i,j,k,l;

for(i=0;i

{ putchar('\n');

for(j=0;j

printf("%f ",*(p+i*n+j));

}

puts("\n\n\n\n");

double temp,fmax;

is=(int *)malloc(n*sizeof(int));

js=(int *)malloc(n*sizeof(int));

for(k=0;k

{

fmax=0.0;

for(i=k;i

系统辨识之经典辨识法

系统辨识作业一 学院信息科学与工程学院专业控制科学与工程 班级控制二班 姓名 学号

2018 年 11 月 系统辨识 所谓辨识就是通过测取研究对象在认为输入作用的输出响应,或正常运行时 的输入输出数据记录,加以必要的数据处理和数学计算,估计出对象的数学模型。 辨识的内容主要包括四个方面: ①实验设计; ②模型结构辨识; ③模型参数辨识; ④模型检验。 辨识的一般步骤:根据辨识目的,利用先验知识,初步确定模型结构;采集 数据;然后进行模型参数和结构辨识;最终验证获得的最终模型。 根据辨识方法所涉及的模型形式来说,辨识方法可以分为两类:一类是非参 数模型辨识方法,另一类是参数模型辨识方法。 其中,非参数模型辨识方法又称为经典的辨识方法,它主要获得的是模型是 非参数模型。在假定过程是线性的前提下,不必事先确定模型的具体结构,广泛 适用于一些复杂的过程。经典辨识方法有很多,其中包括阶跃响应法、脉冲响应法、相关分析法和普分析法等等,本次实验所采用的辨识方法为阶跃响应法和脉 冲响应法。 1.阶跃响应法 阶跃响应法是一种常用非参数模型辨识方法。常用的方法有近似法、半对数法、切线法、两点法和面积法等。本次作业采用面积法求传递函数。 1.1面积法 ① 当系统的传递函数无零点时,即系统传递函数如下: G(S) = + ?11?1+?+ 1+1 (1-1) 系统的传递函数与微分方程存在着一一对应的关系,因此,可以通过求取 微分方程的系数来辨识系统的传递函数。在求得系统的放大倍数K后,要得到无 因次阶跃响应y(t)(设τ=0),其中y(t)用下式描述: () ?1 () (1-2) 面积法原则上可以求出n为任意阶的个系数。以n为3为例。有: 3() 2() () {| →∞ =| →∞ =| →∞ = 0 (1-3) ()| →∞ = 1

系统辨识大作业1201张青

《系统辨识》大作业 学号:12051124 班级:自动化1班 姓名:张青 信息与控制工程学院自动化系 2015-07-11

第一题 模仿index2,搭建对象,由相关分析法,获得脉冲响应序列?()g k ,由? ()g k ,参照讲义, 获得系统的脉冲传递函数()G z 和传递函数()G s ;应用最小二乘辨识,获得脉冲响应序列? ()g k ;同图显示两种方法的辨识效果图;应用相关最小二乘法,拟合对象的差分方程模型;构建时变对象,用最小二乘法和带遗忘因子的最小二乘法,(可以用辨识工具箱) 辨识模型的参数,比较两种方法的辨识效果差异; 答:根据index2搭建结构框图: 相关分析法:利用结构框图得到UY 和tout 其中的U 就是题目中要求得出的M 序列,根据结构框图可知序列的周期是 1512124=-=-=n p N 。 在command window 中输入下列指令,既可以得到脉冲相应序列()g k :

aa=5;NNPP=15;ts=2; RR=ones(15)+eye(15); for i=15:-1:1 UU(16-i,:)=UY(16+i:30+i,1)'; end YY=[UY(31:45,2)]; GG=RR*UU*YY/[aa*aa*(NNPP+1)*ts]; plot(0:2:29,GG) hold on stem(0:2:29,GG,'filled') Grid;title('脉冲序列g(τ)') 最小二乘法建模的响应序列 由于是二阶水箱系统,可以假设系统的传递函数为2 21101)(s a s a s b b s G +++= ,已知)(τg ,求2110,,,a a b b

系统辨识实验1实验报告

实验报告 --实验1.基于matlab的4阶系统辨识实验 课程:系统辨识 题目:基于matlab的4阶系统辨识实验 作者: 专业:自动化 学号:11351014 目录 实验报告 (1) 1.引言 (2) 2.实验方法和步骤 (2) 3.实验数据和结果 (2) 4.实验分析 (4)

1、 引言 系统辨识是研究如何确定系统的数学模型及其参数的理论。而模型化是进行系统分析、仿真、设计、预测、控制和决策的前提和基础。 本次实验利用matlab 工具对一个简单的4阶系统进行辨识,以此熟悉系统辨识的基本步骤,和matlab 里的一些系统辨识常用工具箱和函数。 这次实验所采取的基本方法是对系统输入两个特定的激励信号,分别反映系统的动态特性和稳态特性。通过对输入和输出两个系统信号的比较,来验证系统的正确性。 2、 实验方法和步骤 2.1 实验方法 利用matlab 对一个系统进行辨识,选取的输入信号必须能够反映系统的动态和稳态两个方面的特性,才能更好地确定系统的参数。本次实验采取了两种输入信号,为反映动态特性,第一个选的是正弦扫频信号,由下面公式产生: 选定频率范围 ,w(t)是时间t 的线性函数,具有扫频性质,可以反映系统的动态特性。 为反映稳态特性,选的输入信号是阶跃信号。以上的到两组数据,利用matlab 的merge()函数,对两组数据融合,然后用matlab 系统辨识工具箱中的基于子空间方法的状态空间模型辨识函数n4sid()来对系统进行辨识 2.2 实验步骤 (1)建立一个4阶的线性系统,作为被辨识的系统,传递函数为 3243211548765 ()125410865 s s s G s s s s s -+-+=++++ (2)产生扫频信号u1和阶跃信号u2 (3)u1、u2作为输入对系统进行激励,分别产生输出y1和y2 (4)画出稳态测试输入信号u1-t 的曲线,和y1-t 的曲线 画出动态测试输入信号u2-t 的曲线,和y2-t 的曲线 (5)使用merge()函数对u1-y1数据和u2-y2数据进行融合,并使用n4sid()函数对系统进行辨识。 (6)画出原系统和辨识出的系统的零极点图,画出原系统和辨识出的系统的阶跃响应特性曲线,通过对比,验证辨识出的系统的准确性。 3、 实验数据和结果 (1) 分别以扫频正弦函数、阶跃函数作为系统的激励,得到的输出:

系统辨识考试汇总

基于人工神经网络的二阶系统辨识 摘要:BP神经网络是误差反向传播神经网络的简称,提供了一个处理非线 v k的二阶系统,提出了改进的BP神经网络性问题的模型。本文针对带有噪声() 对二阶系统的辨识方法,以达到对系统的精确辨识;通过仿真实验数据可得,神经网络的输出与被辨识系统输出之间的误差很小(当k>=8时,error<0.1%);首先介绍了人工神经网络的系统辨识方面的发展与研究现状,然后介绍常规BP算法和改进的BP算法,最后通过一个具体的二阶系统的实例充分证明了改进BP 神经网络具有的良好辨识效果,实用性强。 关键字:BP神经网络;系统辨识;二阶非线性系统 Second-order system identification based on artificial neural networks WeiLu (College of Electrical and Control Engineering, Xi’an University of Science and Technology,Xi’an 710054,China) Abstract:BP neural network is the abbreviation of erroneous reverse transmission neural network, which provides a model of dealing with nonlinear problems.In this paper, the second-order system with noise, and puts forward the improved BP neural network to second order system modeling method. In order to achieve an accurate identification of the system.Through the simulation experiment the error between the output of neural network and the output of identification system is very small(The error<0.1% when k>=8). First, introduced the artificial neural network system identification aspects of development and research,Then, introduced the conventional BP algorithm and improved BP algorithm,Finally, Through an example of a specific second-order system fully proved that the improved BP neural network has good recognition results and practical. Key words:BP neural network;System Identification;Second-order nonlinear system 一绪论 在自然科学和社会科学的各个领域中,越来越多需要辨识系统模型的问题 已广泛引起人们的重视,很多学者在研究有关线性和非线性的辨识问题。

系统辨识作业2

系统辨识作业 学院: 专业: 姓名: 学号: 日期:

系统辨识作业: 以下图为仿真对象 图中,v(k)为服从N(0,1)正态分布的不相关随即噪声,输入信号采用循环周期Np>500的逆M 序列,幅值为1,选择辨识模型为: )()2()1()2()1()(2121k v k u b k u b k z a k z a k z +-+-=-+-+ 加权因子1)(=Λk ,数据长度L=500,初始条件取I P 610)0(= ,????????? ???=001.0001.0001.0)0(? θ 要求:(1)采用一次完成最小二乘法对系统进行辨识,给出数据u(k)和z(k), 及L H ,L Z 和θ 和)?(θ J 的值。 (2)采用递推最小二乘法进行辨识,要给出参数收敛曲线以及新息)(~k Z ,残差)(k ε,准则函数)(k J 随着递推次数K 的变化曲线。 (3)对仿真对象和辨识出的模型进行阶跃响应对比分析以检验辨识结果的实效。 1、一次完成法对系统进行辨识: 估计L T L L T L LS Z H H H 1)(?-=θ ,其中 []2121,,,b b a a LS =θ ????? ? ??????=L L Z Z Z Z 21 ????????????------------=????????? ???=)2()1()2()1()0()1()0()1()1()0()1() 0()()2()1(L u L u L z L z u u z z u u z z L h h h H L 一次完成算法对系统辨识的Matlab 程序见附录: 部分输入、输出数据如下,全部的输入输出数据用图1.1所示 输入数据u(k)=Columns 1 through 16 0 0 1 1 1 1 0 0 0 0 1 0 0 1 1 0

系统辨识答案

1:修改课本p61的程序,并画出相应的图形; u = -1 -1 -1 1 -1 1 1 -1 1 -1 1 -1 -1 1 1 z = Columns 1 through 11 0 0 Columns 12 through 16 HL =

0 0 0 ZL = c = a1 =

a2 = b1 = 1 b2 = 2:修改课本p63的程序,并画出相应的图形(V的取值范围为54-200); V = [, , , , , ]τ P = [, , , , , ]τ ZL = [, , , , , ]τ HL = c4 = alpha = beita = +004 3:表1中是在不同温度下测量同一热敏电阻的阻值, 70时根据测量值确定该电阻的数学模型,并求出当温度在C?

的电阻值。 要求用递推最小二乘求解: (a )设观测模型为 利用头两个数据给出 ?? ???===-0L T L L T L L z H P θH H P P 000)0()0(?)()()0(1 0 (b )写出最小二乘的递推公式; (c )利用Matlab 计算 T k a k b k )](),([)(?=θ 并画出相应的图形。 解:首先写成[][]?? ? ???=??????=+==a b t a b h h a bt k k z k k 1)()(12 θτ h θL L H z = T L L z z ],...,[1=z ,????? ???? ???=1 (112) 1 L L t t t H ,??????=a b θ 的形式。 利用头两个数据给出最小二乘的初值: ,126120.50??????=L H ?? ????=7907650L z 这样可以算得 i i v bt a y ++=

系统辨识与自适应控制硕士研究生必修课程考核

《系统辨识与自适应控制》硕士研究生必修课程考核(检测技术与自动化装置专业)2003.5. 22 可下载自https://www.wendangku.net/doc/1815130221.html,/xuan/leader/mrj/ 学生姓名:考核成绩: 一、笔试部分 (占课程成绩的 80% ) 考试形式:笔试开卷 答卷要求:笔答,可以参阅书籍,要求简明扼要,不得大段抄教材,不得相互抄袭 试题: 1 简述系统辨识的基本概念(概念、定义和主要步骤)(10分) 2 简述相关辨识的基本原理和基于二进制伪随机序列的相关辩识方法(原理、 框图、特点)。(10分) 3 简述离散线性动态(SI / SO)过程参数估计最小二乘方法(LS法)的主要 内容和优缺点。带遗忘因子递推最小二乘估计(RLS法)的计算步骤和主要递推算式的物理意义(10分) 4 简述什么是时间序列?时间序列建模如何消除恒定趋势、线性趋势和季节性 的影响?(10分) 5 何谓闭环系统的可辨识性问题,它有那些主要结论?(10分) 6 何谓时间离散动态分数时滞过程?“分数时滞”对过程模型的零点和极点有 什么影响?(10分) 7 简述什么是自适应控制,什么是模型参考自适应控制(MRAC)?,试举一例说明MRAC的设计方法(10分)。 8 请设计以下过程( yr = 0 ) y(k) -1.6y(k-1)+0.8y(k-2) = u(k-2)- 0.5u(k-3)+ε(k)+1.5ε(k-1)+0.9ε(k-2) 的最小方差控制器(MVC)和广义最小方差控制器(GMVC), 并分析他们的主要性能。(10分) 二、上机报告RLS仿真(占课程成绩的 20%) 交卷时间:6月9日下午

系统辨识习题解答(最新)

系统辨识习题解答 1-14、若一个过程的输入、输出关系可以用MA 模型描述,请将该过程的输入输出模 型写成最小二乘格式。 提示:① MA 模型z k D z u k ()()()=-1 ② 定义ττθ)](,),1(),([)(,],,,[10n k u k u k u k d d d n --== h 解:因为MA 模型z k D z u k ()()()=-1,其中 n n z d z d d z D ---+++= 1101)(,从而 )()1()()(10n k u d k u d k u d k z n -++-+= 所以当定义ττθ)](,),1(),([)(,],,,[10n k u k u k u k d d d n --== h ,则有最小二乘格式: )()()()()(0 k e k h k e k h d k z n i i i +=+=∑=τ , 其中e(k)是误差项。 2-3、设)}({k e 是一个平稳的有色噪声序列,为了考虑这种噪声对辨识的影响,需要 用一种模型来描述它。请解释如何用白噪声和表示定理把)(k e 表示成AR 模型、MA 模型和ARMA 模型。 解:根据表示定理,在一定条件下,有色噪声e(k)可以看成是由白噪声v(k)驱动的线 性环节的输出,该线性环节称为成形滤波器,其脉冲传递函数可写成 ) () ()(1 11 ---=z C z D z H 即 )()()()(1 1k v z D k e z C --= 其中 c c n n z c z c z C ---+++= 1 11 1)( d d n n z d z d z D ---+++= 1 111)(

现代控制理论课程报告

现代控制理论课程总结 学习心得 从经典控制论发展到现代控制论,是人类对控制技术认识上的一次飞跃。现代控制论是用状态空间方法表示,概念抽象,不易掌握。对于《现代控制理论》这门课程,在刚拿到课本的时候,没上张老师的课之前,咋一看,会认为开课的内容会是上学期学的控制理论基础的累赘或者简单的重复,更甚至我还以为是线性代数的复现呢!根本没有和现代控制论联系到一起。但后面随着老师讲课的风格的深入浅出,循循善诱,发现和自己想象的恰恰相反,张老师以她特有的讲课风格,精心准备的ppt 课件,向我们展示了现代控制理论发展过程,以及该掌握内容的方方面面,个人觉得,我们不仅掌握了现代控制理论的理论知识,更重要的是学会了掌握这门知识的严谨的逻辑思维和科学的学习方法,对以后学习其他知识及在工作上的需要大有裨益,总之学习了这门课让我受益匪浅。 由于我们学习这门课的课时不是很多,并结合我们学生学习的需求及所要掌握的课程深入程度,张老师根据我们教学安排需要,我们这学期学习的内容主要有:1.绪论;2.控制系统的状态表达式;3.控制系统状态表达式的解;4.线性系统的能空性和能观性;5.线性定常系统的综合。而状态变量和状态空间表达式、状态转移矩阵、系统的能控性与能观性以及线性定常系统的综合是本门课程的主要学习内容。当然学习的内容还包括老师根据多年教学经验及对该学科的研究的一些深入见解。 在现代科学技术飞速发展中,伴随着学科的高度分化和高度综合,各学科之间相互交叉、相互渗透,出现了横向科学。作为跨接于自然科学和社会科学的具有横向科学特点的现代控制理论已成为我国理工科大学高年级的必修课。 经典控制理论的特点 经典控制理论以拉氏变换为数学工具,以单输入-单输出的线性定常系统为主要的研究对象。将描述系统的微分方程或差分方程变换到复数域中,得到系统的传递函数,并以此作为基础在频率域中对系统进行分析和设计,确定控制器的结构和参数。通常是采用反馈控制,构成所谓闭环控制系统。经典控制理论具有明显的局限性,突出的是难以有效地应用于时变系统、多变量系统,也难以揭示系统更为深刻的特性。当把这种理论推广到更为复杂的系统时,经典控制理论就显得无能为力了,这是因为它的以下几个特点所决定。 1.经典控制理论只限于研究线性定常系统,即使对最简单的非线性系统也是无法处理的;这就从本质上忽略了系统结构的内在特性,也不能处理输入和输出皆大于1的系统。实际上,大多数工程对象都是多输入-多输出系统,尽管人们做了很多尝试,但是,用经典控制理论设计这类系统都没有得到满意的结果;2.经典控制理论采用试探法设计系统。即根据经验选用合适的、简单的、工程上易于实现的控制器,然后对系统进行分析,直至找到满意的结果为止。虽然这种设计方法具有实用等很多完整,从而促使现代控制理论的发展:对经典理论的精确化、数学化及理论化。优点,但是,在推理上却是不能令人满意的,效果也

系统辨识与自适应控制论文

XXXXXXXXXX 系统辨识与自适应控制课程论文 题目:自适应控制综述与应用 课程名称:系统辨识与自适应控制 院系:自动化学院 专业:自动化 班级:自动化102 姓名: XXXXXX 学号: XXXXXXXXX 课程论文成绩: 任课教师: XXXXX 2013年 11 月 15 日

自适应控制综述与应用 一.前言 对于系统辨识与自适应控制这门课,前部分主要讲了系统辨识的经典方法(阶跃响应法、频率响应法、相关分析法)与现代方法(最小二乘法、随机逼近法、极大似然法、预报误差法)。对于系统辨识,简单的说就是数学建模,建立黑箱系统的输入输出关系;而其主要分为结构辨识(n)与参数辨识(a、b)这两个任务。 由于在课上刘老师对系统辨识部分讲的比较详细,在此不再赘述,下面讨论自适应控制部分的相关内容。 对于自适应控制的概念,我觉得具备以下特点的控制系统,可以称为自适应控制系统: 1、在线进行系统结构和参数辨识或系统性能指标的度量,以便得到系统当前状态的改变情况。 2、按一定的规律确定当前的控制策略。 3、在线修改控制器的参数或可调系统的输入信号。 二.自适应控制综述 1.常规控制系统与自适应控制系统比较 (1)控制器结构不同 在传统的控制理论与控制工程中,常规控制系统的结构主要由控制器、控制对象以及反馈控制回路组成。 而自适应控制系统主要由控制器、控制对象、自适应器及反馈控制回路和自适应控制回路组成。 (2)适用的对象与条件不同 传统的控制理论与控制工程中,当对象是线性定常、并且完全已知的时候,才能进行分析和控制器设计。无论采用频域方法,还是状态空间方法,对象一定是已知的。这类方法称为基于完全模型的方法。在模型能够精确地描述实际对象时,基于完全模型的控制方法可以进行各种分析、综合,并得到可靠、精确和满意的控制效果。 然而,有一些实际被控系统的数学模型是很难事先通过机理建模或离线系统辨识来确知的,或者它们的数学模型的某些参数或结构是处于变化之中的.对于这类事先难以确定数学模型的系统,通过事先整定好控制器参数的常规控制往往难以对付。 面对上述系统特性未知或经常处于变化之中而无法完全事先确定的情况,如何设计一个满意的控制系统,使得能主动适应这些特性未知或变化的情况,这就 是自适应控制所要研究解决的问题.自适应控制的基本思想是:在控制系统的运行过程中,系统本身不断地测量被控系统的状态、性能和参数,从而“认识”或“掌握”系统当前的运行指标并与期望的指标相比较,进而作出决策,来改变控制器的结构、参数或根据自适应规律来改变控制作用,以保证系统运行在某种意义下的最优或次优状态。按这种思想建立起来的控制系统就称为自适应控制系统。

闭环系统辨识 报告

闭环系统辨识 气动参数辨识在导弹研发中的作用 气动力参数辨识是飞行器系统辨识中发展最为成熟的一个领域。对于导弹而言,采用系统辨识技术从飞行试验数据获取导弹空气动力特性,已经成为导弹研制和评估程序的重要组成部分。导弹气动参数辨识的作用主要体现在以下几个方面: (1)验证气动力数值计算和风洞试验结果。如前所述,数值计算和风洞试验各有其优点,也各有其局限性,必须通过飞行试验进行验证。如果飞行试验气动参数辨识结果与数值计算和风洞试验结果一致,则说明数值计算和风洞试验结果是正确的;如果不一致,就要找出产生不一致的原因,通过相关性分析,将地面试验结果换算到真实飞行状态下。 (2)为导弹系统仿真提供准确的气动参数。在导弹打靶仿真中,控制系统的执行元件、旋转台、控制系统、目标源等都可以采用实物,但导弹所受外作用力,特别是空气动力是飞行状态参数的函数,无法用实物实现,应代之以数学模型。该数学模型是否正确决定了系统仿真的置信度,因此,采用系统辨识技术,辨识出导弹的外作用力数学模型,特别是气动力数学模型,是导弹系统仿真技术的关键环节之一。 (3)为导弹飞行控制系统设计提供准确的气动参数。控制律设计取决于导弹的气动特性。如果控制律设计所依赖的气动数据误差过大,可能会导致控制失效;如果气动数据误差带很大,为了满足控制系统鲁棒性要求,或者控制精度降低,或者对指令的响应时间加长。利用飞行试验气动参数辨识结果,经过相关性分析给出的导弹气动特性,其可信度可望显著提高,用于飞行控制律设计,可以大大提高控制系统的性能。 (4)自适应控制。自适应控制系统能根据系统的状态和环境参数变化,自动调节控制系统的相应系数,以达到最佳控制状态。系统实时辨识是自适应控制系统的重要组成部分。对于导弹,机动性与导弹的静稳定裕度和动压关系很大,实

(完整版)自动控制原理试题及答案

一、 单项选择题(每小题1分,共20分) 1. 系统和输入已知,求输出并对动态特性进行研究,称为( C ) A.系统综合 B.系统辨识 C.系统分析 D.系统设计 2. 惯性环节和积分环节的频率特性在( A )上相等。 A.幅频特性的斜率 B.最小幅值 C.相位变化率 D.穿越频率 3. 通过测量输出量,产生一个与输出信号存在确定函数比例关系值的元件称为( C ) A.比较元件 B.给定元件 C.反馈元件 D.放大元件 4. ω从0变化到+∞时,延迟环节频率特性极坐标图为( A ) A.圆 B.半圆 C.椭圆 D.双曲线 5. 当忽略电动机的电枢电感后,以电动机的转速为输出变量,电枢电压为输入变量时, 电动机可看作一个( B ) A.比例环节 B.微分环节 C.积分环节 D.惯性环节 6. 若系统的开环传 递函数为2) (5 10+s s ,则它的开环增益为( C ) A.1 B.2 C.5 D.10 7. 二阶系统的传递函数5 2 5)(2++=s s s G ,则该系统是( B ) A.临界阻尼系统 B.欠阻尼系统 C.过阻尼系统 D.零阻尼系统 8. 若保持二阶系统的ζ不变,提高ωn ,则可以( B ) A.提高上升时间和峰值时间 B.减少上升时间和峰值时间 C.提高上升时间和调整时间 D.减少上升时间和超调量 9. 一阶微分环节Ts s G +=1)(,当频率T 1=ω时,则相频特性)(ωj G ∠为( A ) A.45° B.-45° C.90° D.-90° 10.最小相位系统的开环增益越大,其( D ) A.振荡次数越多 B.稳定裕量越大 C.相位变化越小 D.稳态误差越小 11.设系统的特征方程为()0516178234=++++=s s s s s D ,则此系统 ( A ) A.稳定 B.临界稳定 C.不稳定 D.稳定性不确定。 12.某单位反馈系统的开环传递函数为:()) 5)(1(++=s s s k s G ,当k =( C )时,闭环系统临界稳定。 A.10 B.20 C.30 D.40 13.设系统的特征方程为()025103234=++++=s s s s s D ,则此系统中包含正实部特征的个数 有( C ) A.0 B.1 C.2 D.3 14.单位反馈系统开环传递函数为()s s s s G ++=652,当输入为单位阶跃时,则其位置误差为( C ) A.2 B.0.2 C.0.5 D.0.05

系统辨识

作业1 如图1.1所示一阶系统,系统传递函数为G(s)=1/(0.1s+1),如果采用M序列作为输入信号进行系统辨识,采用5级移位寄存器产生M序列作为输入信号,取M序列的时钟脉冲△=15ms,a=2辨识该系统的脉冲响应。并说明取5级移位寄存器合理与否。 图1.1 一阶RC系统 答: 1.解题步骤 1.初始化参数,设置模型参数,设置产生M序列的各个关键参数; 2.利用产生伪随机二进制序列信号的函数getPRBS产生M序列,并作为 系统输入; 3.通过系统模型,产生系统输出,并将输入输出画在同一图中; 4.计算系统输入输出相关函数R xy; 5.计算系统脉冲估计值ghat和系统真实脉冲输出g 2.程序清单 主程序 clc; close all; clear all; %% Initialization R = 100e3; % system initialization resistance=100k ohm C = 1e-6; % capacitance=1uf tc = R*C; % Time Constant % generate M-sequence n=5; a=2; % Level of the PRBS

del = 15e-3; % clock pulse period N=2^n-1; % Period of M sequence total=2*N; % Generate m-sequence using the 'getPRBS' function Out = getPRBS(n,a,del,total); % Generate response y(t) of the system s = tf('s'); G = 1/(tc*s+1); tf = total*del; tim = 0:del:tf-del; y = lsim(G, Out, tim); %plot input and output of the system figure stairs(tim,Out); axis([0 1.0 -2.5 2.5]); hold on plot(tim,y,'r'); hold off % Compute Rxy(i*del) sum = 0.0; Rxy = []; iDel_vec=[]; for i=1:N tau=i-1; iDel_vec=[iDel_vec;tau*del]; for j=1:N sum=sum+sign(Out(j))*y(j+tau); end Rxy_i = (a/N)*sum; sum=0.0; Rxy = [Rxy; tau Rxy_i]; end % Compute ghat & g ind = length(Rxy); C = -Rxy(ind, 2); S = (N+1)*a^2*del/N; Rxy_iDel = Rxy(:,2); ghat=(Rxy_iDel+ C )/S; ghat(1)=2*ghat(1); g = 10*exp(-10.*iDel_vec);

自适应控制习题(系统辨识)(2020年整理).pdf

自适应控制习题 (徐湘元,自适应控制理论与应用,电子工业出版社,2007) 【2-1】 设某物理量Y 与X1、X2、X3的关系如下:Y=θ1X 1+θ2X 2+θ3X 3 由试验获得的数据如下表。试用最小二乘法确定模型参数θ1、θ2和θ3 X1: 0.62 0.4 0.42 0.82 0.66 0.72 0.38 0.52 0.45 0.69 0.55 0.36 X2: 12.0 14.2 14.6 12.1 10.8 8.20 13.0 10.5 8.80 17.0 14.2 12.8 X3: 5.20 6.10 0.32 8.30 5.10 7.90 4.20 8.00 3.90 5.50 3.80 6.20 Y: 51.6 49.9 48.5 50.6 49.7 48.8 42.6 45.9 37.8 64.8 53.4 45.3 【2-3】 考虑如下模型 )()(3.03.115.0)(212 1t w t u z z z z t y ++?+=???? 其中w(t)为零均值、方差为1的白噪声。根据模型生成的输入/输出数据u(k)和y(k),分别采用批处理最小二乘法、具有遗忘因子的最小二乘法(λ=0.95)和递推最小二乘法估计模型参数(限定数据长度N 为某一数值,如N=150或其它数值),并将结果加以比较。 【2-4】 对于如下模型 )()1.065.01()()5.0()()15.08.01(213221k w z z k u z z k y z z ??????+?++=+? 其中w(k)为零均值、方差为1的白噪声。根据模型生成的输入/输出数据u(k)和y(k),分别采用增广最小二乘法和随机逼近法进行模型参数估计,并比较结果。 (提示:w(t)可以用MATLAB 中的函数“randn ”产生)。 【3-1】 设有不稳定系统: )()9.01()()1(111k u z z k y z ???+=? 期望传递函数的分母多项式为)5.01()(11???=z z Am ,期望输出m y 跟踪参考输入r y ,且无稳态误差。试按照极点配置方法设计控制系统,并写出控制表达式。 【3-2】 设有被控过程: )()2.11()()6.07.11(1221k u z z k y z z ????+=+? 给定期望传递函数的分母多项式为)08.06.01()(211???+?=z z z A m ,试按照极点配置方法设计控制系统,使期望输出无稳态误差,并写出控制表达式u(k)。

系统辨识

系 统 辨 识 作 业 系统辨识作业: ?已知某系统为单输入/单输出系统,其测量噪声为有色噪声,分布未知。 现给出一个实验样本(如下表所示),求该系统模型。 说明: 可采用GLS ,ELS ,IV 等,要定阶,要比较仅用RLS 的计算结果 一、问题分析 在估计模型参数时需要已知模型的阶数,但是由于本系统模型阶数也是未知的,所以本系统需要先由输入/输出数据通过辩识得出系统的阶数。然后根据辨识的系统阶数再分析求解系统模型。 二、模型阶数的辨识 按照品质指标“残差平方总和”定阶,如高阶系统模型相应的系数为零,则可退化成相应的低阶系统即低阶模型可视为高阶模型的特例。理论上高阶模型的精度不低于低阶模型,但是考虑到计算机的舍入误差的影响,过高的阶数亦能引起模型精度的下降。一般说低阶模型描述粗糙,高阶模型精度高,但是代价亦大。根据逼近的观点,定阶往往是考虑多种因素的折衷。定阶一般是按照假设——检验的步骤进行的,检验过程中往往带有主观成分。 一般说来低阶模型描述粗糙,高阶模型精度高。残差平方总和J(n)是模型阶数的函数 在不同的模型阶数的假设下,参数估计得到的J(n)值亦不同。定阶的最简单办法是直接用J(n)。设模型阶数的“真值”为n 0 ,当n < n 0 时随着n 的增加,J(n)值将明显的下降;而当n ≥ n 0 时随着n 的增加,J(n)值变化将不显著。因此,由J(n)曲线随着n 的增加最后一次陡峭下降的n 值定做n 的估计值。用数理统计的检验方法,判断n 的增加使得J(n)值改善是否明显。 讨论如下 (1).当n=1时程序如下: clear u=zeros(100,1);%构造输入矩阵 z=zeros(100,1);%构造输出矩阵 u=[-0.93249 0.34935 0.76165 -0.9964 -0.38894 -0.12288 0.021565 -0.49555 -0.61624 -1.912 0.22207 -0.31231 -0.17866 -1.8356 -0.26472 1.7642 -1.0418 1.1146 -2.0856 0.8152 1.5094 -0.5822 0.61097 0.35521 2.5907 1.5843 -0.9603 -0.27341 0.39947 0.17493 -1.7451 0.8112 1.2645 1.5682 0.63959 -0.47757 0.99697 0.058774 -0.16174 -1.2928 -0.04722 0.73182 -0.19644 0.091783 -1.1908 -0.90716 0.85388 0.33836 0.74074 0.54181 0.15676 -0.50569 -0.17521 1.3255 -2.488 0.50261 -1.1533 0.36407 0.65283 -0.05983 ∑=-=N k T K k y n J 12 ) )(()(θ?

系统辨识报告

系统辨识实验报告

实验一 最小二乘法 1 最小二乘算法 1.1 基本原理 系统模型 )()()()()(11k n k u z B k z z A +=-- a a n n z a z a z a z A ----++++= 221111)( b b n n z b z b z b z B ----+++= 22111)( 最小二乘格式 )()()(k n k h k z T +=θ [][] ?????=------=T n n T b a b a b b a a n k u k u n k z k z k h 11)()1()()1()(θ 对于L k ,,2,1 =,构成线性方程组 L L L n H z +=θ 式中, []T L L z z z z )()2()1( = []T L L n n n n )()2()1( = ? ????? ???? ??--------------= ??????????????=)()1()()1()2()1()2()1()1() 0() 1()0()()2()1(b a b a b a T T T L n L u L u n L z L z n u u n z z n u u n z z L h h h H 参数估计值为 ()L T L L T L LS z H H H 1 ?-=θ 1.2 Matlab 编程 % 基本最小二乘法LS clear;clc A=ones(5,1);B=ones(4,1);%A 为首1多项式,B 中体现时滞(d=1) na=length(A)-1;nb=length(B); load dryer2

系统辨识试卷B参考答案

襄樊学院2008-2009学年度上学期《系统辨识》试题 B卷参考答案及评分标准 一、选择题:(从下列各题的备选答案中选出一个或几个正确答案,并将其代号写在题干后面的括号内。答案选错或未选全者,该题不得分。每空2分,共12分) 1、(D) 2、(A) 3、(C) 4、(ABC) 5、(BCD) 6、(B) 二、填空题:(每空2分,共14分) 1、图解 2、阶次和时滞 3、极大似然法和预报误差法 4、渐消记忆的最小二乘递推算法和限定记忆的最小二乘递推算法 三、判断题(下列命题你认为正确的在题后括号内打“√”;错误的打“×”并改正;每小题2分,共20分)(注:正确的题目括号内打“√”得2分,打“×”得0分;错误的题目括号内打“×”得1分,改正正确再得1分,错误的题目括号内打“√”得0分;) 1、(×)非零→零 2、(√) 3、(×)完全相同→不完全相同 4、(√) 5、(×)不相同→相同 6、(√) 7、(√) 8、(√) 9、(×)灰箱→白箱 10、(×)不需要→需要 四、简答题:(回答要点,并简明扼要作解释,每小题6分,共18分) 1、答:计算中用一个数值来表示对观测数据的相对的“信任程度”,这就是权。(2分) 对于时变参数系统,其当前的观测数据最能反映被识对象当前的动态特性,数据愈“老”,它偏离当前对象特性的可能性愈大。因此要充分重视当前的数据而将“过时的”、“陈旧的”数据逐渐“遗忘”掉,这就是加权的概念。(2分)具体的方法是,每当取得一个新的量测数据,就将以前的所有数据都乘上一个加权因子ρ(0<ρ<1),这个加权因子体现出对老数据逐步衰减的作用,所以ρ也可称为衰减因子,因此在L次观测的基础上,在最小二乘准则中进行了某ρ=μ(0<μ<1),选择不同的μ就得到不同的加权效果。μ愈小,表示将过种加权,即取2 去的数据“遗忘”得愈快。(2分) 2、答:相关分析法的主要优点是由于M序列信号近似于白噪声,噪声功率均匀分布于整个频带,从而对系统的扰动甚微,保证系统能正常工作(1.5分)。此外。因为相关函数的计算是一种

系统辨识大作业加学习心得

论文 系统辨识 姿态角控制 1.系统辨识概述 辨识、状态估计和控制理论是现代控制理论三个相互渗透的领域。辨识和状态估计离不开控制理论的支持,控制理论的应用又几乎不能没有辨识和状态估计技术。随着控制过程复杂性的提高,控制理论的应用日益广泛,但其实际应用不能脱离被控对象的数学模型。然而在大多数情况下,被控对象的数学模型是不知道的,或者在正常运行期间模型的参数可能发生变化,因此利用控制理论去解决实际问题时,首先需要建立被控对象的数学模型。系统辨识正是适应这一需要而形成的,他是现代控制理论中一个很活跃的分支。社会科学和自然科学领域已经投入相当多的人力去观察、研究有关的系统辨识问题。 系统辨识是建模的一种方法,不同的学科领域,对应着不同的数学模型。从某种意义上来说,不同学科的发展过程就是建立他的数学模型的过程。辨识问题可以归结为用一个模型来表示可观系统(或将要改造的系统)本质特征的一种演算,并用这个模型吧对客观系统的理解表示成有用的形式。当然可以刻有另外的描述,辨识有三个要素:

数据,模型类和准则。辨识就是按照一个准则在一组模型类中选择一个与数据拟合得最好的模型。总而言之,辨识的实质就是从一组模型类中选择一个模型,按照某种准则,使之能最好地拟合所关心的实际过程的静态或动态特性。 通过辨识建立数学模型的目的是估计表征系统行为的重要参数,建立一个能模仿真实系统行为的模型,用当前可测量的系统的输入和输出预测系统输出的未来演变,以及设计控制器。对系统进行分析的主要问题是根据输入时间函数和系统的特性来确定输出信号。对系统进行控制的主要问题是根据系统的特性设计控制输入,使输出满足预先规定的要求。而系统辨识所研究的问题恰好是这些问题的逆问题。通常,预先给定一个模型类{}M(即给定一类已知结构的模型),一类输入信号u和等价准则(,)JLyyM(一般情况下,J是误差函数,是过程输出y和模型输出yM的一个泛函);然后选择是误差函数J达到最小的模型,作为辨识所要求的结果。系统辨识包括两个方面:结构辨识和参数估计。在实际的辨识过程中,随着使用的方法不同,结构辨识和参数估计这两个方面并不是截然分开的,而是可以交织在一起进行的 一、控制对象 本文采用了控制不同电机转速组合的方法,对四轴旋翼蝶形飞行器进行姿态控制,使四旋翼蝶形飞行器在不同姿态下飞行时具有较好的性能。为了实现四轴旋翼蝶形飞行器的飞行控制,对飞行的控制系统进行了初步的设计,并给出了设计流程。同时利用matlab对四轴旋翼

期末考试试题集-自动控制原理(含完整答案)

期末考试-复习重点 自动控制原理1 一、单项选择题(每小题1分,共20分) 1. 系统和输入已知,求输出并对动态特性进行研究,称为( ) A.系统综合 B.系统辨识 C.系统分析 D.系统设计 2. 惯性环节和积分环节的频率特性在( )上相等。 A.幅频特性的斜率 B.最小幅值 C.相位变化率 D.穿越频率 3. 通过测量输出量,产生一个与输出信号存在确定函数比例关系值的元件称为( ) A.比较元件 B.给定元件 C.反馈元件 D.放大元件 4. ω从0变化到+∞时,延迟环节频率特性极坐标图为( ) A.圆 B.半圆 C.椭圆 D.双曲线 5. 当忽略电动机的电枢电感后,以电动机的转速为输出变量,电枢电压为输入变量时,电动机可看作一个( ) A.比例环节 B.微分环节 C.积分环节 D.惯性环节 6. 若系统的开环传 递函数为2) (5 10+s s ,则它的开环增益为( ) A.1 B.2 C.5 D.10 7. 二阶系统的传递函数5 2 5)(2++=s s s G ,则该系统是( ) A.临界阻尼系统 B.欠阻尼系统 C.过阻尼系统 D.零阻尼系统 8. 若保持二阶系统的ζ不变,提高ωn ,则可以( ) A.提高上升时间和峰值时间 B.减少上升时间和峰值时间 C.提高上升时间和调整时间 D.减少上升时间和超调量 9. 一阶微分环节Ts s G +=1)(,当频率T 1=ω时,则相频特性)(ωj G ∠为( )

A.45° B.-45° C.90° D.-90° 10.最小相位系统的开环增益越大,其( ) A.振荡次数越多 B.稳定裕量越大 C.相位变化越小 D.稳态误差越小 11.设系统的特征方程为()0516178234=++++=s s s s s D ,则此系统 ( ) A.稳定 B.临界稳定 C.不稳定 D.稳定性不确定。 12.某单位反馈系统的开环传递函数为:()) 5)(1(++=s s s k s G ,当k =( )时,闭环系统临界稳定。 A.10 B.20 C.30 D.40 13.设系统的特征方程为()025103234=++++=s s s s s D ,则此系统中包含正实部特征的个数有( ) A.0 B.1 C.2 D.3 14.单位反馈系统开环传递函数为()s s s s G ++=652,当输入为单位阶跃时,则其位置误差为( ) A.2 B.0.2 C.0.5 15.若已知某串联校正装置的传递函数为1 101)(++=s s s G c ,则它是一种( ) A.反馈校正 B.相位超前校正 C.相位滞后—超前校正 D.相位滞后校正 16.稳态误差e ss 与误差信号E (s )的函数关系为( ) A.)(lim 0s E e s ss →= B.)(lim 0 s sE e s ss →= C.)(lim s E e s ss ∞→= D.)(lim s sE e s ss ∞ →= 17.在对控制系统稳态精度无明确要求时,为提高系统的稳定性,最方便的是( ) A.减小增益 B.超前校正 C.滞后校正 D.滞后-超前 18.相位超前校正装置的奈氏曲线为( )

相关文档