用最小二乘法辨识二阶系统的MATLAB程序(加上注释)
时间: 2024-03-12 20:45:21 浏览: 287
下面是用最小二乘法辨识二阶系统的MATLAB程序示例(带有注释):
```matlab
% 生成二阶系统的模拟数据
t = 0:0.01:10; % 生成时间向量
u = sin(t); % 生成正弦波输入信号
y = zeros(size(t)); % 预分配输出信号的内存空间
a = [1, -1.8, 0.82]; % 系统的实际参数
b = 1.2;
for k = 3:length(t) % 模拟系统的响应过程
y(k) = -a(2)*y(k-1) - a(3)*y(k-2) + b*u(k-1);
end
y = y + 0.1*randn(size(y)); % 添加高斯噪声
% 用最小二乘法辨识二阶系统
U = [u(2:end-1)', u(1:end-2)']; % 构造输入数据矩阵
Y = y(3:end)'; % 构造输出数据矩阵
theta = (U'*U)\(U'*Y); % 计算最小二乘解
a1 = 1;
a2 = -theta(1); % 辨识出的参数
a3 = -theta(2);
b = theta(3);
% 绘制辨识结果和原始数据对比图
sys = tf(b, [a1, a2, a3]); % 构造辨识出的系统传递函数
y_ident = lsim(sys, u, t); % 模拟辨识出的系统的响应
plot(t, y, 'b', t, y_ident, 'r'); % 绘制原始数据和辨识结果的对比图
legend('原始数据', '辨识结果');
```
该程序首先生成了一个二阶系统的模拟数据,然后使用最小二乘法辨识出了该系统的参数,最后绘制了辨识结果和原始数据的对比图。其中,U和Y分别是输入和输出的数据矩阵,theta是待辨识参数的向量,a1、a2、a3和b分别是系统的系数,sys是辨识出的系统传递函数,lsim函数用于模拟系统的响应。注释部分对程序进行了详细的解释。
阅读全文