基于Matlab的最小方差控制仿真
2016-01-14 15:38
781 查看
close all; clear all; clc; %*********************系统初始化*********************% a=[1 -1.7 0.7]; b=[1 0.5]; c=[1 0.2]; k=4; %对象参数,k为延时参数 na=length(a)-1; nb=length(b)-1; nc=length(c)-1; %na、nb、nc为多项式A、B、C阶次 nf=nb+k-1; %nf为多项式F的阶次 K=400; %控制步数 ut=zeros(k+nb,1); %输入历史的初值,u(k-1),u(k-2)···u(k-d-nb);以下同理 yt=zeros(na,1); %输出历史的初值 yrt=zeros(nc,1); %期望输出历史的初值 wt=zeros(nc,1); %白噪声历史的初值 yr=10*[ones(K/2,1);-ones(K/2+k,1)];%期望输出 w=sqrt(0.1)*randn(K,1); %白噪声序列 [d,f,e]=sindiophantine(a,b,c,k); %求解单步Diophantine方程(函数内容见下一篇文章) %*********************迭代控制过程*********************% for t=1:K y(t)=-a(2:na+1)*yt+b*ut(k:k+nb)+c*[w(t);wt];%采集输出数据 %求控制量u(k)=[C(Z)*yr(k+d)-E(Z)*y(k)]/[B(Z)*D(Z)] u(t)=(-f(2:nf+1)*ut(1:nf)+c*[yr(t+k:-1:t+k-min(k,nc));yrt(1:nc-k)]-e*[y(t);yt(1:na-1)])/f(1); %更新数据 for i=k+nb:-1:2 ut(i)=ut(i-1); end ut(1)=u(t); for i=na:-1:2 yt(i)=yt(i-1); end yt(1)=y(t); for i=nc:-1:2 yrt(i)=yrt(i-1); wt(i)=wt(i-1); end if nc>0 yrt(1)=yr(t); wt(1)=w(t); end end %*********************显示图像*********************% subplot(2,1,1); plot([1:K],yr(1:K),'r',[1:K],y); xlabel('k'); ylabel('y_r(k),y(k)'); legend('y_r(k)','y(k)'); subplot(2,1,2); plot([1:K],u); xlabel('k'); ylabel('u(k)');
相关文章推荐
- MATLAB实现频数直方图——hist的使用
- Matlab转C++项目中遇到的问题
- matlab调用c程序(转载)
- Normal distribution正态分布
- 机器学习-Matlab 编程常用命令速览(Ng-ML-class Octave/Matlab Tutorial)
- Matlab生成M序列的伪随机码
- 对MATLAB读取同一路径下多个txt或mat文件方法探讨
- MATLABtextscan函数中参数delimiter的使用
- MATLAB把pgm格式转换为jpg
- 命令行下运行 Matlab 及 函数
- MATLAB 损失函数画图
- matlab中figure图片大小修改
- matlab恢复默认界面布局
- Java中使用MATLAB作图
- 迪克斯特拉(Dijkstra)算法之MATLAB实现
- Matlab分类器大全
- matlab中安装编译器
- 一个基于Matlab的简单Gui设计
- Matlab中legend的用法
- MATLAB实现将图像转换为素描(简笔画)风格