Файл-функции с одним входным аргументом
Предположим, что в вычислениях часто необходимо использовать функцию
Имеет смысл один раз написать файл-функцию, а потом вызывать его всюду, где необходимо вычисление этой функции. Откройте в редакторе М-файлов новый файл и наберите текст:
function f = myfun(x)
f = exp(-x)*sqrt( (хл2+1) / (хл4+0. 1) ) ;
Слово function в первой строке определяет, что данный файл содержит файл-функцию. Первая строка является заголовком функции, в которой размещается имя функции и списки входных и выходных аргументов. В примере, приведенном в листинге 5.2, имя функции myfun, один входной аргумент х и один выходной — f . После заголовка следует тело функции (оно в данном примере состоит из одной строки), где и вычисляется ее значение. Важно, что вычисленное значение записывается в f . He забудьте поставить точку с запятой для предотвращения вывода лишней информации на экран.
Теперь сохраните файл в рабочем каталоге. Обратите внимание, что выбор пункта 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 = exp(-x).*sqrt((х.л2+1)./(х.л4+1));
Теперь аргументом функции myfun может быть как число, так и вектор или матрица значений, например:
» х = [1.3 7.2];
» у = myfun(x)
У =
0.2600 0.0001
Переменная у, в которую записывается результат вызова функции myfun, автоматически становится вектором нужного размера.
Дата добавления: 2015-03-11; просмотров: 589;