加速s-function 編寫的MPC算法
一句話總結,這是一個誤會。大神勿噴
背景
由于我的控制問題中限制條件是時變的,不是一個定值,simulink自帶的MPC子產品貌似不能用(如果可以望大神告知),是以采用S-Function編寫了MPC算法。我把狀态方程,序列化的狀态方程,等很複雜的矩陣放在S-Function裡寫了(switch flag之前),之後單步調試的時候看,這一部分代碼隻運作了一次,之後就一隻在case 0,2,3等那幾個代碼塊中切換了。是以我認為這樣的寫法不會影響運作速度。
現象
30秒的仿真要跑塊300秒。。。。我吐了,我還有個3000秒的仿真要跑啊!阿裡雲也救不了我。。。
解決方法
使用profile代碼分析工具發現,那塊計算各種矩陣的代碼每個采樣時間都被調用了,裡面還寫了各種循環嵌套。。。之後就好辦了,由于這段代碼計算的這些參數是不會變的,另開一個腳本先計算好,在傳入S-Function就好了。改進後30秒的仿真隻要跑80秒啦,99%的時間都花費在最後求解二次規劃上了,那暫時就沒有優化空間了。