基于Matlab的最小方差控制仿真

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
  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值