2015-10-17 40 views
1

我有從一個MATLAB形式的字符串:MATLAB:轉換字符串以自定義的符號函數來象徵性的功能,並且評估它

string = 'funcTwo(funcOne(a,funcTwo(b,a)),funcThree(a))' 

,我已經爲符號函數定義如下功能:

syms a b l 
funcOne(a,b) = a*b - a^b 
funcTwo(a,b) = a*b - b^b 
funcThree(a) = 5+a*7 

我想通過執行規定的符號功能,以評估這個字符串,如:

result = funcTwo(funcOne(a,funcTwo(b,a)),funcThree(a)) 

result = 

- (7*a + 5)*(a*(a^a - a*b) + a^(a*b - a^a)) - (7*a + 5)^(7*a + 5) 

我怎樣才能用這個字符串作爲輸入?我試過使用sym(),但它不工作我想要的:

result=sym(string) 

result = 

funcTwo(funcOne(a, funcTwo(b, a)), funcThree(a)) 

請幫忙。

回答

0

最簡單的方法(如「自殺是討巧」)使用eval

result=eval(string); 

然而,使用eval是不安全的,通常被認爲是不好的做法,並應不惜一切代價避免。由於您的表達是以字符串形式給出的,因此我不確定還有其他方式來評估它。

這引出了一個問題:爲什麼它是一個字符串呢?難道你不能避免把你的命令放入一個字符串中(這是使用eval的溫牀)?您是否熟悉anonymous functions和函數句柄?

相關問題