Вычисление
строковых выражений
Строковые
выражения обычно не вычисляются, так что, к примеру, вывод строки ' 2+3' просто
повторяет строку:
»
'2+3'
ans
=
2+3
Однако с помощью
функции eval ('строковое выражение'.) строка, представляющая математическое
выражение, может быть вычислена:
»
eval C2+3')
ans =
5
»
eval('2*sin(l)')
ans
=
1.6829
Ниже использование
eval возвращает 12 матриц, представляющих магические квадраты чисел от 1 до
12:
for
n = 1:12
eval(['IT
num2str(n) ' = magic(n)'])
end
eval (SI,S2)
— в случае ошибки в вычислении выражения s1 оценивает выражение s2.
T=evalc (S)
выполняет то же, что и функция eval(s), но то, что выводится в командное окно,
записывается также и в массив Т;
Еще одна функция
— feval (@имя_функции,х1,х2,...) — имеет важное достоинство — она позволяет
передавать в вычисляемую функцию список ее аргументов. При этом вычисляемая
функция задается только своим именем. Это поясняют следующие примеры:
»
feval(@prod.[l 23])
ans =
6
Существовавшая
в прежних версиях MATLAB форма feval (' иня_функции' ,xl. х2,...) по-прежнему
работает, но применять ее не рекомендуется.
»
feval(@sum.[l 2 3: 4 5 6].2)
ans
=
6
15
Рекомендуется
применять функцию feval при вычислении значений функций, записанных в виде строки,
вместо eval. m-файлы-функции, содержащие функцию feval, корректно компилируются
компилятором системы MATLAB.
Для выполнения
вычислений, представленных строкой expression, в заданной рабочей области ws
служит функция evalin(ws.expression). Переменная ws может иметь два значения:
'base' — для основной рабочей области и 'caller' — для рабочей области вызванной
функции. В приведенном ниже примере в рабочей области записаны переменные а
и b и вычисляется символьное значение 'а+b':
»
а=2;b=3;
»
evalin('base','a+b')
ans =
5
Функция может
также записываться в виде [а1.а2,аЗ,...] = eval in(ws, expression), где a1,
а2, а3,... — переменные, возвращающие результаты вычислений. А функция evalin(ws,expression,
catch_expr) позволяет проверить правильность выражения expression в рабочей
области и сформировать сообщение, заданное в строке
catch_expr.
Например (в
продолжение последнего примера):
»
h='Error in expression';
» evalin('base'. 'a+b'. 'h');
ans =
5
» evalinCbase'.
'a+c', 'h'); h = Error in expression
Здесь выражение
а+с ошибочно (переменная с не определена), поэтому выдана переменная h с ее
значением в виде строки.
Содержание раздела