Иллюстрированный самоучитель по Matlab

         

Вычисление строковых выражений


Строковые выражения обычно не вычисляются, так что, к примеру, вывод строки ' 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 с ее значением в виде строки.



Содержание раздела