Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МетодичкаИПлб.doc
Скачиваний:
38
Добавлен:
08.05.2019
Размер:
6.96 Mб
Скачать

2. Описание m-функции

Описание m-функции должно начинаться с обязательного заголовка, после которого следуют операторы тела функции. Конец текста функции специально никак не отмечается (совпадает с концом m-файла).

Заголовок определяет интерфейс функции (способ взаимодействия с ней) и устроен следующим образом:

function [выход_арг] = function_name (вход_арг)

Здесь function – служебное слово, обозначающее функцию; выход_арг – список выходных аргументов (параметров) в квадратных скобках; function_name – имя функции; вход_арг – список входных аргументов (параметров) в круглых скобках. Обязательными в заголовке являются слово function и имя функции, остальные компоненты могут отсутствовать (если функция никаких данных не получает и никаких результатов не возвращает). В конце заголовка точка с запятой не ставится. Из структуры заголовка следует, что Matlab четко разделяет входные и выходные аргументы функций. Выходные аргументы объявляются как массив результатов (объединяются в единый массив конкатенацией – записываются в квадратных скобках).

Для создания и сохранения в текущем каталоге текста m-функции необходимо выполнить следующую последовательность действий:

1. В окне Matlab в главном меню выбрать команду File и из выпадающего меню – команды New/M-file (новый m-файл).

2. В раскрывшемся окне редактора Editor набрать текст программы построчно, соблюдая синтаксис языка Matlab.

3. Для сохранения m-файла выбрать в главном меню команду File/Save as (сохранить как).

4. В раскрывшемся окне Save as присвоить имя новому m-файлу (без расширения m) и нажать Save (сохранить).

Внимание: имя m-файла рекомендуется задавать совпадающим с именем функции, которая в нем будет сохранена. Эту рекомендацию следует соблюдать в обязательном порядке, так как обращение к функции происходит по имени файла. Например, если в файле file1.m содержится функция, вычисляющая сумму квадратов синусов значений аргумента

function [y]=summa_sin2(x)

y=sum(sin(x).^2);

то ее следует вызывать так

>> result=file1(vect)

а вовсе не как

>> result=summa_sin2(vect)

Несоблюдение рекомендации неизбежно приведет к снижению мнемоничности текста программы и может вызвать различного рода недоразумения. При выборе имени функции следует также позаботиться об отсутствии конфликтов с занятыми именами Matlab, т.е. имя должно быть уникальным. Узнать занято имя или нет можно при помощи стандартной функции exist. Например

exist('my_function')

Возможно несколько вариантов ответов

0 – имя не конфликтует со словами Matlab;

1 – в рабочей среде уже определена переменная с таким именем (имя в данный момент занято);

2 – в пути поиска Matlab есть такой m-файл;

3, 4, 6 – в пути поиска Matlab есть соответственно такой mex-, mdl- или р-файл;

5 – это имя одной из встроенных функций Matlab;

6 – это имя директории.

Список входных аргументов это перечень через запятую имен переменных, заключенный в круглые скобки. Список выходных аргументов – перечень через запятую имен переменных, заключенный в квадратные скобки. В случае одного выходного аргумента квадратные скобки можно не ставить.

Для размещения значений формальных параметров и переменных, используемых в теле функции, каждой m-функции выделяется дополнительная область памяти, не пересекающаяся с рабочей областью системы Matlab. Такая область называется рабочей областью функции. Каждая функция имеет свою собственную рабочую область. Поэтому имена входных и выходных формальных параметров, а также переменные, используемые в теле функции, являются локальными по отношению к m-файлу (никому кроме самой функции они не доступны). Вследствие этого они не могут конфликтовать с переменными рабочей области Workspace даже при совпадении имен.

Примечание: Если в/из функции кроме формальных переменных, указанных в заголовке, требуется переслать из/в другую программную единицу, например, скрипт еще какие-либо данные то необходимо определить глобальные данные (перечисление через пробел)

global имя1 имя2 имя3

и поместить это определение и в скрипт и в функцию.

Для редактирования существующих m-файлов необходимо выполнить следующие действия:

1. Открыть редактируемый m-файл, для чего в окне Matlab выбрать пункт меню File/Open.

2. В раскрывшемся окне Open выделить имя m-файла и нажать Open.

3. В раскрывшемся окне Editor выполнить редактирование текста m-файла.

4. Сохранить редактированный m-файл с тем же именем, для чего выбрать пункт меню File/Save.

Каталог, в котором содержится файл-функция, должен быть текущим, или путь к нему должен быть добавлен в путь поиска, иначе Matlab не найдет функцию.

Внимание: При отладке программного обеспечения текст файла-функции может неоднократно корректироваться. Внесение изменений в текст функции без сохранения обновлений m-файла – распространенная ошибка начинающего пользователя. Если файл не сохранен, то вычисления будут выполняться в соответствии с предыдущим текстом функции (не смотря на то, что в окне редактора отображается новая версия текста). О том, что в файл были внесены изменения и они не сохранены, свидетельствует звездочка в заголовке окна редактора рядом с именем редактируемого файла (рис. 5.1). При сохранении текущей редакции файла (например нажатии на кнопку  ) звездочка исчезает.

Рис. 5.1. Окно редактора с текстом редактируемой файл-функции

Примечания: 1. Обратите внимание, в конце второй строки функции (рис. 5.1) стоит точка с запятой. Как и для скрипта, это – подавление эхо-печати. Отсутствие символа ";" приведет к тому, что при каждом вызове функции summa_sin2 в командном окне будет выполняться печать значений элементов вектора y. Во избежание вывода на экран нежелательных промежуточных результатов необходимо в тексте функции все вычислительные операторы завершать символом ";".

2. Для вычисления квадрата используется операция поэлементного (.^) возведения в квадрат: sin(x) – вектор, т.к. вектором является аргумент х. Использование не поэлементного, а матричного возведения в квадрат вызовет ошибку

??? Error using ==> mpower

Matrix must be square.

Error in ==> summa_sin2 at 2

sin(x)^2

Что означает "Ошибочное использование матричного произведения. Матрица должна быть квадратной. Ошибка в summa_sin2 во второй строке, а именно при вычислении sin(x)^2".