广义预测控制项目matlab源码程序 - matlab通信信号 - 谷速源码
下载频道> 资源分类> matlab源码> 通信信号> 广义预测控制项目matlab源码程序

标题:广义预测控制项目matlab源码程序
分享到:

所属分类: 通信信号 资源类型:程序源码 文件大小: 8.77 KB 上传时间: 2019-07-16 22:07:51 下载次数: 8 资源积分:1分 提 供 者: jiqiren 广义预测控制项目matlab源码程序
内容:
%close all
%clear all
%Parameter
%Mode
%mode=1 tao does not change, while a changes
%mode=2 tao changes , while a does not change
Mode=1;
 
%System structure
na=2;
nb=1;
 
 
%predictive control parameter(预测控制参数)
N=5;    %predictive time domain(预测时域)
Nu=2;   %control time domain  (控制时间域)
 
%identification parameters(识别参数)
po_thita=zeros(na+nb+1,1);
mu=0.97;
fai=zeros(na+nb+1,1);
P=10^6*eye(na+nb+1);
 
%set trace parameters(设置跟踪参数)
T=1;
ta=1.8;
alpha=exp(-T/ta);
c=2;
 
%input and output
thita1=zeros(5,1000);
y_temp=zeros(1,na+1);
y=zeros(1,1000);
u=zeros(1,1000);
u(1,4)=1;
noise=0.01*randn(1,991);
%noise=random('Normal', 0,0.01,1,991);
 
%Start
for k=10:1000 
    switch Mode
        case 1
            tao=6;
            if  k<=201
                a=0.8854;
            elseif  k<=301
                a=0.6725;
            elseif  k<=401
                a=0.5968;
            elseif  k<=501
                a=0.7762;
            else
                a=0.8854;
            end
        case 2
            a=0.8854;
            if     k<=201
                tao=6;
            elseif  k<=301
                tao=4;     
            elseif  k<=401
                tao=8;
            elseif  k<=501
                tao=6;
            else
                tao=6;
            end
    end
    
    y_temp(1)=(a+0.264)*y_temp(2)-0.264*a*y_temp(3)+0.864*u(k-tao)-0.2731*u(k-tao-1);
    y(k)=y_temp(1)+noise(k-9);
    
    y_temp(3)=y_temp(2);
    y_temp(2)=y_temp(1);
    
    %identification(识别)
    
    %fai
    for i=1:na
        fai(i)=-(y(k-i)-y(k-i-1));
    end
    for i=1:nb+1
        fai(na+i)=u(k-tao+1-i)-u(k-tao+1-i-1);
    end
    
    kai=P*fai*inv(fai'*P*fai+mu);
    P=(mu^(-1))*(eye(na+nb+1)-kai*fai')*P;
    po_thita=po_thita+kai*(y(k)-y(k-1)-fai'*po_thita);
    thita=[1,po_thita'];
    thita1(:,k)=thita;
    
    
    %diophantine    (什么什么图)
    f=zeros(na+1,1);
    f(1)=1;
    f_f=zeros(N,na+1);
    E=cell(1,N);  %元胞数组将不同类型的数组,这里e中元素长短不一
    E{1}=1;
    
    g=zeros(1,N);
    G=zeros(N,Nu);
    f_t=zeros(N,1);
    g_t=zeros(N,1);
    w=zeros(N,1);
    
    for ite1=1:N
        f_e=f(1);
        for ite2=1:na
            f(ite2)=f(ite2+1)-(thita(ite2+1)-thita(ite2))*f_e;
        end
        f(na+1)=thita(na+1)*f_e;
        f_f(ite1,:)=f';
        if ite1<N
            E{ite1+1}=[E{ite1},f(1)];
        end
    end
    
    %compute g
    aa=zeros(1,nb+1);
    bb=cell(1,N);
    for i=1:nb+1
        aa(i)=thita(na+1+i);
    end
    for i1=1:N
        bb{i1}=conv(aa,E{i1});
    end
    for i=1:N
        g(i)=bb{N}(i);
    end
    
    %compute g_g,也就是G
    for i1=1:Nu
        for i2=1:N
            if i2<i1
                G(i2,i1)=0;
            else
                G(i2,i1)=g(i2-i1+1);
            end
        end
    end
    
    %compute f_n*y(k)
    for i1=1:N
        for i2=1:na+1
            f_t(i1)=f_t(i1)+f_f(i1,i2)*y(k+1-i2);
        end
    end
    %compute g_n*u(k)  i2的作用考虑到两者相减剩余的项数
    for i1=1:N
        for i2=1:nb
        g_t(i1)=g_t(i1)+bb{i1}(i1+i2)*(u(k-tao-i2)-u(k-tao-i2-1));
        end
    end    
    % set trace   (设置跟踪)
    for i1=1:N
        w(i1)=alpha^(i1)*y(k)+(1-alpha^(i1))*c;
    end
    
    %compute u    
    r_ft=g_t+f_t;
    be_u=inv(G'*G+eye(Nu))*G';
    u(k-tao+1)=u(k-tao)+be_u(1,:)*(w-r_ft);    
end
%plot y u
figure
plot(y);
figure;
plot(u);

文件列表(点击上边下载按钮,如果是垃圾文件请在下面评价差评或者投诉):

GPC_timu.m
《预测控制》仿真作业.doc

关键词: 广义 预测 控制 项目 matlab 源码程序

Top_arrow
回到顶部
联系方式| 版权声明| 招聘信息| 广告服务| 银行汇款| 法律顾问| 兼职技术| 付款方式| 关于我们|
网站客服网站客服 程序员兼职招聘 程序员兼职招聘
沪ICP备19040327号-3
公安备案号:沪公网安备 31011802003874号
库纳格流体控制系统(上海)有限公司 版权所有
Copyright © 1999-2014, GUSUCODE.COM, All Rights Reserved