標籤:

關於在matlab層級編程中參數包的傳遞問題

在matlab編程中,頂層的script文件總會調用不同的.m的function文件,而function也會調用下級的不同的funcitonn.m文件,而如何高效的在其中傳遞參數包的問題,將嚴重的影響matlab程序的可讀性和高效性。

一.傳統的funcion參數調用方法

1.1 直接法

在funcion調用的使用,將輸入參數和輸出參數設定為function的輸入輸出參數,例如[outdata1,outdata2…..,outcoeficient1,outcoeficient2….]=function(indata1,indata2,….,incoeficient1,incoeficient2….)

1.2 打包法

將要傳遞的參數和數據打包成一個cell的數據類型,參數傳遞完成之後,取包調用。例如:

[outdatapack,coeficientpack]=function(indatapack,incoeficientpack)

二. assignin和evalin函數

關於assignin和evalin的使用方法,已有很多成熟的敘述,不再贅述

在matlab編程中,頂層的script文件總會調用不同的.m的function文件,而function也會調用下級的不同的funcitonn.m文件,而如何高效的在其中傳遞參數包的問題,將嚴重的影響matlab程序的可讀性和高效性。

一.傳統的funcion參數調用方法

1.1 直接法

在funcion調用的使用,將輸入參數和輸出參數設定為function的輸入輸出參數,例如[outdata1,outdata2…..,outcoeficient1,outcoeficient2….]=function(indata1,indata2,….,incoeficient1,incoeficient2….)

1.2 打包法

將要傳遞的參數和數據打包成一個cell的數據類型,參數傳遞完成之後,取包調用。例如:

[outdatapack,coeficientpack]=function(indatapack,incoeficientpack)

二. assignin和evalin函數

關於assignin和evalin的使用方法,已有很多成熟的敘述,不再贅述。

當在1.m函數中依次調用1a.m和1b.m函數。在1.m中計算出來參數,e.g.

Incoeficient1=…..

Incoeficient2=…..

Data1=……

Data2=……

[outdata1.outdata2]=1a(indata1,indata2)

[outdata3.outdata4]=1b(indata3,indata4)

(1.m)

在1中調用1a和1b兩個函數,完成數據傳遞,而參數的傳遞使用assignin和evalin來傳遞。

Incoeficient1=evalin(caller,incoeficient1);%參數傳入

Incoeficient2=evalin(caller,incoeficient2)

Outcoficient1=assignin(caller,incoeficient1,incoeficient1)%參數傳出

Outcoficient2=assignin(caller,incoeficient2,incoeficient2)%參數傳出

(1a.m)

outcoeficient1=evalin(caller,outcoeficient1);%參數傳入

outcoeficient2=evalin(caller,outcoeficient2)

Outcoficient3=assignin(caller,incoeficient3,incoeficient3)%參數傳出

Outcoficient4=assignin(caller,incoeficient4,incoeficient4)%參數傳出

(1b.m)

至此完成了參數的傳遞。

注意caller和base的區別。

三。總結

當參數過多的時候,直接寫在函數的參數傳遞中,嚴重影響函數的可讀性,但是也會造成assignin和evalin語句過多,當參數較為穩定的時候,也可以採用一個cell數據進行打包。

但是在自動轉c的matlab coder中並不支持assignin和evalin兩個函數,當需要自動轉c的代碼不要使用evalin和assignin。

當在1.m函數中依次調用1a.m和1b.m函數。在1.m中計算出來參數,e.g.

Incoeficient1=…..

Incoeficient2=…..

Data1=……

Data2=……

[outdata1.outdata2]=1a(indata1,indata2)

[outdata3.outdata4]=1b(indata3,indata4)

(1.m)

在1中調用1a和1b兩個函數,完成數據傳遞,而參數的傳遞使用assignin和evalin來傳遞。

Incoeficient1=evalin(caller,incoeficient1);%參數傳入

Incoeficient2=evalin(caller,incoeficient2)

Outcoficient1=assignin(caller,incoeficient1,incoeficient1)%參數傳出

Outcoficient2=assignin(caller,incoeficient2,incoeficient2)%參數傳出

(1a.m)

outcoeficient1=evalin(caller,outcoeficient1);%參數傳入

outcoeficient2=evalin(caller,outcoeficient2)

Outcoficient3=assignin(caller,incoeficient3,incoeficient3)%參數傳出

Outcoficient4=assignin(caller,incoeficient4,incoeficient4)%參數傳出

(1b.m)

至此完成了參數的傳遞。

注意caller和base的區別。

三。總結

當參數過多的時候,直接寫在函數的參數傳遞中,嚴重影響函數的可讀性,但是也會造成assignin和evalin語句過多,當參數較為穩定的時候,也可以採用一個cell數據進行打包。

但是在自動轉c的matlab coder中並不支持assignin和evalin兩個函數,當需要自動轉c的代碼不要使用evalin和assignin。

推薦閱讀:

matlab有什麼不能做的事情?
怎樣做批量函數擬合?
matlab做量化投資分析,怎麼學?
請問怎麼用matlab 畫一個傾斜的橢球?
求推薦matlab編程比較好的書籍?

TAG:MATLAB |