Функция eval
В ML имеется возможность сформировать требуемую команду в виде строки символов, а затем выполнить ее, как обычную команду, набранную в командном окне. Для этого предназначена встроенная функция eval.
Метод задания команд в виде текстовых строк и их выполнения с помощью этой функции, используется при написании m-файлов, т. к. такой метод позволяет реализовывать более эффективные алгоритмы решения задач.
Функция еval (<текст>) предназначена для выполнения команды, заданной текстом, как команды ML.
Например, eval (‘2*2+3’) выводит на экран 7. Аргументом функции может быть также строковая переменная.
Команда eval (‘<имя скрипт-файла>’) вызовет выполнение операторов, находящихся в файле с соответствующим именем.
Функция menu
Эта функция предназначена для вывода на экран окна с выпадающим меню, которое имеет заголовок и кнопки с названиями пунктов меню. Количество кнопок, равное количеству пунктов меню, определяется количеством параметров функции menu.
k = menu(‘<заголовок меню>’,’<назв. пункта 1>’,…,’<назв. пункта n >’)
Номер выбранной кнопки является результатом функции menu.
Пример.
Пусть необходимо построить график функции на заданном интервале от 0 до 2 pi , цветом, выбранным из меню.
Напишем script-файл:
k=menu ('цвет','красный', 'зеленый','синий')
color=['r'
'g'
'b'];
t=0:0.1:2*pi;
s=sin(t);
plot(t,s,color(k))
При выполнении этого скрипт-файла функция menu выводит на экран окно вида:
При нажатии на одну из кнопок с названием цвета, номер этой кнопки становится результатом функции menu и попадает в переменную k. Вектор-столбец color содержит атрибуты цвета для построения графика. По номеру k нужный атрибут выбирается из массива color и указывается в команде plot. В результате, выбрав нужный пункт меню, получим график функции, построенный выбранным цветом.
Для организации многократного выбора и выполнения нужных действий с помощью меню можно использовать цикл while и функцию eval . Для этого команды, реализующие необходимые действия, оформляются в виде скрипт-файлов: для каждого пункта меню – свой скрипт-файл , затем необходимо задать символьную матрицу, например, D, состоящую из названий файлов, соответствующих пунктам меню (заданий). Строки символьной матрицы должны иметь одинаковую длину. Команда return обеспечивает возврат из функции или скрипт-файла в точку вызова. В данном примере можно также использовать команду break, которая предназначена для досрочного прерывания цикла. Предположим, что необходимо выполнить по выбору 3 задания в любом порядке.
D=[‘f1 ’
‘f2 ’
'f3 '
‘return‘];
n=1;
while n<4
n=menu(‘меню’, ’пункт1’, ’пункт2’, ’пункт3’, ’выход’)
eval(D(n,:))
end
Каждая строка символьной матрицы D содержит имя одного из файлов, реализующих соответствующий пункт меню. В n – ой строке матрицы находится название файла, выполняющего n –й пункт меню. Обращение D ( n ,:) позволяет извлечь из матрицы D n -ую строку, содержащую название файла. В результате выполнения команды menu в n записывается номер выбранного пункта меню. Для выполнения файл-программы достаточно в командной строке указать имя этого скрипта. Функция eval с параметром D ( n ,:) запускает соответствующий скрипт-файл для выполнения.
Создание и использование m-файлов
Эффективным способом выполнения команд в ML является применение m-файлов. Текстовый файл, содержащий набор инструкций на языке системы ML, называется m-файлом. Инструкции выполняются последовательно от начала до конца файла. Существует возможность досрочного выхода из m-файла, для этого используется оператор return. При необходимости прервать работу с ML используется оператор exit .
Различают два вида m-файлов:
· Файл-программы (Script m - файл)
· Файл-функции (Functionm - файл)
Script -файлы
Файл-программы (их называют скриптами или сценариями) являются самым простым типом m-файлов. Script - файл состоит из последовательности команд, не содержит заголовка, а также входных и выходных параметров. Все объекты, используемые внутри script -файла, считаются глобальными. Если в рабочем пространстве есть данные, то внутри script-файла их можно использовать, а после окончания выполнения script - файла можно использовать данные, созданные с его помощью. Такие файлы используются для автоматизации выполнения большого набора инструкций.
В одной строке программы можно размещать несколько операторов, тогда они разделяются либо запятой, либо точкой с запятой. Если оператор длинный и не умещается на одной строке, то в конце строки ставятся три точки и дальше на другой строке продолжается набор этого оператора.
Для выполнения файл-программы достаточно в командной строке указать имя этого скрипта. Перед запуском программы на выполнение необходимо установить свой каталог в качестве текущего. Запуск файла на выполнение можно осуществить двумя способами:
1. из окна редактора;
2. из командного окна.
Для запуска программы на выполнение из окна редактора надо выбрать пункт меню Debug , Run , или нажать функциональную клавишу F 5, или выбрать соответствующую пиктограмму на панели инструментов. Выполнить программу, уже сохраненную на диске, можно из командного окна ML, просто набрав имя файла без расширения.
Создадим script -файл, в который поместим текст программы, позволяющей вычислить длину окружности по величине ее радиуса.
В текстовом редакторе наберем следующий текст:
% Вычисление длины окружности
r=input (‘Введите радиус окружности ’)
l=2*pi*r;
disp(‘Длина окружности равна’)
disp(l)
Сохраним его на диске с именем dl _ okr в своей папке. Затем вызовем его для выполнения, указав в окне Command Window в командной строке имя файла dl _ okr .
>> dl_okr
Получим на экране:
Введите радиус окружности 12
r =
12
Длина окружности равна
75.3982
Файлы-функции
Система ML позволяет описать свои пользовательские функции и обращаться к ним, как к встроеннным. В отличие от script-файла файл - функция имеет входные параметры и может передавать результат в виде выходных параметров. Файлы-функции часто применяют при решении задач вычислительной математики.
Можно создавать файл-функцию с любым количеством входных и выходных параметров. Файл-функция всегда состоит из заголовка и тела функции.
Заголовок функции:
function [<список вых. параметров >]=<имя функции >(<список вх. параметров>)
Заголовок функции включает ключевое слово function , имя функции, входные и выходные параметры. После заголовка записываются операторы, реализующие алгоритм поставленной задачи. Они составляют тело функции.
Если функция содержит только один выходной параметр, то квадратные скобки не нужны, а если несколько, то они указываются через запятую в квадратных скобках, образуя вектор. Переменным из списка выходных параметров присваиваются значения, вычисленные в функции. Список входных параметров указывается через запятую в круглых скобках после имени функции. Имя m -файла, в котором сохраняется текст функции должно совпадать с именем функции. Имя функции не несёт результата.
При вызове файл-функции нужно указать ее имя и список фактических параметров. Это можно осуществить либо в командном режиме, либо из других файл-программ или файл-функций.
Вызов (активизация) файла-функции c одним выходным параметром может иметь вид:
<имя функции>(<список входных фактических параметров>)
и может использоваться в операторах присваивания или в выражении::
<имя переменой>=<имя функции>(<список входн. фактических пар-ов>)
Выходных параметров может быть столько, сколько необходимо, тогда список выходных параметров перечисляется через запятую в квадратных скобках:
function [< z 1, z 2,…, zn >]=<имя функции >(< список входных. параметров >)
<операторы, в результате которых выходные параметры получают значения>
Вызвать такую функцию можно так:
[ y 1, y 2,…, yn ]=<имя функции >(<список вх. факт. параметров>)
Все переменные, используемые внутри файла-функции, а также входные и выходные параметры являются локальными. Они доступны только внутри функции.
Напишем файл-функцию, позволяющую вычислить факториал любого числа.
Не будем использовать оператор цикла, а используем функцию prod (1: n ). В редакторе наберем следующий текст:
%нахождение факториала любого числа
function f=fact orial (x)
f=prod(1:x);
Сохраним файл на диске с именем factorial. Этот файл получит расширение .m. Обратимся к функции для вычисления факториала числа 5:
>> factorial(5)
ans =
120
или
>> f=factorial(5)
f =
120
Отличия файла-функции от Scipt -файла:
1. Файл-функция имеет входные и выходные параметры, а scipt -файл - нет;
2. Все переменные, используемые внутри файла-функции, локальны. Файл-программа работает с переменными рабочего пространства, т.е. в scipt -файле можно использовать глобальные данные;
3. Функция перед выполнением компилируется. Scipt -файл не компилируется целиком, а выполняется в режиме интерпретации.
4. Имя файла, в котором записана функция, должно совпадать с именем функции, а имя scipt -файла может быть любым.
Программа будет выполняться быстрее, если вместо script -файла использовать файл-функцию (в случае, если это возможно).
Дата: 2019-02-02, просмотров: 364.