新闻详情

新闻详情

首页 / 资讯中心 / 详情

C++代码实现MATLAB中的kalman函数功能

发布时间:2026/9/30 8:28:58来源:尧图网络
C++代码实现MATLAB中的kalman函数功能
#includeiostream#includevector#includecmath#includeiomanip#includestdexcept#includealgorithm/* 极简矩阵类纯标准库 */classMatrix{public:introws,cols;std::vectordoubledata;Matrix():rows(0),cols(0){}Matrix(intr,intc):rows(r),cols(c),data(r*c,0.0){}Matrix(intr,intc,doublev):rows(r),cols(c),data(r*c,v){}doubleoperator()(inti,intj){returndata[i*colsj];}constdoubleoperator()(inti,intj)const{returndata[i*colsj];}staticMatrixidentity(intn){MatrixI(n,n);for(inti0;in;i)I(i,i)1.0;returnI;}Matrixtranspose()const{MatrixT(cols,rows);for(inti0;irows;i)for(intj0;jcols;j)T(j,i)(*this)(i,j);returnT;}Matrixoperator(constMatrixo)const{MatrixR(rows,cols);for(size_t i0;idata.size();i)R.data[i]data[i]o.data[i];returnR;}Matrixoperator-(constMatrixo)const{MatrixR(rows,cols);for(size_t i0;idata.size();i)R.data[i]data[i]-o.data[i];returnR;}Matrixoperator*(constMatrixo)const{if(cols!o.rows)throwstd::runtime_error(Matrix dimension mismatch);MatrixR(rows,o.cols);for(inti0;irows;i)for(intk0;kcols;k){doublea(*this)(i,k);if(a0.0)continue;for(intj0;jo.cols;j)R(i,j)a*o(k,j);}returnR;}Matrixoperator*(doubles)const{MatrixR(rows,cols);for(size_t i0;idata.size();i)R.data[i]data[i]*s;returnR;}/* 高斯-约当消元法求逆带部分选主元 */Matrixinverse()const{if(rows!cols)throwstd::runtime_error(inverse: not square);intnrows;Matrix A*this;Matrix IMatrix::identity(n);for(inti0;in;i){intpivoti;for(intki1;kn;k)if(std::fabs(A(k,i))std::fabs(A(pivot,i)))pivotk;if(std::fabs(A(pivot,i))1e-12)throwstd::runtime_error(inverse: singular matrix);if(pivot!i)for(intj0;jn;j){std::swap(A(i,j),A(pivot,j));std::swap(I(i,j),I(pivot,j));}doubledA(i,i);for(intj0;jn;j){A(i,j)/d;I(i,j)/d;}for(intk0;kn;k){if(ki)continue;doublefA(k,i);if(f0.0)continue;for(intj0;jn;j){A(k,j)-f*A(i,j);I(k,j)-f*I(i,j);}}}returnI;}};/* 卡尔曼滤波器 */classKalmanFilter{public:Matrix A,B,C,Q,R,x,P,I;KalmanFilter(constMatrixA_,constMatrixB_,constMatrixC_,constMatrixQ_,constMatrixR_,constMatrixx0,constMatrixP0):A(A_),B(B_),C(C_),Q(Q_),R(R_),x(x0),P(P0){IMatrix::identity(A.rows);}/* 预测步等价于 MATLAB 的 predict * x A*x B*u * P A*P*A Q */Matrixpredict(constMatrixuMatrix()){xA*x;if(u.rows0B.cols0)xxB*u;PA*P*A.transpose()Q;returnx;}/* 校正步等价于 MATLAB 的 correct * K P*C/(C*P*CR) * x x K*(z - C*x) * P (I - K*C)*P */Matrixcorrect(constMatrixz){Matrix SC*P*C.transpose()R;// 新息协方差Matrix KP*C.transpose()*S.inverse();// 卡尔曼增益xxK*(z-C*x);// 更新状态P(I-K*C)*P;// 更新协方差returnx;}};/* 使用示例 */intmain(){constintn4;// 状态维数 [x, y, vx, vy]constintp2;// 测量维数 [x, y]constdoubledt0.1;// 采样周期// 状态转移矩阵匀速运动模型MatrixA(n,n);A(0,0)1;A(0,2)dt;A(1,1)1;A(1,3)dt;A(2,2)1;A(3,3)1;// 无控制输入B 的列数为 0MatrixB(n,0);// 观测矩阵仅观测位置MatrixC(p,n);C(0,0)1.0;C(1,1)1.0;// 过程噪声作用在速度分量上MatrixQ(n,n);Q(2,2)0.1;Q(3,3)0.1;// 测量噪声Matrix RMatrix::identity(p)*0.5;// 初始状态估计与协方差Matrixx0(n,1);x0(0,0)3.0;x0(1,0)3.0;x0(2,0)0.0;x0(3,0)0.0;Matrix P0Matrix::identity(n)*10.0;// 构造滤波器KalmanFilterkf(A,B,C,Q,R,x0,P0);std::coutstd::fixedstd::setprecision(6);// 在线滤波predict → correctfor(inti0;i100;i){// 构造模拟测量值真实轨迹x 10.5*t, y 20.3*tMatrixz(p,1);z(0,0)1.00.5*i*dt;z(1,0)2.00.3*i*dt;kf.predict();// 等价于 MATLAB: predict(kf)kf.correct(z);// 等价于 MATLAB: correct(kf, z)std::coutStep std::setw(3)i x [kf.x(0,0), kf.x(1,0), kf.x(2,0), kf.x(3,0)]\n;}return0;}
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Java仓库管理系统毕设实战:Spring Boot+Vue全栈开发与避坑指南 2026/9/30 9:16:34

