// rss.cpp ------ MATLAB rss 的纯 C 实现无第三方库// 编译: g -stdc17 -O2 rss.cpp -o rss#includeiostream#includevector#includerandom#includecmath#includeiomanip#includealgorithm#includestringusingMatrixstd::vectorstd::vectordouble;// -------- 基础矩阵运算 --------Matrixrandom_matrix(introws,intcols,std::mt19937gen){std::normal_distributiondoubledist(0.0,1.0);MatrixM(rows,std::vectordouble(cols));for(inti0;irows;i)for(intj0;jcols;j)M[i][j]dist(gen);returnM;}Matrixmatmul(constMatrixA,constMatrixB){intnA.size(),mB[0].size(),kB.size();MatrixC(n,std::vectordouble(m,0.0));for(inti0;in;i)for(intj0;jm;j)for(intl0;lk;l)C[i][j]A[i][l]*B[l][j];returnC;}Matrixtranspose(constMatrixA){intnA.size(),mA[0].size();MatrixB(m,std::vectordouble(n));for(inti0;in;i)for(intj0;jm;j)B[j][i]A[i][j];returnB;}Matrixidentity(intn){MatrixI(n,std::vectordouble(n,0.0));for(inti0;in;i)I[i][i]1.0;returnI;}// -------- Householder QR 分解: A Q * R --------voidqr_decompose(constMatrixA,MatrixQ,MatrixR){intnA.size(),mA[0].size();RA;Qidentity(n);for(intk0;kstd::min(n,m);k){doublenorm0;for(intik;in;i)normR[i][k]*R[i][k];normstd::sqrt(norm);if(norm1e-14)continue;doublealpha(R[k][k]0)?-norm:norm;std::vectordoublev(n,0.0);for(intik;in;i)v[i]R[i][k];v[k]-alpha;doublevnorm20;for(intik;in;i)vnorm2v[i]*v[i];if(vnorm21e-14)continue;// 左乘 Householder更新 Rfor(intj0;jm;j){doubledot0;for(intik;in;i)dotv[i]*R[i][j];dot*2.0/vnorm2;for(intik;in;i)R[i][j]-dot*v[i];}// 右乘 Householder累积 Q Q * H_kfor(inti0;in;i){doubledot0;for(intjk;jn;j)dotQ[i][j]*v[j];dot*2.0/vnorm2;for(intjk;jn;j)Q[i][j]-dot*v[j];}}}// 通过随机矩阵 QR 分解生成均匀分布的随机正交矩阵Matrixrandom_orthogonal(intn,std::mt19937gen){Matrix Mrandom_matrix(n,n,gen);Matrix Q,R;qr_decompose(M,Q,R);// 使 R 的对角元为正保证 Q 唯一for(inti0;in;i)if(R[i][i]0)for(intj0;jn;j)Q[j][i]-Q[j][i];returnQ;}// -------- 状态空间结构 --------structStateSpace{Matrix A,B,C,D;};// 等价于 MATLAB: sys rss(n, p, m)StateSpacerss(intn,intp1,intm1,unsignedseed42){std::mt19937gen(seed);std::normal_distributiondoublend(0.0,1.0);std::uniform_real_distributiondoubleud(0.0,1.0);// 1) 构造随机实 Schur 形式 TMatrixT(n,std::vectordouble(n,0.0));std::vectorintblock_type(n,0);// 11x1块; 2,32x2块的两个位置inti0;while(in){if(in-1ud(gen)0.5){// 复共轭极点对 a ± bj (a 0)doublea-std::abs(nd(gen))-0.1;doublebnd(gen);if(std::abs(b)0.1)b0.5;// 避免退化为实极点T[i][i]a;T[i][i1]b;T[i1][i]-b;T[i1][i1]a;block_type[i]2;block_type[i1]3;i2;}else{// 实极点 (负)T[i][i]-std::abs(nd(gen))-0.1;block_type[i]1;i1;}}// 填充严格上三角部分2x2 块内的元素已赋值跳过for(intr0;rn;r)for(intcr1;cn;c){if(block_type[r]2block_type[c]3cr1)continue;T[r][c]nd(gen);}// 2) 随机正交矩阵 QMatrix Qrandom_orthogonal(n,gen);// 3) A Q * T * Q^T ------ 特征值 T 的对角块特征值全部稳定Matrix Amatmul(matmul(Q,T),transpose(Q));// 4) 随机 B, C, D 并归一化Matrix Brandom_matrix(n,m,gen);Matrix Crandom_matrix(p,n,gen);Matrix Drandom_matrix(p,m,gen);for(intj0;jm;j){doublenrm0;for(intk0;kn;k)nrmB[k][j]*B[k][j];nrmstd::sqrt(nrm);if(nrm1e-12)for(intk0;kn;k)B[k][j]/nrm;}for(intj0;jp;j){doublenrm0;for(intk0;kn;k)nrmC[j][k]*C[j][k];nrmstd::sqrt(nrm);if(nrm1e-12)for(intk0;kn;k)C[j][k]/nrm;}return{A,B,C,D};}// -------- 打印 --------voidprint_matrix(constMatrixM,conststd::stringname){std::coutname \n;for(constautorow:M){for(doublev:row)std::coutstd::setw(10)std::setprecision(4)std::fixedv ;std::cout\n;}std::cout\n;}intmain(){std::cout C rss(3, 1, 1) \n\n;StateSpace sysrss(3,1,1,12345);print_matrix(sys.A,A);print_matrix(sys.B,B);print_matrix(sys.C,C);print_matrix(sys.D,D);std::coutA 由 A Q*T*Q^T 构造T 为随机实 Schur 形式\n其对角块1x1 或 2x2的特征值实部均严格为负\n因此 A 保证稳定Hurwitz。\n;return0;}
企业数字化 ERP 产品动态
相关推荐
昇腾Atlas 300V 24G推理卡部署YOLOv5全流程实战指南 1. Atlas 300V 24G 到底是什么卡先说结论:Atlas 300V 24G 是华为昇腾系列里面向AI推理场景的运算加速卡,但它不是传统意义上的游戏显卡或通用计算GPU,而是一张以昇腾 AI Core 为核心处理器、专门为神经网络推理任务设计的加速设备。我第一次拿… · 2026/9/25 19:28:41
Atlas 300V部署YOLOv5/YOLOv8实战:从环境搭建到推理优化 最近“atlas部署yolo”和“atlas 300v 24g是运算加速卡吗”这类问题,一下子热度上来了。我身边好几个做视频分析、工业质检、智慧巡检的朋友,几乎都在同一时间开始打听这款卡。正好过去几个月,我在一批Atlas设备上从零把YOLOv5和YOLOv8的推理… · 2026/9/25 19:28:41
Minimax H3接入ComfyUI:本地AI工作流的API调度实践 1. Minimax H3不是“另一个大模型”,而是本地AI工作流里的新式导演台最近在ComfyUI社区里,越来越多朋友开始问:“Minimax H3怎么接进本地ComfyUI?”——但这个问题本身就有陷阱。Minimax H3根本不是像Llama、Qwen或DeepSeek那样可… · 2026/9/25 19:28:35
MicYou插件系统全景解析:Native与WASM双运行时架构是如何设计的 MicYou插件系统全景解析:Native与WASM双运行时架构是如何设计的 【免费下载链接】MicYou MicYou is a powerful tool that turns your Android device into a high-quality microphone for your PC. 项目地址: https://gitcode.com/gh_mirrors/mi/MicYou
MicYou 是一款将… · 2026/9/25 20:25:48
Netty 通信机制与零拷贝详解 Netty 通信机制与零拷贝详解 定位:Netty 第 05 篇,写缓冲与背压、流量整形、零拷贝四形态与读写流程全解 适用版本:Netty 4.1.x(JDK 8) 目录
写缓冲与水位线流量整形零拷贝读写流程串讲总结常见高频面试题 一、写缓冲… · 2026/9/25 20:25:17
39.Agent为什么会循环调用工具从规划执行到终止条件 Agent 为什么会循环调用工具?从规划、执行到终止条件 码海寻道 大模型、智能体与 RAG 工程组件系列第 39 篇 Agent 一直调用搜索、反复重试同一个 API,或者在两个工具之间来回跳转,通常不是模型“突然失控”,而是系统没有为循环定… · 2026/9/25 20:25:11
AI Agent 工程实践(46):模型换了,Agent 为什么突然变笨 发布时间:2026-09-23 标签:AI Agent|工程实践|模型实验|Model Evaluation 上一篇我说,版本七维里最容易翻车的是 Model。 有人不服:换个更强的模型,怎么可能变差? 于是我… · 2026/9/25 20:25:05
创维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