初步考慮matlab的仿真功能如何編程實現

看一下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 成員,供給連線上的下一個組件;

先記一下;有時間再繼續;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章