美文网首页
矩阵与状态转移方程

矩阵与状态转移方程

作者: 徐凯_xp | 来源:发表于2018-10-21 14:20 被阅读0次
高维高斯函数

均值现在是一个向量,每个维度对应一个元素,方差变为协方差。协方差定义的是高斯函数的分散



当高斯函数倾斜时,X和Y的不确定性是相关联的。

卡尔曼滤波器预测

对于卡尔曼滤波器,我们将构建二维估计,一个针对位置x,一个针对速度\dot x
如果:知道位置但是速度不确定,则高斯分布表示为在正确位置周围的细长分布

卡尔曼滤波器方程式

\hat x_{k|k-1} = F_k\hat x_{k-1|k-1} + B_ku_k
其中,\hat x表示为一个估计值,为了让方程看起来更为简洁:

  • 去掉x的帽子符号
  • \hat x_{k|k-1} \to x'
    最终我们得到:
    x' = Fx +Bu

    其中,小写变量表示向量,大写变量表示矩阵
变量定义

\hat x —状态向量
F—状态转移矩阵
P—误差协方差矩阵
Q—测量噪声协方差矩阵
R—计算卡尔曼增益中间矩阵
S—卡尔曼增益
K—卡尔曼增益
\widetilde y—预测状态与测量状态之差
z—测量矢量(激光雷达数据或雷达数据等)
I—Identity matrix 单位矩阵

预测步骤方程

预测状态向量与误差协方差矩阵
\hat x_{k|k-1} = F_k\hat x_{k-1|k-1}
P_{k|k-1} = F_k P_{k-1|k-1}F_k^T+Q_k

更新步骤方程

卡尔曼增益
S_k = H_kP_{k|k-1}H_k^T+R_k
K_k = P_{K|k-1}H_k^TS_k^{-1}
更新状态向量与误差协方差矩阵
\widetilde y_k = z_k - H_k\hat x_{k|k-1}
\hat x_{k|k} = \hat x_{k|k-1} + K_k\widetilde y_k
P_{k|k} = (I-K_kH_k)P_{k|k-1}

矩阵乘法

将矩阵乘法分解成四个步骤:

  • get_row(matrix, row_number)
  • get_column(matrix, column_number)
  • dot_product(vectorA, vectorB)
  • matrix_multiply(matrixA, matrixB)
def get_row(matrix, row):
    return matrix[row]
def get_column(matrix, column_number):
    column = []
    for i in range(len(matrix)):
        column.append(matrix[i][column_number])
    return column

def dot_product(vector_one, vector_two):
    sum = 0
    for i in range(len(vector_one)):
        sum = sum + vector_one[i] * vector_two[i]
    return sum
def matrix_multiplication(matrixA, matrixB):
    A = len(matrixA)
    B = len(matrixB[0])
    ### HINT: The len function in Python will be helpful
    m_rows = A
    p_columns = B
    result = []
    row_result = []
    for i in range(m_rows):
        row_vector = get_row(matrixA, i)
        for j in range(p_columns):
            column_vector = get_column(matrixB,j)
            product = dot_product(row_vector, column_vector)
            row_result.append(product)
        result.append(row_result)
        row_result = []
    return result
矩阵转置
def transpose(matrix):
    matrix_transpose = []
    row_result = []
    row = len(matrix)
    column = len(matrix[0])
    for j in range(column):
        for i in range(row):
            row_result.append(matrix[i][j])
        matrix_transpose.append(row_result)
        row_result = []
    return matrix_transpose

利用转置实现矩阵乘法

def dot_product(vector_one, vector_two):
    sum = 0
    for i in range(len(vector_one)):
        sum = sum + vector_one[i] * vector_two[i]
    return sum
def matrix_multiplication(matrixA, matrixB):
    product = []
    row_result = []
    
    ## Take the transpose of matrixB and store the result
    ##       in a new variable
    matrixB_transpose = transpose(matrixB)
    
    ## Use a nested for loop to iterate through the rows
    ## of matrix A and the rows of the tranpose of matrix B
    for i in range(len(matrixA)):
        for j in range(len(matrixB_transpose)):
            dot_result = dot_product(matrixA[i], matrixB_transpose[j])
            row_result.append(dot_result)
    ## TODO: Calculate the dot product between each row of matrix A
    ##         with each row in the transpose of matrix B
        product.append(row_result)
        row_result = []
    return product
生成单位阵
def identity_matrix(n):
    
    identity = []
    row = []
    # Write a nested for loop to iterate over the rows and
    # columns of the identity matrix. Remember that identity
    # matrices are square so they have the same number of rows
    # and columns
    for i in range(n):
        for j in range(n):
            if i == j:
                row.append(1)
            else:
                row.append(0)
        identity.append(row)
        row = []
    # Make sure to assign 1 to the diagonal values and 0 everywhere
    # else
    
    return identity

相关文章

  • 矩阵与状态转移方程

    高维高斯函数 均值现在是一个向量,每个维度对应一个元素,方差变为协方差。协方差定义的是高斯函数的分散 当高斯函数倾...

  • 【Intro2SDC】卡尔曼方程参考

    卡尔曼方程参考 卡尔曼滤波器方程 变量定义 - 状态向量 - 状态转移矩阵 - 误差协方差矩阵 - 过程噪声协方差...

  • 动态规划

    状态转移方程 从之前某个阶段的某个或某些状态状态到下一个状态之间的关系式,就叫做状态转移方程。 最优子结构 每个阶...

  • 线性代数——2. 矩阵及其运算

    1 线性方程组和矩阵 一、线性方程组 二、矩阵的定义 2.矩阵的运算 一、矩阵的加法 二、数与矩阵相乘 三、矩阵与...

  • 2022-02-19 动态规划专题

    动态规划问题基本解题步骤 设计状态 写出状态转移方程 设置初始状态 处理非法状态 执行状态转移 后处理 返回最终结...

  • 动态规划

    股票问题,状态转移方程需要分析出有几个维度,就需要几个维度去列状态转移方程买卖股票的最佳时机 给定一个数组 pri...

  • 卡尔曼滤波(3)

    状态空间方程 用动态方程形式来描述系统动态响应,其中是过程噪声,测量噪声。 是状态变量 A 是状态矩阵 B 是控制...

  • 矩阵

    1. 线性方程组 2. 矩阵定义 3. 矩阵运算 矩阵的加法矩阵的加法 数与矩阵相乘数与矩阵相乘 矩阵与矩阵相乘矩...

  • 动态规划笔记(二)

    内容概要: 动态规划的状态及状态转移 0-1背包问题 背包问题的若干变种 状态及状态转移方程 上篇文章我们知道,可...

  • 07-15:动态规划review3

    动态规划类问题模板: 首先,问题之间有状态转移 模板: 数组 数组初值 状态转移方程 最终结果 1、最小编辑代价 ...

网友评论

      本文标题:矩阵与状态转移方程

      本文链接:https://www.haomeiwen.com/subject/bhsezftx.html