【Python例程】集合卡尔曼滤波(EnKF)在Lorenz63混沌系统中的状态估计仿真,附工程的下载链接

部署运行你感兴趣的模型镜像

在这里插入图片描述

这段代码实现了集合卡尔曼滤波(Ensemble Kalman Filter, EnKF)Lorenz 63混沌系统中的状态估计仿真。通过将随机扰动的集合成员作为样本,EnKF在非线性动力系统中实现了对真实状态的逐步逼近。

代码介绍

系统模型

使用 Lorenz 63 混沌系统 作为状态演化模型,其连续形式为:

{ x ˙ = σ ( y − x )   y ˙ = x ( ρ − z ) − y   z ˙ = x y − β z \begin{cases} \dot{x} = \sigma (y - x) \ \dot{y} = x(\rho - z) - y \ \dot{z} = xy - \beta z \end{cases} {x˙=σ(yx) y˙=x(ρz)y z˙=xyβz

其中:

  • σ \sigma σ ρ \rho ρ β \beta β为系统参数;
  • 状态向量为 x = [ x , y , z ] T \mathbf{x} = [x, y, z]^T x=[x,y,z]T

离散化后使用四阶 Runge-Kutta 积分方法,并叠加小的高斯噪声来模拟模型误差。

观测模型

观测算子定义为仅测量 (x) 与 (y) 分量:
z k = H x k + v k , \mathbf{z}_k = H \mathbf{x}_k + \mathbf{v}_k, zk=Hxk+vk,
其中 H = [ 1 0 0   0 1 0 ] H = \begin{bmatrix} 1 & 0 & 0 \ 0 & 1 & 0 \end{bmatrix} H=[100 010]
观测噪声 v k ∼ N ( 0 , R ) \mathbf{v}_k \sim \mathcal{N}(0, R) vkN(0,R)

EnKF滤波过程

  1. 初始化集合:
    X 0 ( i ) ∼ N ( x 0 , P 0 ) , i = 1 , … , N X_0^{(i)} \sim \mathcal{N}(\mathbf{x}_0, P_0), \quad i=1,\ldots,N X0(i)N(x0,P0),i=1,,N

  2. 预测步骤(Forecast):
    对每个集合成员应用系统模型:
    X k ( i ) − = f ( X k − 1 ( i ) ) X_k^{(i)-} = f(X_{k-1}^{(i)}) Xk(i)=f(Xk1(i))

  3. 分析步骤(Analysis):
    计算预测观测:
    Y k ( i ) = h ( X k ( i ) − ) Y_k^{(i)} = h(X_k^{(i)-}) Yk(i)=h(Xk(i))
    然后根据样本协方差估计卡尔曼增益:
    K k = P x y ( P y y + R ) − 1 K_k = P_{xy} (P_{yy} + R)^{-1} Kk=Pxy(Pyy+R)1
    并更新每个集合成员:
    X k ( i ) = X k ( i ) − + K k [ z k + ϵ ( i ) − Y k ( i ) ] X_k^{(i)} = X_k^{(i)-} + K_k [z_k + \epsilon^{(i)} - Y_k^{(i)}] Xk(i)=Xk(i)+Kk[zk+ϵ(i)Yk(i)]
    其中 ϵ ( i ) ∼ N ( 0 , R ) \epsilon^{(i)} \sim \mathcal{N}(0, R) ϵ(i)N(0,R)为观测扰动。

代码结构说明

模块功能
EnsembleKalmanFilter 类实现EnKF的核心结构,包括初始化、预测、分析、均值与协方差计算
lorenz63_model()Lorenz系统的状态演化函数(含Runge-Kutta积分)
observation_operator()定义观测关系,仅输出状态的前两维
主程序部分完成数据生成、滤波执行与结果可视化

文件列表:
在这里插入图片描述

运行结果

滤波前后状态曲线:
在这里插入图片描述

滤波前后误差曲线:
在这里插入图片描述
运行结果:
在这里插入图片描述

运行录屏:

【Python例程】集合卡尔曼滤波(EnKF)

代码获取

完整代码(工程)的下载链接:
https://download.youkuaiyun.com/download/callmeup/92292131

或:
如需帮助,或有导航、定位滤波相关的代码定制需求,请点击下方卡片联系作者

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

MATLAB卡尔曼

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值