Markov参数算法编程-Read_第1页
Markov参数算法编程-Read_第2页
Markov参数算法编程-Read_第3页
Markov参数算法编程-Read_第4页
Markov参数算法编程-Read_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Markov 参数算法编程 、 Markov 参数的定义 Markov 参数是系统能观测性规范型实现时的重要参数,他给出了系统能观测性规范型 的一种简单的实现方法,应用十分广泛。其定义如下: 对于系统: a(s) b(s) U(s) b1 s2 b2s b3 32 s a1s a2s a3 它的可观标准型实现如图 1 所示。 1 b1 2 b2 a1b1 3 b3 a1b2 a2b1 a1b1 给出更紧凑的系数表达式为: 若设 1 a2 3 0 1 b1 0 b2 1 b3 1 H(s) c(sI A) 1b cAdj ( sI A)b det(sI A) b(s)his i a(s) 1 可

2、以证明 i hi , i 1, ,n hi 就叫做系统的马尔科夫 (Markov) 参数。它在研究系统状态空间实现的各种代数性质时, 是十分重要的。它可以解释为系统的脉冲响应,即 1 At h(t) L 1H (s) ceAtb 则 cAib hi 1 dii h(t) , i 0,1, i i 1 dt i t 0 、程序流程图 Markov 本程序即由给定的系统传递函数,写出系统的控制器规范型,最后计算系统的 参数,流程图如图 2 所示。 图 2 Markov 参数算法流程图 三、程序运行举例 举例如下: 若给定系统传递函数为: H(s) s2 3s 1 s3 2s2 1 求系统的 Mar

3、kov 参数。 程序运行结果如下: * 欢迎使用 Markov 参数算法! *作者:杨智勇 *版本: 1.0 *2002 年 5 月 1 日 请输入分母的最高阶次 : 3 请输入分子的各阶系数 : ( 例如:若分子为 b1*S2+b2*S1+b3, 则应输入的系数为 b1,b2,b3) 1 3 1 请输入分母的各阶系数 : (例如:若分母为 S3+a2*S1+a3, 则应输入的系数为 0,a2,a3) -2 0 -1 系统的控制器型规范型的矩阵 Ac , bc ,cc 为: Ac= -2.000000 0.000000 -1.000000 1.000000 0.000000 0.000000

4、0.000000 1.000000 0.000000 bc= 1.000000 0.000000 0.000000 cc= 1.000000 3.000000 1.000000 计算的 Markov 参数为: h1=1.000000 h2=1.000000 h3=-1.000000 四、程序清单 Markov 参数算法程序清单为: #include stdlib.h #include stdio.h void main() register int i, j, k; int denoindex; float m; float *Mata; float *Matb,*Matc,*Mat,*Cof

5、; *n); *n); *n); *n); printf( *n); printf(*欢迎使用 Markov 参数算法! printf(* 作者:杨智勇 printf(*版本: 1.0 printf(*2002年 5月 1日 printf(*nn); printf( 请输入分母的最高阶次 :n); scanf(%d, printf( 请输入分子的各阶系数 :n); printf( 例如:若分子为 b1*S2+b2*S1+b3, 则应输入的系数为 b1,b2,b3)n); Matc = (float *)malloc(denoindex*sizeof(float);/ 输入 c 矩阵 if(Ma

6、tc = NULL) printf( 内存分配不足! ); exit(1); for(i = 0;i denoindex ;i+) scanf(%f, Matci = m; printf( 请输入分母的各阶系数 :n);/输入 a 矩阵 printf( 例如:若分母为 S3+a2*S1+a3, 则应输入的系数为 0,a2,a3)n); Mata =(float *) malloc(denoindex); if(Mata = NULL) printf( 内存分配不足! ); exit(1); for(i = 0; i denoindex; i+) Matai = (float*)malloc(d

7、enoindex*sizeof(float); if(Matai = NULL) printf( 内存分配不足! ); exit(1); for(j = 0; j denoindex ; j+) /读入 a 阵第一行 scanf(%f, Mata0j = m; /给 a 阵其他元素赋值 for(i = 1; i denoindex ; i+) for(j = 0; j denoindex; j+) if(j = i-1) Mataij = 1; else Mataij = 0; Matb =(float*) malloc(denoindex*sizeof(float);/ 输入 b 矩阵 if

8、(Matb = NULL) printf( 内存分配不足! ); exit(1); Matb0 = 1.0; for (i = 1; i denoindex; i+) Matbi = 0.0; /输出系统控制器性规范型矩阵 printf(系统的控制器型规范型的矩阵 Ac ,bc,cc为:n); /输出 Ac printf(Ac=t); for (i = 0; i denoindex; i+) for(j = 0; j denoindex; j+) printf(%ft,Mataij); printf(nt); printf(bbbbbbbb);/输出 bc printf(bc=t); for

9、(i = 0; i denoindex; i+) printf(%ft,Matbi); printf(n);/输出 cc printf(cc=t); for (i = 0; i denoindex; i+) printf(%ft,Matci); printf(n); / 计算 Markov 参数 Cof = (float*)malloc(denoindex*sizeof(float); if(Cof = NULL) printf( 内存分配不足! ); exit(1); Mat =(float*) malloc(denoindex*sizeof(float); if(Mat = NULL) p

10、rintf( 内存分配不足! ); exit(1); printf( 计算的 Markov 参数为: n); for(k = 0; k denoindex; k+) if(k = 0)/ 计算第一个 Markov 参数 Cofk = 0; for(j = 0; j denoindex; j+) Cofk = Cofk + Matcj*Matbj; printf(h%d=%ft,k+1,Cofk); else for(j = 0; j denoindex; j+)/ 计算 c*A 矩阵 m = 0; for(i = 0; i denoindex; i+) m = m + Matci * Mataij; Matj = m; for(i = 0; i denoindex; i+) Matci = Mati; Cofk = 0;/ 计算其他 Markov 参数 for(j = 0; j denoindex; j+) Cofk = Cofk + Matcj*Matbj; print

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论