2015-10-17 1 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 и функциями ручек?