随机行走轨迹

生成一个1000步的随机行走轨迹, 然后绘制轨迹.

import numpy as np
import matplotlib.pyplot as plt

n_step=1000 #随机行走步数

x_step=np.random.choice([-1,1],n_step)#随机产生1000个1,-1代表X方向每步行走方向
y_step=np.random.choice([-1,1],n_step)#随机产生1000个1,-1代表Y方向每步行走方向

x_trace=np.cumsum(x_step)            #累积求和获得X方向每一步累积的轨迹
y_trace=np.cumsum(y_step)           #累积求和获得Y方向每一步累积的轨迹

plt.plot(x_trace,y_trace)           #画出轨迹
plt.scatter(0,0,c='r',s=100)      #标明起点

plt.scatter(x_trace[-1],y_trace[-1],c='g',s=100)#标明终点
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,以下是 Python 实现 Kalman Filter 过滤随机行走时间曲线并绘制轨迹和误差范围的代码示例: ```python import numpy as np import matplotlib.pyplot as plt # 随机行走模型参数 sigma_xi = 1 # 观测误差参数 sigma_epsilon = np.array([np.random.normal(0, 2) for i in range(20)]) # 状态转移矩阵 A = np.array([[1]]) # 状态转移噪声协方差矩阵 Q = np.array([[sigma_xi ** 2]]) # 观测矩阵 H = np.array([[1]]) # 观测噪声协方差矩阵 R = np.diag(sigma_epsilon ** 2) # 初始化状态和协方差矩阵 X = np.array([[0]]) P = np.array([[1]]) # 保存滤波结果 X_filtered = [X[0, 0]] # 保存先验值和后验值及其误差范围 X_predict = [X[0, 0]] X_update = [X[0, 0]] P_predict = [P[0, 0]] P_update = [P[0, 0]] # Kalman Filter 过滤 for i in range(20): # 预测 X_predict.append(np.dot(A, X)[0, 0]) P_predict.append(np.dot(A, np.dot(P, A.T))[0, 0] + Q[0, 0]) # 更新 K = np.dot(P_predict[i+1], np.dot(H.T, np.linalg.inv(np.dot(H, np.dot(P_predict[i+1], H.T)) + R[i+1, i+1]))) X_update.append((np.array([[i]]) - np.dot(H, X_predict[i+1]))[0, 0] * K[0, 0] + X_predict[i+1] P_update.append((1 - K[0, 0]) * P_predict[i+1]) X = np.array([[X_update[i+1]]]) P = np.array([[P_update[i+1]]]) # 保存滤波结果 X_filtered.append(X[0, 0]) # 绘制滤波结果和误差范围 plt.plot(range(20), np.array(X_filtered), label="filtered") plt.plot(range(21), np.array(X_predict), label="prior") plt.plot(range(21), np.array(X_update), label="posterior") plt.fill_between(range(21), np.array(X_predict) - 2 * np.sqrt(np.array(P_predict)), np.array(X_predict) + 2 * np.sqrt(np.array(P_predict)), alpha=0.2, color='blue') plt.fill_between(range(21), np.array(X_update) - 2 * np.sqrt(np.array(P_update)), np.array(X_update) + 2 * np.sqrt(np.array(P_update)), alpha=0.2, color='orange') plt.plot(range(20), np.array([i for i in range(20)]), label="true") plt.legend() plt.show() ``` 运行以上代码,可以得到滤波后的时间曲线和误差范围的对比结果。其中,蓝色的线为滤波后的结果,橙色的线为后验值,灰色的区域为先验值和后验值的误差范围,绿色的线为实际值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

X射线双星

希望您继续支持我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值