#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;}
企业数字化 ERP 产品动态
相关推荐
Atlas 300V深度部署YOLO全流程:从模型转换到推理调优 "atlas 300v 24g 是运算加速卡吗"——最近十来个想上目标检测项目的朋友,开场白几乎都是这一句。我的回答很直接:是,但它不是你以为的那种运算加速卡。它不能像GPU一样什么活都接,它是一块为AI推理这个单一任务定制出来… · 2026/9/25 19:28:47
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函数功能 // rss.cpp ------ MATLAB rss 的纯 C 实现(无第三方库)// 编译: 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到微服务的大纲拆解与学习计划 后端进阶最缺的不是资料,是条能走完的线。我把一套 Java 架构师课程(第 03 期,50 讲)的大纲按学习顺序拆成路线图,标了每个阶段该产出什么,作为阶段学习的参照。
一、路线总览(四阶段ÿ… · 2026/9/25 19:57:46
家长怎么控制孩子另一个手机 家长怎么远程控制孩子手机 家长怎么控制孩子另一个手机?孩子使用手机时,家长有时需要远程查看设备状态、协助处理问题,或者在孩子遇到操作困难时及时帮忙。家长怎么控制孩子另一个手机?如果不想频繁拿过孩子的手机操作,可以尝试无界趣连2.0&… · 2026/9/25 19:57:33
一人公司如何用智能体落地六个离钱近的方向 1. 从“一人公司”说起:为什么智能体突然成了离钱最近的杠杆这两年“一人公司”这个词被反复提起,但真正让它从概念变成可执行方案的,是智能体(Agent)这波技术落地。我身边已经有不少朋友,一个人加几个智能… · 2026/9/25 19:57:27
怎么远程访问另一台电脑 电脑远程操作电脑怎么做 职场办公、设备运维的时候,经常有远程访问另一台电脑的需求,但不少电脑远控工具设置繁琐、体验拉胯。怎么远程访问另一台电脑更省心稳定,且兼顾画质与安全呢?推荐使用无界趣连2.0,它是适配电脑互控场景的优质工具&… · 2026/9/25 19:57:21
崩铁4.6前瞻内容一览 崩铁4.6版本更新内容介绍 崩铁4.6前瞻带来了版本主线、新角色与多重福利的完整爆料,崩铁4.6前瞻放出的海量内容,也让不少配置一般的玩家担心设备跑不动新版本高画质。新版本新增BOSS、活动玩法对硬件有一定要求,低配电脑想顺畅体验,可以试试无界趣连2.0远程… · 2026/9/25 19:57:15
创维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 /* 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