新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

发布时间:2026/10/2 18:06:14来源:尧图网络
C++代码实现MATLAB中的lqg函数功能
#includeiostream#includeiomanip#includevector#includecassert// 自实现的极简矩阵库 classMatrix{public:introws,cols;std::vectordoubledata;Matrix():rows(0),cols(0){}Matrix(intr,intc):rows(r),cols(c),data(r*c,0.0){}doubleoperator()(inti,intj){returndata[i*colsj];}doubleoperator()(inti,intj)const{returndata[i*colsj];}// 矩阵乘法Matrixoperator*(constMatrixo)const{assert(colso.rows);Matrixres(rows,o.cols);for(inti0;irows;i)for(intk0;kcols;k){doubleadata[i*colsk];if(a0.0)continue;for(intj0;jo.cols;j)res(i,j)a*o(k,j);}returnres;}Matrixoperator(constMatrixo)const{assert(rowso.rowscolso.cols);Matrixres(rows,cols);for(size_t i0;idata.size();i)res.data[i]data[i]o.data[i];returnres;}Matrixoperator-(constMatrixo)const{assert(rowso.rowscolso.cols);Matrixres(rows,cols);for(size_t i0;idata.size();i)res.data[i]data[i]-o.data[i];returnres;}Matrixoperator*(doubles)const{Matrixres(rows,cols);for(size_t i0;idata.size();i)res.data[i]data[i]*s;returnres;}Matrixoperator(constMatrixo){for(size_t i0;idata.size();i)data[i]o.data[i];return*this;}};// LQG 调节器 // 对应 MATLAB: rlqg lqgreg(kest, k)// A_reg A - L*C - (B - L*D)*K// B_reg L// u -K * x_hatclassLQGRegulator{public:LQGRegulator(constMatrixA,constMatrixB,constMatrixC,constMatrixD,constMatrixL,constMatrixK):K_(K),n_(A.rows){A_reg_A-L*C-(B-L*D)*K;B_reg_L;x_hat_Matrix(n_,1);// 初始状态估计为零向量}// 前向欧拉更新返回控制量 u -K * x_hatMatrixupdate(constMatrixy,doubledt){Matrix dx_hatA_reg_*x_hat_B_reg_*y;x_hat_dx_hat*dt;returnK_*x_hat_*(-1.0);}constMatrixstateEstimate()const{returnx_hat_;}constMatrixregulatorA()const{returnA_reg_;}constMatrixregulatorB()const{returnB_reg_;}private:Matrix A_reg_,B_reg_,K_,x_hat_;intn_;};// 主程序 intmain(){// 示例二阶系统MatrixA(2,2);A(0,0)0;A(0,1)1;A(1,0)-2;A(1,1)-3;MatrixB(2,1);B(0,0)0;B(1,0)1;MatrixC(1,2);C(0,0)1;C(0,1)0;MatrixD(1,1);D(0,0)0;MatrixL(2,1);L(0,0)1.2;L(1,0)0.8;MatrixK(1,2);K(0,0)2.5;K(0,1)1.0;LQGRegulatorlqg(A,B,C,D,L,K);doubledt0.01;Matrixy(1,1);y(0,0)0.5;std::coutstd::fixedstd::setprecision(6);for(inti0;i10;i){Matrix ulqg.update(y,dt);constMatrixxhlqg.stateEstimate();std::coutStep i x_hat xh(0,0) xh(1,0) u u(0,0)std::endl;}return0;}
网站建设高端定制企业官网
RELATED

相关资讯

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

较早相关资讯

最新相关资讯

C#多路海康摄像头显示:官方SDK拉流与断线重连实战 2026/10/2 18:59:07

C#多路海康摄像头显示:官方SDK拉流与断线重连实战

简介:一份面向C#开发者的多路海康威视摄像头显示与控制示例工程,适合需要接入海康SDK构建监控界面的初中级开发者。资源内含完整WinForms项目源码、PTZ控制代码、六摄像头演示版本,涵盖设备初始化、设备列举、多路视频流打开、视频帧获取、GD…

阅读更多 →
遗失物遗落物检测数据集VOC+YOLO双格式解析与YOLOv8训练实战 2026/10/2 18:59:07

遗失物遗落物检测数据集VOC+YOLO双格式解析与YOLOv8训练实战

简介:面向柜台、电梯、候车厅等公共场所的智能安防需求,这套数据集围绕2173张真实场景下的贵重物品图片,提供涵盖车钥匙、手提包、钱包、手机、笔记本、身份卡片、电脑等52类常见遗失物的VOC与YOLO双格式标注,免去自行数据整理的繁…

阅读更多 →
YOLO+Python视觉识别实战:从屏幕捕获到键鼠自动化的完整链路 2026/10/2 18:59:06

YOLO+Python视觉识别实战:从屏幕捕获到键鼠自动化的完整链路

简介:这是一份基于YOLO目标检测的DNF手游自动化脚本源码,面向有一定Python基础、希望实现游戏图像识别与自动操作的玩家或开发者。压缩包共18个文件,以5个Python脚本为核心,配套11张PNG标注/识别结果示例图、1个MP4演示视频以及1个…

阅读更多 →
RibbonWorkbench 2016:Dynamics 365命令栏定制与部署完全指南 2026/10/2 18:58:53

RibbonWorkbench 2016:Dynamics 365命令栏定制与部署完全指南

简介:面向Dynamics 365和Power Apps开发者的RibbonWorkbench托管管理包,旨在帮助开发者直观定制命令栏(Ribbon)元素,摆脱手写XML的繁琐,提升界面配置与投放效率。压缩包约1.48MB,内含解决方案定…

阅读更多 →
Python虚拟环境与PyCharm配置实战:告别“明明装好却找不到” 2026/10/2 18:58:34

Python虚拟环境与PyCharm配置实战:告别“明明装好却找不到”

先从我前两天帮一个同学查的问题说起。他在自己电脑上跑一个爬虫脚本,报了ModuleNotFoundError: No module named requests,但命令行里pip list明明显示requests已经装好了。类似这种“明明装了却找不到”的鬼故事,我见了太多。归根到底&…

阅读更多 →
冈萨雷斯图像处理实战:从课本公式到工业落地的工程转化指南 2026/10/2 18:58:34

冈萨雷斯图像处理实战:从课本公式到工业落地的工程转化指南

1. 这不是教科书笔记,而是一线工程师用十年图像项目踩出来的“冈萨雷斯实战地图”如果你正对着《数字图像处理》(冈萨雷斯版)第四版那本厚达900页的砖头书发愁——公式密得像电路板、MATLAB代码示例少得可怜、课后题答案藏在某个不公开的教师…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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