Должен ли я использовать eval () здесь? - PullRequest
0 голосов
/ 23 марта 2011

Я прочитал о правильном использовании eval () и, честно говоря, я не могу сказать, относится ли мое использование к категории «это хорошо» или «это ужасно». Пожалуйста, сообщите!

Вот что делает мой код:

f = 'exp (-x)'% символьная строка функции, которую я хочу использовать

G = GetGradient (f)% символически получает градиент функции f при определенном отображении

x = любой% x вектора назначен другими средствами

answer = eval (G)% Выходными данными является градиент G, оцененный в точках x.

Важным для меня является «ответ», функция градиента во всех точках вектора x (определенная другим способом). Eval прямо здесь? Спасибо.

1 Ответ

3 голосов
/ 23 марта 2011

Я бы предложил следующую альтернативу, предполагая, что G, в вашем примере, строка '-exp(-x)'. STR2FUNC преобразует строку вашей функции в анонимную функцию, которую вы затем можете оценить как обычно.

gradFun = str2func(['@(x)' G]); %# this assumes that x is the independent variable in G

x = whatever;

answer = gradFun(x); %# or answer = gradFun(whatever);

РЕДАКТИРОВАТЬ: Если GetGradient возвращает символическое выражение, вы можете преобразовать его в строку, используя char.

...