使用最小二乘法例子的代码:
Ts = 1; 采样时间
s = tf('s');
sysc = 100/(60*s +1); 真实系统的传递函数
sysd = c2d(sysc, Ts);
t = 0:Ts:(Ts*300);
u = ones(1, length(t)); 系统输入
ys = lsim(sysd, u, t, 0); 系统输出
ys = ys + 10*rand(size(ys)); 测量量 = 系统输出 + 噪声
[numd, dend] = LeastSquare(u, ys, 3); 最小二乘法获取预测系统模型
[A, B, C, D] = tf2ss(numd, dend); 变换到状态空间形式
Len = length(u);
N = length(A); 系统维数
yout = zeros(Len, 1); 滤波器输出
Xh = zeros(N, 1); 状态变量
P = eye(N);
Q = 0.02 * eye(N); 系统噪声
R = 50; 测量噪声
for i = 1 : Len
Xh = A*Xh + B*u(i);
P = A*P*A' + Q;
K = P*C'* inv(C*P*C' + R);
Xh = Xh + K*(ys(i) - C*Xh);
P = P - K*C*P;
yout(i) = C*Xh;
end
plot(t, ys, t, yout);
超过 100 楼则公布如何通过输入输出获取系统模型的最小二乘法程序
|