首页 > 其他分享 >《概率机器人》课后习题 第3章

《概率机器人》课后习题 第3章

时间:2022-09-18 11:25:48浏览次数:66  
标签:plt eig 机器人 mu matmul 课后 np 习题 sigma

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse
from matplotlib.patches import Circle

第一题

第1问

为了方便,把状态记为\(x\),位移、速度、加速度分别记为\(s\)、\(v\)、\(a\)。

状态向量为\([s_t,v_t]^T\),状态转移矩阵为

\[A=\begin{bmatrix} 1&1\\ 0&1\\ \end{bmatrix} \]

第2问

控制量\(u_t\)设为0。近似认为单位时间内速度与加速度都是恒定值,则有

\[\begin{aligned} &s_{t+1}=s_t+v_{t}+\frac{1}{2}a_{t}\\ &s_{t+1}=v_{t}+a_{t} \end{aligned} \]

写成矩阵的形式有

\[x_{t+1}=Ax_{t}+\begin{bmatrix}\frac{1}{2}\\1\end{bmatrix}a_t \]

进一步可有定义以计算协方差矩阵\(R\):

\[\begin{aligned} R&=\begin{bmatrix} Cov(\frac{1}{2}A_t)&E([\frac{1}{2}A_t-0][A_t-0])\\ E([\frac{1}{2}A_t-0][A_t-0])&Cov(A_t) \end{bmatrix}\\ &=\begin{bmatrix} \frac{1}{4}&\frac{1}{2}[Cov(A_t)+E(A)^2]\\ \frac{1}{2}[Cov(A_t)+E(A)^2]&1 \end{bmatrix}\\ &=\begin{bmatrix} \frac{1}{4}&\frac{1}{2}\\ \frac{1}{2}&1 \end{bmatrix} \end{aligned} \]

可以发现这个结果就是\([1,\frac{1}{2}]^T[1,\frac{1}{2}]\),但是我概率论知识不扎实,不知道为什么可以这样算。
最后仿照3.4式可以写出状态转移概率

\[p(x_t\mid u_t,x_{t-1})=(2\pi R)^{-\frac{1}{2}}\exp\left[ (x_t-Ax_{t-1})^TR^{-1}(x_t-Ax_{t-1}) \right] \]

第3问

此时未作测量,只能计算先验估计,关系如下:

\[\begin{aligned} &\bar\mu_t=A\bar\mu_{t-1}\\ &\bar\Sigma_t=A\bar\Sigma_{t-1}A^T+R \end{aligned} \]

初始条件为\(\bar\mu_0=[0],\bar\Sigma=[0]\),故不难知道均值始终为\([0]\),只计算方差如下:

A = np.array([[1, 1], [0, 1]])
R = np.array([[1/4, 1/2], [1/2, 1]])
covar = np.zeros((2, 2))
ITER = 5

for i in range(ITER):
    covar = np.matmul(np.matmul(A, covar), A.T) + R
    print(covar)
[[0.25 0.5 ]
 [0.5  1.  ]]
[[2.5 2. ]
 [2.  2. ]]
[[8.75 4.5 ]
 [4.5  3.  ]]
[[21.  8.]
 [ 8.  4.]]
[[41.25 12.5 ]
 [12.5   5.  ]]

第4问

x_plot = []
y_plot = []
for theta in np.linspace(0, 2*np.pi, 100):
    u = np.array([[np.cos(theta)], [np.sin(theta)]])
    sig = np.matmul(np.matmul(u.T, covar), u)
    x_plot.append(np.sqrt(sig) * np.cos(theta))
    y_plot.append(np.sqrt(sig) * np.sin(theta))

eig, eig_vecs = np.linalg.eig(covar)
print("eigen value is %.4f and %.4f"%(eig[0], eig[1]))
print("corresponding sigma^2 is %.4f and %.4f"
    %(np.matmul(np.matmul(eig_vecs[:, 0].T, covar), eig_vecs[:, 0]), 
    np.matmul(np.matmul(eig_vecs[:, 1].T, covar), eig_vecs[:, 1])))
plt.arrow(0, 0, eig_vecs[0, 0] * np.sqrt(eig[0]), eig_vecs[1, 0] * np.sqrt(eig[0]),
    width=0.1, head_width=0.3, length_includes_head=True, color='red')
plt.arrow(0, 0, eig_vecs[0, 1] * np.sqrt(eig[1]), eig_vecs[1, 1] * np.sqrt(eig[1]),
    width=0.1, head_width=0.3, length_includes_head=True, color='purple')

plt.scatter(x_plot, y_plot, 2)
plt.grid()
plt.gca().set_aspect('equal')
plt.show()

eigen value is 45.1424 and 1.1076
corresponding sigma^2 is 45.1424 and 1.1076

png

然而这个东西(每个方向上一个数据点投影后的标准差)并不是椭圆

标签:plt,eig,机器人,mu,matmul,课后,np,习题,sigma
From: https://www.cnblogs.com/harold-lu/p/16704434.html

相关文章

  • 读《概率机器人》第三章
    § 1卡尔曼滤波KF概述自己总结:基础的卡尔曼滤波完成了这样的一件事:在一系列线性的前提条件下,在状态转移模型具有正态分布、测量模型具有正态分布的情况下,给出了一个满......
  • java的数组基础练习题
    A建立一个50元素组成的数组把1-100的所有偶数放在数组里并显示。packagefuxi;publicclassw091604练习题数组{publicstaticvoidmain(String[]args){ //TO......
  • 第六章 6 函数-迭代器与生成器 练习题
    第六章6函数-迭代器与生成器练习题[基础知识]1说说python中装饰器、迭代器的用法;描述下dict的items()方法与iteritems()方法的不同;解答:装饰器:装饰器是指对函数......
  • Stream API的练习题
    题目:找出2011年发生的所有交易,并按交易额排序(从高到低)。交易员都在哪些不同的城市工作过?查找所有来自Cambridge的交易员,并按姓名排序。返回所有交易员的姓名字......
  • 五分钟实现Zabbix电话短信机器人报警
    Zabbix是现在企业用的比较多的开源监控系统,Zabbix电话短信报警更是运维不可缺少的报警渠道,假如半夜正在睡觉服务器异常了,这时候电话报警就非常必要。Spug推送助手针对......
  • 第六章 2 函数-参数 练习题
    第六章2函数-参数练习题[进阶拓展]1Python函数调用的时候参数的传递方式是值传递还是引用传递?python函数的参数传递有:位置参数、默认参数、可变参数、关键字参数函数......
  • 第六章 1 函数-基础 练习题
    第六章1函数-基础练习题[基础知识]1可以使用内置函数_______________查看包含当前作用域内所有全局变量和值的字典globals().print2可以使用内置函数_______________......
  • 【基础整理】Mapping representation 机器人所用地图种类及相关介绍
    参考与前言本文主要介绍建图Mapping方面的一些基础知识介绍与相关下游任务使用涉及知识较为基础,SLAM大佬们可以提前退出了主要针对应用为移动机器人与物流无人驾驶......
  • for循环的练习题1-2
    练习1:计算0到100之间的奇数和偶数的和  练习2:用while或for循环输出1-1000之间能被5整除的数,并且每行输出3个  ......
  • python实现企业微信机器人自动发消息
    一)创建企业微信群机器人1)先创建一个测试用临时对话群操作步骤:先在手机端打开企业微信,点击右上角+按钮->发起群聊->联系人中选择2人点击确定,即可创建一个临时对话群2......