matlab减小数据方差,最小方差控制

各位大神好,根据matlab文件编了个相应的simulink仿真,但是输出一直发散,该怎么查原因啊,另外各位大神有自适应控制其他的simulink仿真吗?可否发我,急需!这是相应的matlab代码

%最小方差控制(MVC)

clear all; close all;

a=[1 -1.7 0.7]; b=[1 0.5]; c=[1 0.2]; d=4; %对象参数

na=length(a)-1; nb=length(b)-1; nc=length(c)-1; %na、nb、nc为多项式A、B、C阶次

nf=nb+d-1; %nf为多项式F的阶次

L=400; %控制步数

uk=zeros(d+nb,1); %输入初值:uk(i)表示u(k-i);

yk=zeros(na,1); %输出初值

yrk=zeros(nc,1); %期望输出初值

xik=zeros(nc,1); %白噪声初值

yr=10*[ones(L/4,1);-ones(L/4,1);ones(L/4,1);-ones(L/4+d,1)]; %期望输出

xi=sqrt(0.1)*randn(L,1); %白噪声序列

[e,f,g]=sindiophantine(a,b,c,d); %求解单步Diophantine方程

for k=1:L

time(k)=k;

y(k)=-a(2:na+1)*yk+b*uk(d:d+nb)+c*[xi(k);xik];%采集输出数据

u(k)=(-f(2:nf+1)*uk(1:nf)+c*[yr(k+d:-1:k+d-min(d,nc));yrk(1:nc-d)]-g*[y(k);yk(1:na-1)])/f(1);%求控制量

%更新数据

for i=d+nb:-1:2

uk(i)=uk(i-1);

end

uk(1)=u(k);

for i=na:-1:2

yk(i)=yk(i-1);

end

yk(1)=y(k);

for i=nc:-1:2

yrk(i)=yrk(i-1);

xik(i)=xik(i-1);

end

if nc>0

yrk(1)=yr(k);

xik(1)=xi(k);

end

end

MVC.png

(19.12 KB, 下载次数: 5)

2015-12-25 09:29 上传

442a53943febe9465fc072b4fbe10813.gif

b2a5a3e0dcc7d508e00275fe42fce1b5.gif

最小方差

128f590af7a4b668a1a48ce9b9757176.png

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值