【扩散映射+线性卡尔曼滤波+Koopman算子】一种用于高维非线性随机动力系统状态估计的非参数方法,按照具有各向同性扩散的梯度流演化(Matlab代码实现)

 💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码、数据、文章


💥1 概述

摘要:
本文提出了一种用于高维非线性随机动力系统状态估计的非参数方法,该系统按照具有各向同性扩散的梯度流演化。我们将扩散映射(一种流形学习技术)、线性卡尔曼滤波器以及Koopman算子理论的概念相结合。具体来说,利用扩散映射,我们构建了数据驱动的虚拟状态坐标,从而线性化了系统模型。基于这些坐标,我们设计了一个利用卡尔曼滤波器进行状态估计的数据驱动框架。我们通过在三个跟踪问题中展示了我们方法相对于参数化和非参数化算法的优势。特别是,将该方法应用于啮齿动物海马神经活动的实际记录中,直接得到了动物位置的表示。我们展示了所提方法在所考虑的随机问题制定中胜过了竞争的非参数化算法。此外,我们获得了与经典参数化算法相媲美的结果,而与我们的方法不同,后者具备模型知识。

近年来受到广泛关注的一种设计这样的计算方法的方式是从算子理论的角度解决基于数据驱动的系统分析和状态估计问题。在这种方法中,动力系统由两个对偶算子描述,分别是表示概率密度演化的Perron-Frobenius算子,以及在某个无限维线性函数空间上定义的描述观测量时间演化的Koopman算子[8],[9]。

在实证动力系统分析的背景下,主要挑战是从系统测量中近似这些算子。近年来提出了几种估计Koopman算子的方法[9]–​[14]。例如,扩展动态模态分解(EDMD)[9],[10]基于通过系统动态相关的两组点和一组字典元素来近似Koopman特征函数和模态。然而,EDMD中字典的最佳选择取决于数据[10]。这种估计Koopman特征函数和模态的框架后来在[3]中被用作非参数化卡尔曼滤波框架的一部分,其中基于对Koopman算子及其特征向量、特征值和Koopman模态的近似来构建线性卡尔曼滤波器。卡尔曼滤波器在Koopman特征向量张成的空间中传播系统,然后将结果估计投影回状态空间。基于Koopman算子理论的非线性随机动力系统分析的其他工作还包括[11],[12],[15]。在[15]中,为随机动力系统的Koopman算子的泛化提供了正式定义和严格的数学分析。此外,提出了一种用于近似这种随机Koopman算子(SKO)的特征函数和特征值的新框架。在[11]和[12]中,提出了一种不同的方法,作者基于函数的时间平均来表征系统的长期行为(渐近动态)。在[11]中,定义了不变测度,并且表明这些测度与Koopman算子的特征函数相符,并且可以通过傅里叶变换简单地计算得出。在[12]中,这个框架被扩展以处理不保持测度的动力系统,使用拉普拉斯平均。在[11]和[12]中,分析需要系统的几条轨迹。

📚2 运行结果

部分代码:

% Estimate local covariance matrices and the modified mahalanobis distance
% ***************************************************************@

function [mahDist] = modified_mahalanobis(yM)
%MODIFIED_MAHALANOBIS calculates estimated covariances and the modified
% mahalanobis distance for the input data yM (size: variables x samples)

%% Configuration
ncov     = 15; % size of neighborhood for covariance 
finalDim = 2;  % final data dimension

%% Covariance estimation

inv_c = zeros(size(yM,1), size(yM,1), size(yM,2)); 
for i = 1+ncov:length(yM)-ncov
    
    % Estimate covariance in short time windows
    win = yM(:, i-ncov:i+ncov-1);
    c   = cov(win');
    
    % Denoise via projection on "known" # of dimensions
    [U, S, V]    = svd(c);
    inv_c(:,:,i) = V(:,1:finalDim) / (S(1:finalDim,1:finalDim)) * U(:,1:finalDim)';
    
end

% Complete missing covariance matrices (beginning and end) by duplication
for i = 1:ncov
    inv_c(:,:,i) = inv_c(:,:,1+ncov);
end
for i = (length(yM)-ncov+1):length(yM)
    inv_c(:,:,i) = inv_c(:,:,length(yM)-ncov);
end

%% Mahalanobis distance calculation

data    = yM.';
mahDist = zeros(size(yM,2));

for i = 1:size(yM,2)
    mahDist(:,i) = sum((bsxfun(@minus,data,data(i,:))*inv_c(:,:,i)).*bsxfun(@minus,data,data(i,:)),2);
end
mahDist = (mahDist + mahDist.');

end

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

Tal Shnitzer, Ronen Talmon, Jean-Jacques Slotine (2020) 

🌈4 Matlab代码、数据、文章

  • 26
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
非线性卡尔曼滤波用于非线性系统的状态估计。在非线性系统中,标准的卡尔曼滤波器无法直接应用。为了解决这个问题,可以使用非线性卡尔曼滤波器来近似非线性系统的状态估计非线性卡尔曼滤波器的基本思想是通过线性非线性系统,找到一个与非线性系统标称轨迹的偏差相对应的线性系统。然后,可以使用卡尔曼滤波器来估计这个偏差,从而间接地提供非线性系统状态估计。这种线性化的过程通常使用泰勒级数展开来实现。\[1\]\[3\] 非线性滤波可能比线性滤波更困难和复杂,但已经有一些非线性估计方法被广泛应用,包括卡尔曼滤波器的非线性扩展、"无味"滤波和粒子滤波。这些方法可以帮助我们在非线性系统中进行状态估计。\[2\] 总之,非线性卡尔曼滤波器是一种用于非线性系统状态估计的有效工具,通过线性非线性系统并使用卡尔曼滤波器来估计偏差,间接地提供非线性系统状态估计。 #### 引用[.reference_title] - *1* *2* *3* [翻译: 使用非线性卡尔曼滤波估计信号](https://blog.csdn.net/zgpeace/article/details/122014153)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值