2016-07-20 39 views
1

我有一個很好的調整算法在MATLAB上運行矩陣(ofcourse)。我已經使用matlab編碼器爲該算法生成c代碼,並按預期工作。使用Matlab編碼器生成算法生產

這裏的一個函數調用我在Matlab中使用

x = B/A 

其中

  • B是尺寸爲1×500(行×列)
  • A是大小爲10的* 500
  • x,結果大小爲1 * 10

使用Matlab編碼器將其轉換爲C源時。我注意到函數定義接受的參數與上面的尺寸相同。

void myfunction(const double B[500], const double A[5000], double x[10]) 

對於原型和測試目的,這似乎沒問題。但是,在生產中,我更喜歡將此功能用於不同的尺寸。例如,上述變量中​​的100而不是500也應該起作用。我怎樣才能消除算法中矩陣維的依賴性?

此外,有幾行代碼使用硬編碼整數。例如,有像

if (rankR <= 1.4903363393874656E-8) 
// Some internal function calls 
else 
// Usage of standard sqrt 

500.0 * fabs(A[0]) * 2.2204460492503131E-16 

代碼可以在任何一個解釋什麼是這些硬編碼的整數?這些是從我在MATLAB中使用的測試數據中生成的嗎?

回答

1

如果您引用的函數調用是入口函數,則可以在設置編碼器時定義大小。運行編碼器的最簡單方法是使用MATLAB內的「應用程序」菜單中的GUI(或在控制檯中鍵入「編碼器」)。指定入口點函數後,步驟2將爲每個輸入變量定義類型和大小。

您的輸入變量的每個維度(可以有2個以上如果需要的話),你可以指定:

n - dimension is exactly n long 
:n - dimension is up to n long 
inf - dimension is unbounded 

如果函數調用不是入口點函數和被埋沒內你的代碼(或如果您正在從控制檯代碼生成功能),可以顯式定義變量爲不同大小的:

coder.varsize('myVariableName'); 

記住,有些功能只能用於(帶編碼器)與fixe d尺寸的輸入。

富勒的描述在這裏: http://uk.mathworks.com/help/fixedpoint/ug/defining-variable-size-data-for-code-generation.html#br9t627

不確定不幸的是,隨機常數。