Раздел: Документация
0 ... 75 76 77 78 79 80 81 ... 365 Файл-функции, так же как п файл-программы, создаются в редакторе М-файлов. Файл-функции с одним входным аргументом Предположим, что в вычислениях часто необходимо использовать значение функции Имеет смысл один раз написать файл-функцию, а потом вызывать ее всюду, где необходимо вычисление этой функции для заданного аргумента. Откройте в редакторе М-файлов новый файл н наберите текст листинга 5.2. j Листинг 5.2. Файл-функция с одним входным и одним выходным аргументом function f = myfun(x) f = exp(-x)*sqrt((x"2 + l)/(x"4 + 0.1)); Слово function в первой строке определяет, что данным файл содержит файл-функцию. Первая строка является заголовком функции, в которой размещаются имя функции и списки входных и выходных аргументов. Входные аргументы записываются в круглых скобках после имени функции. В нашем примере есть только один входном аргумент — х. Выходной аргумент t указывается слева от знака равенства в заголовке функции. При выборе имени файл-функции следует позаботиться об отсутствии конфликтов с запятыми именами в MATLAB. Аналогичный вопрос мы обсуждали выше: как сохранить файл-программу в файле с уникальным именем. Тот же самый подход, основанный на обращении к функции exist, вы можете применить для задания имени файл-функции. После заголовка размещается тело файл-функции - один пни несколько операторов (их может быть достаточно много), которые реализуют алгоритм получения значения выходных переменных из входных. В нашем примере алгоритм простой — по заданному х вычисляется арифметическое выражение и результат записывается в г. Теперь сохраните файл в рабочем каталоге. Обратите внимание, что выбор пунктов Save пли Save as... меню File приводит к появлению дпалоговою окна сохранения файла, в поле File name которого уже содержится название myfun. Сохраните файл-функцию в файле с предложенным именем. Теперь созданную функцию можно использовать так же, как и встроенные sin, cos и другие, например, из командной строки: » у = myfun(1.31 У = 0.2600 При создании файл-функции myfun мы подавили вывод значения f в командное окно, завершив оператор присваивания точкой с запятой. Если этого не сделать, то оно выведется при обращении у = myfun(1.3). Как правило, лучше избегать вывода в командное окно результатов промежуточных вычислений внутри файл-функции. Имя файл-функции не обязательно должно совпадать с именем файла, однако обращение к ней происходит по имени файла. Например, если в файле f22.m содержится функция с заголовком g = init(z), то ее следует вызывать так: » f = f22(-0.9) а вовсе не » f = init(-0.9) Вызов собственных функций может осуществляться из файл-программы и из другой файл-функции. Предупреждение Каталог, в котором содержатся файл-функции, должен быть текущим, или путь к нему должен быть добавлен в пути поиска, иначе MATLAB просто не найдет функцию или вызовет вместо нее другую с тем же именем (если она находится в каталогах, доступных для поиска). Файл-функция, приведенная в листинге 5.2, имеет один существенный недостаток. Попытка вычисления значений функции от массива приводит к ошибке, а не к массиву значений так, как это происходит при использовании встроенных функций. » х = [1.3 7.2],- >> у myfun(х) ??7 Error using ==> mpower Matrix must be square. Error in --> myfun at 2 f = exp(-x)*sqrt((x"2 + l)/(x"4 + 0.1)); Если вы изучили работу с массивами, то устранение этого недостатка не вызовет затруднений. Необходимо просто при вычислении значения функции применить поэлементные операции (см. разд. "Поэлементные операции с векторами» главы 2). Измените тело функции, как указано в листинге 5.3. Не забудьте сохранить изменения в файле myfun.m! Примечание Внесение изменений в текст файл-функции без сохранения файла — часто распространенная ошибка начинающих пользователей. Если файл не сохранен, то, как не сложно убедиться, будет вычисляться старая функция. О том, что файл изменен и не сохранен, свидетельствует звездочка в заголовке окна редактора рядом с именем редактируемого файла. - Листинг 5.3. Файл-функция, работающей с массивом значений function f = myfun(х) f = exp(-x).*sqrt((х.л2 + 1)./(х.л4 + 1)); Теперь аргументом функции myf un может быть как число, так и вектор или матрица значений, например: » х = [1.3 7.2]; » у = niyfun(x) У = 0.2600 0.0001 Переменная у, в которую записывается результат вызова функции myfun, автоматически становится вектором нужного размера. Постройте график функции myfun на отрезке [0,4] при помощи файл-программы или из командной строки: » х = 0:0.5:4; » у = myfun(х); » plotfx, у) Решение вычислительных задач средствами MATLAB потребует от вас умения программировать файл-функции, соответствующие поставленной задаче (например, правая часть системы дифференциальных уравнений или подынтегральная функция). 0 ... 75 76 77 78 79 80 81 ... 365
|