matlab中的eval函數使用

matlab中的eval函數使用

在matlab的命令行窗口中輸入help eval命令回車就能夠看到eval函數的官方解釋,大概的意思就是執行matlab中的表達式,計算expression表示的代碼。意思是至關於在命令行中輸入expression表達式命令的意思。
用法:express

eval(expression)
[output1,…,outputN] = eval(expression)

這裏就很奇怪了,爲啥不直接在命令行中輸入命令而是要多使用一個eval函數來完成這樣的事情呢。這個是有緣由的,下面舉個例子:
一、好比你須要使用matlab加載一些數據,而且這些數據保存在不少個文件中,文件的命名有必定的規律,好比:data1.mat data2.mat......等,你須要怎樣來加載呢?是直接寫n個load data1.mat嗎,顯然不是的,當遇到這種狀況的時候就是eval函數展現其用處的時候了。你能夠這樣寫:函數

for i = 1:n
    eval(['load',' ','data',num2str(i),'.mat']);  % 這樣徹底跟上面的功能同樣
end

二、當你須要在一串字符串中提取出數字,或者將一串十進制的數中將每一個數都提取出來時,每一個數字之間使用空格分開,即a = '12 34 45 67',這樣的形式你怎樣將他們提取出來變成一個矩陣呢?這個一樣可使用eval函數來解決這個問題:命令行

for i = 1:4
    num(i) = eval(['hex2dec(','a(3*i-2:3*i-1)',')']);  % 使用這個語句就能夠實現將上面的字符串中的數字轉換爲相應的矩陣了
 end

注意有坑:

一、eval函數至關於在命令行中輸入命令,因此命令的形式必需要跟expression的形式要一致,不然回出錯,這個就是上面代碼1中爲何須要使用:eval(['load',' ','data',num2str(i),'.mat']);在expression中間還添加了' ',這個就是須要保持expression正確。
二、eval因爲會直接將命令輸出,因此它能夠自動識別有實際數值的變量,這個就是上面代碼2中直接輸入i的表達式的緣由:eval(['hex2dec(','a(3i-2:3i-1)',')']);
三、若是在eval表達式中存在符號'時,須要使用轉義字符即須要在'的地方添加兩個''才能夠,這樣表示他就是一個'而不是表示字符串的意思。code

相關文章
相關標籤/搜索