Вычисление строковых выражений
Строковые выражения обычно не вычисляются, так что, к примеру, вывод строки ' 2+3' просто повторяет строку:
>
>
'2+3'
ans
=
2
+
3
Однако с помощью функции eval ('строковое выражение'.) строка, представляющая математическое выражение, может быть вычислена:
>
>
eval (
'2+3'
)
ans
=
5
>
>
eval(
'2*sin(1)'
)
ans
=
1.6829
Ниже использование eval возвращает 12 матриц, представляющих магические квадраты чисел от 1 до 12:
for
n
=
1
:
12
eval([
'IT num2str(n) '
=
magic(n)'])
end
Eval (S1,S2) – в случае ошибки в вычислении выражения s1 оценивает выражение s2.
T=evalc (S) выполняет то же, что и функция eval(s), но то, что выводится в командное окно, записывается также и в массив Т;
Еще одна функция – (eval (@имя_функции,х1,х2,…) – имеет важное достоинство – она позволяет передавать в вычисляемую функцию список ее аргументов. При этом вычисляемая функция задается только своим именем. Это поясняют следующие примеры:
>
>
feval(@prod.[
1
23
])
ans
=
6
Существовавшая в прежних версиях MATLAB форма feval (' имя_функции',x1. х2,…) по-прежнему работает, но применять ее не рекомендуется.
>
>
feval(@sum.[
1
2
3
:
4
5
6
].
2
)
ans
=
6
15
Рекомендуется применять функцию feval при вычислении значений функций, записанных в виде строки, вместо eval .m-файлы-функции, содержащие функцию feval, корректно компилируются компилятором системы MATLAB.
Для выполнения вычислений, представленных строкой expression, в заданной рабочей области ws служит функция evalin(ws.expression). Переменная ws может иметь два значения: 'base' – для основной рабочей области и 'caller' – для рабочей области вызванной функции. В приведенном ниже примере в рабочей области записаны переменные а и b и вычисляется символьное значение 'а+b':
>
>
a
=
2
;b
=
3
;
>
>
evalin(
'base'
,
'a+b'
)
ans
=
5
Функция может также записываться в виде [а1.а2,а3,…] = 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 с ее значением в виде строки.
Что нового мы узнали?
В этом уроке мы научились:
- Использовать функции строковых данных.
- Выполнять операции над строками.
- Преобразовывать символы в строки.
- Использовать функции преобразования систем счисления.
- Вычислять строковые выражения.