作者:mobiledu2502878013 | 来源:互联网 | 2023-08-15 06:52
看一下matlab的仿真功能;这是两个示例;
拖入各个组件到面板,建立连线;然后运行;就会给出最终的仿真结果和波形;
下面来简单分析一下;如果要自己编程实现matlab的仿真功能,该如何做;
看前面两个仿真图;一看,然后再考虑一下;这是一个数据结构的图;
有向图,因为连线都有方向;
用户进行仿真操作时,每拖入一个组件,等于添加图的一个顶点;每建立一条连线,等于添加图的一条边;
完成以后记录数据结构;
那么计算是如何进行的?
初步的考虑;因为每条边每个顶点都参与运算;就是对图进行遍历;
遍历完成就完成一次计算;
不过根据我目前对matlab仿真的认识;每次仿真它不是只遍历一次计算一次;
比如仿真范围是0-10,仿真步长为0.5,那么要遍历20次,计算20次;如果仿真步长为0.2,那么要遍历50次,计算50次;
每次计算都在每个组件的输入输出端口各有一个此次计算的值;
每个组件都有输入端口和输出端口,可能是一个或多个;每个组件分别执行不同的计算;
计算的函数可能放在不同的库里或DLL里;Sources、Sinks、Continuous、Discrete等模块,通信仿真的各个模块,电机仿真的各个模块,等等;
每个组件需要指明此组件要进行的计算,即要调用的函数;
简单组件只有输入输出,微分积分或复杂组件,还需要存储中间结果;
那么要定义一个通用结构体来承载各个组件;先假设数值都是整型;假设每个组件的输入输出最多各不超过4个;
用C语言描述如下:
struct subunit{int in1;int in2;int in3;int in4; //输入端int out1;int out2;int out3;int out4; //输出端int intermediateresult; //中间结果 int counttype; //计算的类型
};
每次根据输入值进行计算;把结果填到 out1 - out4 成员,供给连线上的下一个组件;
先记一下;有时间再继续;