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

 

Рассмотренные выше файл-программы являются последовательностью команд 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).