eval函數(shù)的使用-北太天元學(xué)習(xí)36
北太天元中eval函數(shù)作用簡(jiǎn)單來(lái)說(shuō)就是可以把字符串當(dāng)作命令來(lái)執(zhí)行。即將字符串自動(dòng)識(shí)別并轉(zhuǎn)化為北太天元命令。比如eval('x=1') 可以直接定義變量x,并為之賦值為1,即執(zhí)行引號(hào)內(nèi)的北太天元命令。
在北太天元的命令行窗口中輸入help
eval命令回車(chē)就可以看到eval函數(shù)的幫助,大概的意思就是執(zhí)行北太天元中的表達(dá)式expression,計(jì)算expression表示的代碼。意思是相當(dāng)于在命令行中輸入expression表達(dá)式命令的意思。用法:eval('y=sin(1)')與命令
y=sin(1)等價(jià)。
>>help eval
對(duì)字符串解析求值
?? ?把字符串當(dāng)成baltamatica命令進(jìn)行解析和求值?? ?
示例:
? eval("3+5")
? eval("x=3")
?? ?eval('sin(1)')
一個(gè)更有趣的例子,在開(kāi)始的時(shí)候x2的值是10
最后把x2的值變成了20
? x2=10
?? ?n=2
?? ?str=['x' num2str(n) '=20']
?? ?eval(str)
需要注意的轉(zhuǎn)義字符串的輸入
?? ?eval('2\n ; x=3 ')
上面的\n 表示一個(gè)換行符號(hào)
但是如果你的n是一個(gè)變量, 就是想計(jì)算 2左除n,
那么你可以輸入
?? ?eval('2\\n ; x=3 ')
除了\n之外,我們處理轉(zhuǎn)義字符還有 \a, \b, \t, \v, \f, \r
eval用于循環(huán)中是再好不過(guò)了,特別是有些變量的名字中含有有規(guī)律的數(shù)字,比如我們現(xiàn)在要新建變量data1,data2,data3 ,并且每個(gè)變量賦值為 1x1 , 2x2, 3x3 的矩陣, 那么我們可以使用循環(huán)
for i = 1:3
????? str = ['data' num2str(i) '= zeros(i);'];
???? eval(str);
end
當(dāng)然,我們可以用三行命令完成上面的任務(wù),
data1 = zeros(1);
data2 = zeros(2);
data3 = zeros(3);
但是如果我們要新建的變量是從data1 到 data100, 那么for循環(huán)和eval 配合顯然使得代碼更加簡(jiǎn)潔。?
下面是我收到的有朋友發(fā)過(guò)來(lái)的代碼,說(shuō)是在調(diào)試的時(shí)候出問(wèn)題, 我沒(méi)有能夠重現(xiàn)他的問(wèn)題, 我會(huì)做一個(gè)視頻介紹一下 eval 的用法,同時(shí)也做這個(gè)視頻與他商量,看看是不是他下載了最新的北太天元就能解決他的問(wèn)題了。
%在循環(huán)里多次調(diào)用函數(shù)
ind=[1 2;3 4;5 6]
a = jiafa(ind);
a = jiafa(ind);
disp(a);
function max_size_ind=jiafa(ind)
?? ?%ind是一個(gè)矩陣,此function是提取矩陣ind每一列的最大值
??? size_ind=size(ind)
??? for i =1:size_ind(2)
?? ??? ?%實(shí)際上運(yùn)行的命令max_indi=max(ind(1:size_ind(1),i))]);
?? ??? ?eval(['max_ind',num2str(i),'=max(ind(1:size_ind(1),',num2str(i),'));']);
??? end
??? max_size_ind=[];
??? for i = 1:size_ind(2)
?? ??? ?eval(['max_size_ind=[max_size_ind,max_ind' num2str(i) '];']);
??? end
end
?