首页/新闻资讯/正文详情

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

发布时间:2026/9/25 19:28:53 来源:云帆数科 栏目:资讯中心
C++代码实现MATLAB中的drss函数功能
#includeiostream#includevector#includerandom#includecomplex#includecmath#includestdexcept// 使用行主序存储矩阵matrix[i][j]usingMatrixstd::vectorstd::vectordouble;structStateSpace{Matrix A,B,C,D;intn,m,p;// n-状态, m-输入, p-输出};// 矩阵乘法: C A * BMatrixmatmul(constMatrixA,constMatrixB){intnA.size(),mA[0].size(),pB[0].size();MatrixC(n,std::vectordouble(p,0.0));for(inti0;in;i)for(intk0;km;k)for(intj0;jp;j)C[i][j]A[i][k]*B[k][j];returnC;}// 矩阵求逆 (高斯-约旦消元)Matrixmatinv(constMatrixA){intnA.size();Matrixaug(n,std::vectordouble(2*n,0.0));for(inti0;in;i){for(intj0;jn;j)aug[i][j]A[i][j];aug[i][ni]1.0;// 右半区构造单位阵}for(inti0;in;i){intpivoti;for(intji1;jn;j)if(std::abs(aug[j][i])std::abs(aug[pivot][i]))pivotj;if(std::abs(aug[pivot][i])1e-12)throwstd::runtime_error(Matrix is singular);std::swap(aug[i],aug[pivot]);doubledivaug[i][i];for(intj0;j2*n;j)aug[i][j]/div;for(intj0;jn;j){if(ji)continue;doublefactoraug[j][i];for(intk0;k2*n;k)aug[j][k]-factor*aug[i][k];}}Matrixinv(n,std::vectordouble(n));for(inti0;in;i)for(intj0;jn;j)inv[i][j]aug[i][jn];returninv;}// 生成 drss 随机离散状态空间模型StateSpacedrss(intn,intp,intm,unsignedseed0){StateSpace sys;sys.nn;sys.pp;sys.mm;std::mt19937rng(seed?seed:std::random_device{}());std::uniform_real_distributiondoubleuniform(0.0,1.0);// 1. 生成稳定极点std::vectorstd::complexdoublepoles;doublemagLow0.5,magHigh0.97;doublepReal0.6,pRepeat0.05;inti0;while(in){if(i0in-1uniform(rng)pRepeat){if(std::abs(poles.back().imag())1e-12){poles.push_back(poles.back());i;}else{poles.push_back(poles[poles.size()-2]);poles.push_back(poles.back());i2;}}elseif(uniform(rng)pReal||in-1){doublemagmagLow(magHigh-magLow)*uniform(rng);poles.emplace_back(mag,0.0);i;}else{doublemagmagLow(magHigh-magLow)*uniform(rng);doublephase(std::acos(-1.0)/2)*uniform(rng);doubleremag*std::cos(phase);doubleimmag*std::sin(phase);poles.emplace_back(re,im);poles.emplace_back(re,-im);i2;}}// 2. 构造块对角矩阵 A_diagMatrixAd(n,std::vectordouble(n,0.0));i0;while(in){if(std::abs(poles[i].imag())1e-12){Ad[i][i]poles[i].real();i;}else{Ad[i][i]poles[i].real();Ad[i1][i1]poles[i].real();Ad[i][i1]poles[i].imag();Ad[i1][i]-poles[i].imag();i2;}}// 3. 随机相似变换: A T * Ad * inv(T)std::normal_distributiondoublenormal(0.0,1.0);MatrixT(n,std::vectordouble(n));for(intr0;rn;r)for(intc0;cn;c)T[r][c]normal(rng);Matrix Tinv;try{Tinvmatinv(T);}catch(...){TinvMatrix(n,std::vectordouble(n,0.0));for(intr0;rn;r)Tinv[r][r]1.0;TTinv;}sys.Amatmul(matmul(T,Ad),Tinv);// 4. 随机生成 B (n x m)doublepBCmask0.8;sys.B.assign(n,std::vectordouble(m,0.0));for(intr0;rn;r)for(intc0;cm;c)if(uniform(rng)pBCmask)sys.B[r][c]normal(rng);// 5. 随机生成 C (p x n)sys.C.assign(p,std::vectordouble(n,0.0));for(intr0;rp;r)for(intc0;cn;c)if(uniform(rng)pBCmask)sys.C[r][c]normal(rng);// 6. 随机生成 D (p x m)doublepDmask0.3,pDzero0.5;sys.D.assign(p,std::vectordouble(m,0.0));for(intr0;rp;r)for(intc0;cm;c){if(uniform(rng)pDzero)sys.D[r][c]0.0;elseif(uniform(rng)pDmask)sys.D[r][c]normal(rng);}returnsys;}// 打印矩阵voidprintMatrix(constMatrixM,conststd::stringname){std::coutname \n;for(autorow:M){for(doublev:row)std::coutv ;std::cout\n;}std::cout\n;}intmain(){// 示例3 状态, 4 输出, 2 输入autosysdrss(3,4,2,42);std::cout离散随机状态空间模型 (n3, p4, m2)\n;std::cout状态数: sys.n, 输出数: sys.p, 输入数: sys.m\n\n;printMatrix(sys.A,A);printMatrix(sys.B,B);printMatrix(sys.C,C);printMatrix(sys.D,D);return0;}

相关推荐

Atlas 300V深度部署YOLO全流程:从模型转换到推理调优
Atlas 300V深度部署YOLO全流程:从模型转换到推理调优

"atlas 300v 24g 是运算加速卡吗"——最近十来个想上目标检测项目的朋友,开场白几乎都是这一句。我的回答很直接:是,但它不是你以为的那种运算加速卡。它不能像GPU一样什么活都接,它是一块为AI推理这个单一任务定制出来… · 2026/9/25 19:28:47

Meshery 目录工作负载设计实战:用 Kanvas 可视化 Kubernetes 集群控制面与工作节点架构
Meshery 目录工作负载设计实战:用 Kanvas 可视化 Kubernetes 集群控制面与工作节点架构

云原生微服务运维DevOps 【免费下载链接】meshery Meshery, the cloud native manager 项目地址: https://gitcode.com/GitHub_Trending/me/meshery 点击查看 免费下载 本文围绕 Meshery 开源仓库中收录的「Kubernetes Cluster Architecture」工作负载型目录设计&a… · 2026/9/25 19:28:47

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

// rss.cpp ------ MATLAB rss 的纯 C 实现&#xff08;无第三方库&#xff09;// 编译: g -stdc17 -O2 rss.cpp -o rss#include <iostream> #include <vector> #include <random> #include <cmath> #include <iomanip> #include <algorithm&… · 2026/9/25 19:28:47

2026 Java架构师进阶路线:从JVM到微服务的大纲拆解与学习计划
2026 Java架构师进阶路线:从JVM到微服务的大纲拆解与学习计划

后端进阶最缺的不是资料&#xff0c;是条能走完的线。我把一套 Java 架构师课程&#xff08;第 03 期&#xff0c;50 讲&#xff09;的大纲按学习顺序拆成路线图&#xff0c;标了每个阶段该产出什么&#xff0c;作为阶段学习的参照。 一、路线总览&#xff08;四阶段&#xff… · 2026/9/25 19:57:46

AI辅助Android开发:从传统到智能化的技术演进——TaoToken统一Key接入Cline与CC Switch配置实战
AI辅助Android开发:从传统到智能化的技术演进——TaoToken统一Key接入Cline与CC Switch配置实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 19:57:40

家长怎么控制孩子另一个手机 家长怎么远程控制孩子手机
家长怎么控制孩子另一个手机 家长怎么远程控制孩子手机

家长怎么控制孩子另一个手机&#xff1f;孩子使用手机时&#xff0c;家长有时需要远程查看设备状态、协助处理问题&#xff0c;或者在孩子遇到操作困难时及时帮忙。家长怎么控制孩子另一个手机&#xff1f;如果不想频繁拿过孩子的手机操作&#xff0c;可以尝试无界趣连2.0&… · 2026/9/25 19:57:33

一人公司如何用智能体落地六个离钱近的方向
一人公司如何用智能体落地六个离钱近的方向

1. 从“一人公司”说起&#xff1a;为什么智能体突然成了离钱最近的杠杆这两年“一人公司”这个词被反复提起&#xff0c;但真正让它从概念变成可执行方案的&#xff0c;是智能体&#xff08;Agent&#xff09;这波技术落地。我身边已经有不少朋友&#xff0c;一个人加几个智能… · 2026/9/25 19:57:27

怎么远程访问另一台电脑 电脑远程操作电脑怎么做
怎么远程访问另一台电脑 电脑远程操作电脑怎么做

职场办公、设备运维的时候&#xff0c;经常有远程访问另一台电脑的需求&#xff0c;但不少电脑远控工具设置繁琐、体验拉胯。怎么远程访问另一台电脑更省心稳定&#xff0c;且兼顾画质与安全呢&#xff1f;推荐使用无界趣连2.0&#xff0c;它是适配电脑互控场景的优质工具&… · 2026/9/25 19:57:21

崩铁4.6前瞻内容一览 崩铁4.6版本更新内容介绍
崩铁4.6前瞻内容一览 崩铁4.6版本更新内容介绍

崩铁4.6前瞻带来了版本主线、新角色与多重福利的完整爆料&#xff0c;崩铁4.6前瞻放出的海量内容&#xff0c;也让不少配置一般的玩家担心设备跑不动新版本高画质。新版本新增BOSS、活动玩法对硬件有一定要求&#xff0c;低配电脑想顺畅体验&#xff0c;可以试试无界趣连2.0远程… · 2026/9/25 19:57:15

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码