今天窩在房間看著最近買的Matlab的書
書中有提到 eval 和feval 這兩個指令
覺得有趣也實用 所以寫在Blog
Eval
這個指令是將特定字串內容做計算
簡單來說!
是將一個字串內容 轉成matlab可以運算子的模式 進行運算或是執行
舉例來說:
str='x=1 ;y=x*10';
上述str字串 只是單純顯示字串型態,但內容看起來是可以運算的關係!
所以只要利用eval指令 就可以運算sty變數的內容!
eval(str) <------就是這樣
則matlab會給你下列答案
y=10
其實剛剛matlab 是將str中 x=1; y=x*10 由字串轉成可以運算的值
所以運算 x=10 y=x*10 就是y=1*10 最後y=10
看起來還好 沒啥太大用處!
結果在ptt matlab版看到一篇文章
發現到eval 這樣用 真的超好用
看看下列程式碼就略之一二
--------------------
x=100;
num=100;
for i=1:num
eval(['k',num2str(i),'=x']);
end %% num2str 是數字轉字串
----------------------
看得出來嗎?
就是可以自動產生100個具有順序的變數
媽呀!超好用的~為啥我在研究所 沒有發現到這樣寫法
再來就是feval!!
Feval
這是專門呼叫函式名稱的指令
其實我把Feval看成 function eval
感覺比較實在
簡單來說 就是call function 只是function name變成字串型態
例如下列程式碼
----------main---------
str='ff';
a=feval(str);
a
-----------//-----
--------function ff------
function [k]=ff
k=100;
end
----------//----
matlab會顯示
a=100
所以feval是可以呼叫字串中的function,而且也可以引入function所需的input
以上個function為例
假設
function [k]=ff(num)
k=100*num;
end
而呼叫ff 這個function 就必須引入 input
所以變成 a=feval(str,10)
而a=10000
這樣呼叫function 可以有另外一種寫法也是不錯
但是感覺output只能一個 不能多個
如果存到矩陣 不知道可不可以?
這個再研究吧!
^^
留言列表