關於在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 |