close

今天窩在房間看著最近買的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只能一個 不能多個

如果存到矩陣  不知道可不可以?

這個再研究吧!

^^

arrow
arrow
    全站熱搜

    sulilliju 發表在 痞客邦 留言(2) 人氣()