查看: 181|回复: 1|关注: 0

[未答复] 求助:连续系统的系统辨识问题:最小二乘法参数辨识

[复制链接]

新手

17 麦片

财富积分


050


8

主题

36

帖子

0

最佳答案
发表于 2020-7-4 18:21:31 | 显示全部楼层 |阅读模式
课程报告要求对连续系统进行系统辨识的matlab仿真,我选择了一个方程,把北航的程序改了一下得到以下程序,但是程序显示赋值维度不匹配,希望大佬们可以帮忙看看,是哪里的错误,另外想请问大佬,这个程序是把连续系统转换成离散系统后进行仿真,有没有直接对连续系统进行最小二乘法的系统辨识的方法
clear all; close all;
den=[1 4.638 21.56];num=[3.205 0 25.79];Ts=0.5; Td=1;  % 连续系统
sys=tf(num,den,'inputdelay',Td);
dsys=c2d(sys,Ts,'zoh');
[dnum,a]=tfdata(dsys,'v');
na=length(a)-1; b=dnum(2:na+1); nb=length(b)-1;%na、nb为A、B阶次
d=Td/Ts+1;
  
L=1000; %仿真长度
uk=zeros(d+nb,1); %输入初值:uk(i)表示u(k-i)
yk=zeros(na,1); %输出初值
u=randn(L,1); %输入采用白噪声序列
xi=sqrt(0.1)*randn(L,1); %白噪声序列


thetae_1=zeros(na+nb+1,1); %thetae初值
P=10^6*eye(na+nb+1);
lambda=0.98; %遗忘因子范围[0.9 1]
for k=1:L
    if k==501
           a=[1 0.4675 0.1984]';b=[1.3266 0.5473]'; %对象参数突变
   
    end
    theta(:,k)=[a(2:na+1);b]; %对象参数真值
   
    phi=[-yk;uk(d:d+nb)];
    y(k)=phi'*theta(:,k)+xi(k); %采集输出数据
   
    %遗忘因子递推最小二乘法
    K=P*phi/(lambda+phi'*P*phi);
    thetae(:,k)=thetae_1+K*(y(k)-phi'*thetae_1);
    P=(eye(na+nb+1)-K*phi')*P/lambda;
   
    %更新数据
    thetae_1=thetae(:,k);
   
    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);
end
subplot(1,2,1)
plot([1:L],thetae(1:na,:)); hold on; plot([1:L],theta(1:na,:),'k:');
xlabel('k'); ylabel('参数估计a');
legend('a_1','a_2'); axis([0 L -2 2]);
subplot(1,2,2)
plot([1:L],thetae(na+1:na+nb+1,:)); hold on; plot([1:L],theta(na+1:na+nb+1,:),'k:');
xlabel('k'); ylabel('参数估计b');
legend('b_0','b_1'); axis([0 L -0.5 2]);




错误显示.jpg
连续系统.jpg
回复主题 已获打赏: 0 积分

举报

新手

17 麦片

财富积分


050


8

主题

36

帖子

0

最佳答案
 楼主| 发表于 2020-7-6 18:43:36 | 显示全部楼层
已解决,是转置的问题。
回复此楼 已获打赏: 0 积分

举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表