Файл-функции
Рассмотренные выше файл-программы являются последовательностью команд MatLab, они не имеют входных и выходных аргументов. Для использования численных методов и при программировании собственных приложений в MatLab необходимо уметь составлять файл-функции, которые производят необходимые действия с входными аргументами и возвращают результат в выходных аргументах. Разберем несколько простых примеров, позволяющих понять работу с файл-функциями. Файл-функция, так же как и файл-процедуры, создаются в редакторе М-файлов.
Файл-функции с одним входным аргументом
Предположим, что в вычислениях часто необходимо использовать функцию
Имеет смысл один раз написать файл-функцию, а потом вызывать его всюду, где необходимо вычисление этой функции. Откройте в редакторе М-файлов новый файл и наберите текст листинга 3.2.
Листинг 3.2. Файл-функция с одним аргументом
function f=myfun (x)
f=exp(-x)*sqrt((x^2+1)/(x^4+0.1));
Слово function в первой строке определяет, что данный файл содержит функцию. Первая строка является заголовком функции, в которой размещается имя функции и списки входных и выходных аргументов. В примере приведенном в листинге 3.2, имя функции myfun, один входной аргумент х и один выходной — f. После заголовка следует тело функции (оно в данном примере состоит из одной строки), где и вычисляется ее значение. Важно, что вычисленное значение записывается в f. Не забудьте поставить точку с запятой для предотвращения вывода лишней информации на экран. Теперь сохраните файл в рабочем каталоге. Обратите внимание, что выбор пункта Save или Save as меню File приводит к появлению диалогового окна сохранения файла, в поле File name которого уже содержится название myfun. He изменяйте его, сохраните файл-функцию в файле с предложенным именем!
Теперь созданную функцию можно использовать так же, как и встроенные sin, cos и другие, например из командной строки:
>> у = myfun(1.3)
y=
0.2600
Вызов собственных функций может осуществляться из файл-программы и из другой функции.
Файл-функция, приведенная в листинге 3.2, имеет один существенная недостаток. Попытка вычисления значений функции от массива приводит к ошибке, а не к массиву значений так, как это происходит при вычислении встроенных функций.
» х = [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)/(x^4+0.1));
Если вы изучили работу с массивами, то устранение этого недостать не вызовет затруднений. Необходимо просто при вычислении значения функции использовать поэлементные операции.
Измените тело функции, как указано в листинге 3.3 (не забудьте сохранить изменения в файле myfun.m).