matlab中的eval函數使用


matlab中的eval函數使用

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

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

這里就很奇怪了,為啥不直接在命令行中輸入命令而是要多使用一個eval函數來完成這樣的事情呢。這個是有原因的,下面舉個例子:
1、比如你需要使用matlab加載一些數據,並且這些數據保存在很多個文件中,文件的命名有一定的規律,比如:data1.mat data2.mat......等,你需要怎樣來加載呢?是直接寫n個load data1.mat嗎,顯然不是的,當遇到這種情況的時候就是eval函數展示其用處的時候了。你可以這樣寫:

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

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

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

注意有坑:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM