matlab程序运行中索引超出矩阵维度

在卡尔曼滤波程序中索引超出矩阵维度怎么回事,求大神指引

下面是一个简单的 Matlab 卡尔曼滤波程序的例子:

% 状态转移方程
F = [1 1; 0 1];

% 观测方程
H = [1 0];

% 状态的初始估计
x_hat = [0; 0];

% 初始协方差估计
P = [1000 0; 0 1000];

% 测量噪声协方差
R = 1;

% 过程噪声协方差
Q = [0.1 0; 0 0.1];

% 时间步长
dt = 0.1;

% 模拟一些观测值
num_steps = 100;
z = zeros(1, num_steps);

for i=2:num_steps
    % 生成一些随机观测值
    z(i) = z(i-1) + 0.1*randn;

    % 计算当前状态的估计值
    x_hat = F * x_hat;

    % 计算当前状态的协方差估计
    P = F * P * F' + Q;

    % 计算卡尔曼增益
    K = P * H' / (H * P * H' + R);

    % 更新状态的估计值
    x_hat = x_hat + K * (z(i) - H * x_hat);

    % 更新协方差估计
    P = (eye(2) - K * H) * P;
end

% 绘制滤波结果
plot(1:num_steps, z, 'b', 1:num_steps, x_hat(1,:), 'r');
legend('观测值', '估计值');

在这个示例中,我们模拟了一个随机过程,并使用卡尔曼滤波器来估计它的状态。我们可以看到,卡尔曼滤波器的估计结果与真实值比较接近。