2016-04-06 2 views
2

В Matlab 2016a, Mathworks осуждал использование функции sym для разбора символьных выражений:Как разобрать символическое выражение в Matlab

>> expr = sym('x + 1') 
Warning: Support of strings that are not valid variable names or define a number will be 
removed in a future release. To create symbolic expressions, first create symbolic 
variables and then use operations on them. 
> In sym>convertExpression (line 1536) 
    In sym>convertChar (line 1441) 
    In sym>tomupad (line 1198) 
    In sym (line 177) 

expr = 

x + 1 

предложение Это предупреждение не является практичным, когда символические выражения считываются из файл, а не созданный вручную в коде. Есть ли функция в Matlab для замены этой функции? Я бы предпочел не regexprep и eval мой путь через него.

+0

Вы хотите разобрать произвольные выражения или просто функции? – Matt

+1

Возможно, стоит обратиться в службу поддержки MathWorks с вашим конкретным вариантом использования. Обратите внимание, что одна из причин, почему введенный выше уровень устарел, заключается в том, что внутри этих строк вам нужно использовать синтаксис MuPAD, а не MATLAB, что делает, например, вывод 'sym ('zeta (a, b)')' a немного неожиданно для многих пользователей. –

+0

@Matt Мой самый распространенный прецедент - простые выражения '2 * x + y^2 + 1'. Иногда я буду использовать вызовы функций 'sin (x)' в выражении. – drhagen

ответ

1

Этот синтаксис изначально устарел в R2015b (archived documentation), хотя было ясно, что это произойдет в течение многих лет. Предупреждение было добавлено в R2016a. Кто знает, когда эта функциональность будет полностью удалена.

Вы не хотите использовать eval, но это то, что использует текущий символический движок, когда вы передаете ему строковые выражения. Даже после того, как этот синтаксис удаляется, то, скорее всего, все равно будет ways to call the MuPAD engine так:

f1 = evalin(symengine,'2*x+y^2+1') 

Один «обходной путь», конечно, отключить warning в R2016a:

S = warning('off','MATLAB:singularMatrix'); % Change second string to correct MsgID 
... % Do stuff 
warning(S); % Reset warning state 
-2

Проверить эту линию с сайта Mathworks на sym and syms: (курсив мой жирным шрифтом)

Чтобы создать символические выражения, сначала создать символические переменные, а затем использовать операции над ними. Например, используйте syms x; х + 1 вместо Sym («х + 1») ...

Есть несколько других примеров после этого, хотя это один говорит очень точно на ваш вопрос. Я не уверен, что это будет совместимо с файлом, который вы читаете. Надеюсь, что так! Дайте мне знать, если нет, с удовольствием попробуйте помочь с любым возможным последующим наблюдением.

+3

Вы даже прочитали его вопрос? Он явно заявляет, что это непрактично: «Предложение предупреждения нецелесообразно, когда символические выражения читаются из файла» – excaza

+0

Как вы поместите выражение в код? Я думаю, OP знает, как это сделать, написав строки в консоли/скрипте. Он просит, чтобы он * разбирал * во время работы. Поэтому ему нужен метод, переводящий строку в соответствующее символическое выражение. – Matt