Java仓库管理系统毕设实战:Spring Boot+Vue全栈开发与避坑指南

简介:这份资源是一篇基于Java的仓库管理系统毕业设计论文文档,面向计算机相关专业学生及需要完成课程设计或毕业设计的开发者。论文围绕电子商务背景下传统仓储人工操作效率低、错误率高的痛点,采用Spring Boot后端、Vue前端与MySQL数据库&am…

阅读更多 →
AnythingLLM本地优先AI智能体搭建实战:从部署到制度问答助手 2026/9/30 9:16:34

AnythingLLM本地优先AI智能体搭建实战:从部署到制度问答助手

最近有不少朋友在问,本地优先的 AI 智能体工具到底怎么选,尤其是想把企业内部的制度文档、技术手册变成能“听懂人话”的问答机器人时,市面上的 SaaS 产品往往卡在数据隐私和定制成本上。我自己在对比了多家方案之后,长期留下的就…

阅读更多 →
Agent/LLM技术日报:知识库建设、框架选型与落地排障实践 2026/9/30 9:16:34

Agent/LLM技术日报:知识库建设、框架选型与落地排障实践

今天这份Agent/LLM技术日报,我给自己定的选题标准只有一条:能让你下一个项目少踩坑、多落地的内容才进日报。搜了一圈这两天的热词,发现几个信号非常集中:llm wiki知识库、本体RAG、Agent框架与编排、Agent记忆与安全、本地ERP结合…

阅读更多 →
从零构建生产级记忆型 AI Agent:AgentScope 架构、记忆机制与 SSE 实战 2026/9/30 9:16:27

从零构建生产级记忆型 AI Agent:AgentScope 架构、记忆机制与 SSE 实战

记忆型 AI Agent 这个词这两年快被用烂了,但真正落到生产环境里,能稳定跑起来、能记住上下文、能在多轮对话里不丢状态的,其实没几个。大部分 demo 级别的 Agent 聊上三五轮就开始胡言乱语,要么把用户十分钟前说的话忘得一干二净&…

阅读更多 →
TensorFlow 2.16 LTS工业部署实战:从安装到端侧推理的全链路解析 2026/9/30 9:16:27

TensorFlow 2.16 LTS工业部署实战:从安装到端侧推理的全链路解析

1. 这不是“又一个深度学习框架”——TensorFlow的本质定位与它被误读十年的真相 很多人第一次听说TensorFlow,是在2015年谷歌开源那天;更多人真正接触它,是在2018年Kaggle比赛里看到别人用tf.keras写模型;而到了2024年&#xff…

阅读更多 →
GitHub热榜怎么看?从筛选到部署开源项目的完整实战指南 2026/9/30 9:16:27

GitHub热榜怎么看?从筛选到部署开源项目的完整实战指南

打开 GitHub Trending 页面几乎成了我每天早上的第一件事,2026年3月3日这天也不例外。热榜上的项目依然很有代表性:AI工具链、嵌入式开发、微服务治理、开发者效率工具这几条主线轮流坐庄,偶尔蹦出几个让人眼前一亮的小工具。这篇文章不打算帮…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