新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

发布时间:2026/10/7 7:05:07来源:尧图网络
C++代码实现MATLAB中的ssdata函数功能
// ssdata.cpp// 编译: g -stdc11 -O2 ssdata.cpp -o ssdata// 运行: ./ssdata (Linux/macOS) 或 ssdata.exe (Windows)#includeiostream#includevector#includeiomanip#includestdexcept#includecmath#includestring// // 轻量矩阵类 (仅实现本示例所需功能, 不依赖任何第三方库)// classMatrix{public:introws;intcols;std::vectordoubledata;// 行优先存储Matrix():rows(0),cols(0){}Matrix(intr,intc,doubleinit0.0):rows(r),cols(c),data(r*c,init){}doubleoperator()(inti,intj){returndata[i*colsj];}doubleoperator()(inti,intj)const{returndata[i*colsj];}staticMatrixZero(intr,intc){returnMatrix(r,c,0.0);}staticMatrixIdentity(intn){MatrixI(n,n,0.0);for(inti0;in;i)I(i,i)1.0;returnI;}voidprint(conststd::stringname)const{std::coutname \n;for(inti0;irows;i){for(intj0;jcols;j){doublev(*this)(i,j);if(std::abs(v)1e-12)v0.0;// 消除 -0 显示std::coutstd::setw(10)std::setprecision(6)std::fixedv;if(j1cols)std::cout ;}std::cout\n;}}};// // 状态空间模型类 (对应 MATLAB ssdata 的功能)// classStateSpaceModel{public:Matrix A,B,C,D;doubleTs;// 采样时间, 0 表示连续时间StateSpaceModel():Ts(0.0){}StateSpaceModel(constMatrixA_,constMatrixB_,constMatrixC_,constMatrixD_,doubleTs_0.0):A(A_),B(B_),C(C_),D(D_),Ts(Ts_){validateDimensions();}// 从传递函数构造 (可控标准型), 仅支持 SISO// num / den: 系数从最高次到最低次staticStateSpaceModelfromTransferFunction(conststd::vectordoublenum,conststd::vectordoubleden,doubleTs0.0){if(den.empty()||std::abs(den[0])1e-12)throwstd::invalid_argument(Denominator leading coefficient must be non-zero.);intnstatic_castint(den.size())-1;// 系统阶数if(n0)throwstd::invalid_argument(Transfer function must have order 1.);// 规范化分母std::vectordoublea(den.size());for(size_t i0;iden.size();i)a[i]den[i]/den[0];// 分子补齐到 n1 位std::vectordoubleb(n1,0.0);intoffset(n1)-static_castint(num.size());for(size_t i0;inum.size();i)b[offseti]num[i]/den[0];Matrix AMatrix::Zero(n,n);Matrix BMatrix::Zero(n,1);Matrix CMatrix::Zero(1,n);Matrix DMatrix::Zero(1,1);// 友矩阵形式 (可控标准型)for(inti0;in;i)A(n-1,i)-a[n-i];// 最后一行for(inti0;in-1;i)A(i,i1)1.0;B(n-1,0)1.0;// 输出矩阵for(inti0;in;i)C(0,i)b[n-i]-a[n-i]*b[0];D(0,0)b[0];returnStateSpaceModel(A,B,C,D,Ts);}// 提取状态空间数据 —— 对应 MATLAB 的 ssdatavoidssdata(MatrixA_out,MatrixB_out,MatrixC_out,MatrixD_out)const{A_outA;B_outB;C_outC;D_outD;}voidssdata(MatrixA_out,MatrixB_out,MatrixC_out,MatrixD_out,doubleTs_out)const{ssdata(A_out,B_out,C_out,D_out);Ts_outTs;}voidvalidateDimensions()const{if(A.rows!A.cols)throwstd::invalid_argument(A must be square.);intnA.rows;if(B.rows!n)throwstd::invalid_argument(B must have n rows.);if(C.cols!n)throwstd::invalid_argument(C must have n columns.);if(D.rows!C.rows||D.cols!B.cols)throwstd::invalid_argument(D must be p x m.);}};// // 主程序// intmain(){try{// 示例: G(s) (2s 3) / (s^2 2s 5)std::vectordoublenum{2,3};std::vectordoubleden{1,2,5};StateSpaceModel sysStateSpaceModel::fromTransferFunction(num,den);Matrix A,B,C,D;doubleTs0.0;sys.ssdata(A,B,C,D,Ts);// 对应 MATLAB: [A,B,C,D,Ts] ssdata(sys)A.print(A);std::cout\n;B.print(B);std::cout\n;C.print(C);std::cout\n;D.print(D);std::cout\n;std::coutstd::defaultfloat;// 恢复默认浮点显示std::coutTs Tsstd::endl;}catch(conststd::exceptione){std::cerrError: e.what()std::endl;return1;}return0;}
网站建设高端定制企业官网
RELATED

相关资讯

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

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/10/6 15:16:42

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/10/4 15:02:13

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/10/6 15:18:24

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/10/6 16:48:59

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/10/4 14:31:34

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/10/6 16:58:56

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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