2014-09-18 62 views
0

我想通過使用MATLAB的編碼器工具包MEX一些代碼。代碼最初在其中有單元數組,現在不由編碼器處理,所以我決定使用結構來補償這一點。MATLAB編碼器給出結構的出界錯誤結構

我的問題是結構的大小不固定,這裏就是問題所在。我有什麼本質上是這樣的:

Temp= struct('a',"some variable"); 
for i = 2:x 
    Temp(j).('a') = Temp(i-1).('a')*Temp(1).('a'); 
end 

在MATLAB的命令行窗口,這將是完全可以接受的,試圖建立MEX文件但是時,引發此錯誤:

指數表現出來的界限。試圖訪問元素2.有效範圍是1-1。

有沒有辦法解決這個問題,或者是否有另一種解決方案'單元格陣列'就像編碼器允許的結構一樣?

回答

2

可以使用repmat

MyStruct = repmat(Temp,1,N); 

其中N是常數(即,硬編碼,不依賴於數據的)。
然後,如果你願意的話,

for i=2:N 
    MyStruct(i).a = MyStruct(i-1).a*MyStruct(1).a; 
end 

無需MyStruct(i).('a')

+2

+1這裏有一些相關的鏈接,文檔:[定義結構代碼生成的陣列(HTTP://www.mathworks。 com/help/coder/ug/definitions-arrays-of-structures-for-code-generation.html),[Index Substructures and Fields](http://www.mathworks.com/help/coder/ug/indexing-子和-fields.html#zmw57dd0e41076_block)。無論如何,在我看來,整個結構可以用一個常規的數組來代替 – Amro 2014-09-18 20:45:28

+0

@Amro:對於OP提供的簡單例子,我同意。 – ThP 2014-09-18 20:50:00

+0

@ThP工作表示感謝!我現在有另一個問題,但。我試圖存儲在結構中的一些變量很複雜。它現在出現錯誤說:「不能將複雜的值分配到非複雜的位置。」有沒有辦法來解決這個問題? – 2014-09-18 20:55:44