Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab5 - М-файлы и основы программирования в MatL....doc
Скачиваний:
14
Добавлен:
03.11.2018
Размер:
252.93 Кб
Скачать

2.4. Файл-функции

Рассмотренные выше файл-программы являются последовательностью команд MatLab, они не имеют входных и выходных аргументов. Для использования численных методов и при программировании собственных приложений в MatLab необходимо уметь составлять файл-функции, которые производят необходимые действия с входными аргументами и возвращают результат в выходных аргументах. В этом подразделе разобрано несколько простых примеров, позволяющих понять работу с файл-функциями. Файл-функции, так же как и файл-процедуры, создаются в редакторе М-файлов.

2.4.1. Файл-функции с одним входным аргументом

Предположим, что в вычислениях часто необходимо использовать функцию

.

Имеет смысл один раз написать файл-функцию, а потом вызывать её всюду, где необходимо вычисление этой функции. Откройте в редакторе М-файлов новый файл и наберите текст листинга

function f = myfun(x)

f= ехр(-х)*sqrt((х^2+1)/(х^4+0.1));

Слово function в первой строке определяет, что данный файл содержит файл-функцию. Первая строка является заголовком функции, в которой размещается имя функции и списки входных и выходных аргументов. В примере, приведенном в листинге, имя функции myfun, один входной аргумент х и один выходной  f. После заголовка следует тело функции (оно в данном примере состоит из одной строки), где и вычисляется ее значение. Важно, что вычисленное значение записывается в f. Точка с запятой поставлена для предотвращения вывода лишней информации на экран.

Теперь сохраните файл в рабочем каталоге. Обратите внимание, что выбор пункта Save или Save as меню File приводит к появлению диалогового окна сохранения файла, в поле File name которого уже содержится название myfun. He изменяйте его, сохраните файл-функцию в файле с предложенным именем.

Теперь созданную функцию можно использовать так же, как и встроенные sin, cos и другие, например из командной строки:

» у = myfun(1.3)

У =

0.2600

Вызов собственных функций может осуществляться из файл-программы и из другой файл-функции.

Предупреждение

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

Файл-функция, приведенная в листинге, имеет один существенный недостаток. Попытка вычисления значений функции от массива приводит к ошибке, а не к массиву значений, как это происходит при вычислении встроенных функций.

» х = [1.3 7.2];

» у = myfun(x)

??? Error using ==> ^

Matrix must be square.

Error in ==> C:\MATLABRll\work\myfun.m

On line 2 ==> f = exp(-x)*sqrt((х^2+1)/(х^4+1));

Если вы изучили работу с массивами, то устранение этого недостатка не вызовет затруднений. Необходимо просто при вычислении значения функции использовать поэлементные операции.

Измените тело функции, как указано в следующем листинге (не забудьте сохранить изменения в файле myfun.m).

function f = myfun(x)

f = ехр(-х).*sqrt((х.^2+1)./(х.^4+0.1));

Теперь аргументом функции myfun может быть как число, так и вектор или матрица значений, например:

» х = [1.3 7.2];

» у = myfun(x)

У =

0.2600 0.0001

Переменная у, в которую записывается результат вызова функции myfun, автоматически становится вектором нужного размера.

Постройте график функции myfun на отрезке [0, 4] из командной строки или при помощи файл-программы:

x = [0:0.5:4];

у = myfun(x);

plot(x, у)

MatLab предоставляет еще одну возможность работы с файл-функциями  использование их в качестве аргументов некоторых команд. Например, для построения графика служит специальная функция fplot, заменяющая последовательность команд, приведенную выше. При вызове fplot имя функции, график которой требуется построить, заключается в апострофы, пределы построения указываются в вектор-строке из двух элементов

fplot('myfun', [0 4])

Постройте графики myfun при помощи plot и fplot на одних осях, при помощи hold on. Обратите внимание, что график, построенный при помощи fplot, более точно отражает поведение функции, т. к. fplot сама подбирает шаг аргумента, уменьшая его на участках быстрого изменения отображаемой функции. Результаты приведите в отчете по лабораторной работе.