Как сделать функцию в матлабе

Добавил пользователь Владимир З.
Обновлено: 04.10.2024

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

М-функции

Файлы, которые содержат коды языка MATLAB, называются М-файлами. Для создания М-файла используется текстовый редактор (редактор/отладчик MATLAB). Существует два типа М-файлов: М-сценарии (m-файлы скрипты) и М-функции.

М-сценарии представляет просто последовательность команд MATLAB без входных и выходных параметров. Сценарий оперирует с данными из рабочей области. Результаты выполнения М-сценария сохраняются в рабочей области после завершения сценария и могут быть использованы для дальнейших вычислений.

М-функции - это новые функции MATLAB, которые расширяют возможности системы. М-функции используют входные и выходные аргументы, внутренние локальные переменные. Напомним, что каждая М-функция имеет следующую структуру:

  • • строка определения функции. Она задает имя функции и количество входных и выходных аргументов, их локальные имена. Например function у = function_name(u,v,w )
  • • первая строка комментария определяет назначение функции. Она выводится на экран с помощью команд lookfor или help ;
  • • основной комментарий. Он выводится на экран вместе с первой строкой при использовании команды help . Основной комментарий начинается со второй строки комментария и заканчивается либо пустой строкой, либо началом программного кода;
  • • тело функции - это программный код, который реализует вычисления и присваивает значения выходным аргументам.

Если выходных параметров больше, то они указываются в квадратных скобках после слова function, например, function [х, у, z] = sphere (theta, phi, rho)

Имена входных переменных не обязаны совпадать с именами, указанными в строке определения функции. М-функция записывается в файл с тем же названием, что и функция и с расширением ш.

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

Пример 1. Следующая функция находит среднее значение и медиану для элементов вектора и, используя встроенную функцию n = length (и) и подфункции avg = mean (u, п) и med = median (u, n).

function [avg,med] = newstats(u) % Основная функция n = length(u);

function a = mean(v,n) % Подфункция

% Вычисление среднего a = sum(v)/n;

function m = median(v,n)

% Вычисление медианы w = sort (v);

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

Частные функции. Частный каталог представляет собой подкаталог с именем private родительского каталога. М-файлы частного каталога доступны только М-файлам родительского каталога. Поскольку файлы частного каталога не видимы вне родительского каталога, они могут иметь имена совпадающие, с именами файлов других каталогов системы MATLAB. Это удобно в тех случаях, когда пользователь создает собственные версии некоторой функции, сохраняя оригинал в другом каталоге. Поскольку MATLAB просматривает частный каталог раньше каталогов стандартных функций системы MATLAB он в первую очередь использует функцию из частного каталога.

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

  • • является ли новое имя именем переменной;
  • • является ли это имя именем подфункции данного М-файла;
  • • является ли оно именем частной функции, размещаемой в каталоге private;
  • • является ли оно именем функции в пути доступа системы MATLAB.

В случае дублирования имен система MATLAB использует первое имя в соответствии с вышеприведенной 4-уровнсвой иерархией. Следует отмстить, что в системе MATLAB допускается переопределять функцию по правилам объектно-ориентированного программирования.

При вызове М-функции, система MATLAB транслирует функцию в псевдокод и загружает в память. Это позволяет избежать повторного синтаксического анализа. Псевдокод остается в памяти до тех пор пока не будет использована команда clear или завершен сеанс работы. Команда clear применяется следующим образом:

  • • clear - удаление указанной функции из рабочей области;
  • • clear functions - удаление всех откомпилированных программ;
  • • clear all - удаление программ и данных.

Откомпилированные М-функции или М-сценарии можно сохранить для последующих сеансов, используя команду pcode в форме: pcode myfunc

Эта команда выполняет синтаксический анализ М-файла myfunc.m и сохраняет результирующий псевдокод (p-код) в файле с именем myfunc.p. Это позволяет избежать повторного разбора во время нового сеанса работы. При удалении М-файла myfunc.m система работает с P-кодом myfunc.p. Однако справка об этой функции уже недоступна. Применение P-кода целесообразно в двух случаях:

  • • когда требуется выполнять синтаксический анализ большого числа М-фай-лов, необходимых для визуализации графических объектов в приложениях, связанных с разработкой графического интерфейса пользователя;
  • • когда пользователь хочет скрыть алгоритмы, реализованные в М-файле.

Рабочая область функции. Каждой М-функции выделяется дополнительная область памяти, ие пересекающаяся с рабочей областью системы MATLAB. Такая область называется рабочей областью функции. При работе с системой MATLAB можно получить доступ только к переменным, размещенным в рабочей области системы или в рабочей области функции. Если переменная объявлена глобальной, то ее можно рассматривать как бы принадлежащей нескольким рабочим областям.

Проверка количества аргументов. Функции nargin и nargout позволяют определить количество входных и выходных аргументов вызываемой функции. Эту информацию в дальнейшем можно использовать в условных операторах для изменения хода вычислений. Например, function с = testargl(а,Ь) if (nargin == 1) с = а . л 2; elseif (nargin == 2) с = а + b; end

При задании единственного входного аргумента функция вычисляет квадрат входной переменной; при задании двух аргументов выполняется операция сложения.

Заметим, что порядок следования аргументов в выходном списке имеет важное значение. Если при обращении к М-функции выходной аргумент не указан, по умолчанию выводится первый аргумент. Для вывода последующих аргументов требуется соответствующее обращение к М-функции.

Произвольное количество аргументов. В MATLAB имеются функции, которые могут иметь меняющееся число входных аргументов и меняющееся число выходных параметров. Например, функция S=svd (А) вычисления сингулярных чисел матрицы А. Она может применяться в виде [U, S, V] =svd (А), когда требуется большее число выходных параметров. Другим примером такой функции может служить функция cat (А, В) горизонтального объединения массивов А и в. Она может иметь произвольное число входных массивов, cat (Al,А2,АЗ,А4).

Для создания таких функций, использующих неопределенной количество аргументов, в список аргументов вставляют переменные varargin и varargout

(variable argument input, variable argument output). Переменная varargin должна быть последней в списке входных аргументов, после всех обязательных. Переменная varargout должна быть последней в списке выходных переменных. Функции varargin и varargout позволяют передавать произвольное количество входных и выходных аргументов. Тогда система MATLAB упаковывает входные и выходные аргументы в массивы ячеек varargin и varargout. Каждая ячейка может содержать любой тип и любое количество данных.

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

Пример 2. Функция testvar допускает в качестве входных аргументов любое количество векторов из двух элементов и выводит на экран линии, их соединяющие, function testvar(varargin) for k = 1:length(varargin)

x(k) = varargin(1); % Выбор координат k-го вектора

y(k) = varargin(2) ; % из k-ой ячейки

end xmin = min(0,min(x)); ymin = min(0,min(y)); axis([xmin fix(max(x))+3 ymin fix(max(y))+3]) plot(x,y)

Таким образом, функция testvar может работать с входными списками разной длины, например, testvar([2 3],[1 5], [4 8], [б 5], [4 2], [2 3]) testvar([-l 0], [3 -5],[4 2],[1 1])

Формирование входного массива varargin. Поскольку список varargin хранит входные аргументы в массиве ячеек, то необходимо использовать индексы ячеек для извлечения данных. Индекс ячейки состоит из двух компонентов, например, y(i)= varargin(2);

Здесь индекс в фигурных скобках указывает доступ к содержанию і-ой ячейки массива varargin, а индекс в круглых скобках (2) указывает на второй элемент массива в ячейке.

Формирование выходного массива varargout. При произвольном количестве выходных аргументов их необходимо упаковать в массив ячеек varargout. Чтобы определить количество выходных аргументов функции, надо использовать функцию nargout.

Пример 3. Следующая функция использует в качестве входа массив из двух столбцов, где первый столбец - множество значений координаты х, а второй -множество значений координаты у. Функция разбивает массив на отдельные векторы-строки, которые могут быть переданы в функцию testvar в качестве входов, function [varargout] = testvar2(arrayin) for k = l:nargout varargout(k) = arrayin(k,:) % Запись значений в массив ячеек end

Отметим, что оператор присваивания в цикле for использует синтаксис массивов ячеек. А именно, фигурные скобки указывают, что данные в виде строки массива присваиваются ячейке. Вызвать функцию tcstvar2 можно следующим образом: а =

При использовании массивов ячеек в списках аргументов, массивы ячеек varargin и varargout должны быть последними в соответствующих списках аргументов. Например, приведенные ниже обращения к функциям показывают правильное использование списков varargin и varargout: function[out1, out2] = examplel(a,b,varargin) function[і,j,varargout] = example2(xl,yl,x2,y2,flag)

Локальные и глобальные переменные. Использование переменных в М-фай-ле ничем не отличается от использования переменных в командной строке, а именно:

  • • переменные не требуют объявления; прежде чем переменной присвоить значение;
  • • любая операция присваивания создает переменную, или изменяет значение существующей переменной;
  • • имена переменных начинаются с буквы, за которой следует любое количество букв, цифр и подчеркиваний; система MATLAB не поддерживает кириллицу и различает символы верхнего и нижнего регистров;
  • • имя переменной нс должно превышать 31 символа. Болес точно, имя может быть и длиннее, но система MATLAB принимает во внимание только первые 31 символ.

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

Пример 4. Допустим, требуется исследовать влияние коэффициентов ос и Р для модели хищник-жертва, описываемой уравнениями Лотке-Вольтерра:

Создадим М-файл lotka.m, который является векторной функцией правой части данной системы уравнений.

function ур = lotka(t, у)

%LOTKA уравнения Лотке-Вольтерра для модели хищник-жертва global ALPHA BETA

ур = [у(1) - ALPHA*y(l)*у(2); -y(2) + BETA*y(1)*y(2)];

Затем через командную строку введем переменные, которые должны быть приняты функцией lotka.m переменные), решим систему и построим графики решений в одном окне.



Для таких неординарных, но периодически случающихся среди студентов ситуаций существует мощное математическое оружие. Встречайте, кто еще не знает – пакет программ MATLAB.

Матлаб и решит уравнение, и аппроксимирует, и построит график функции. Понимаете, что это значит, друзья?

Это значит, что MATLAB – один из мощнейших на сегодняшний день пакетов обработки данных. Название расшифровывается как Matrix Laboratory. Матричная Лаборатория, если по-русски. Возможности программы покрывают практически все области математики. Так, пользуясь матлабом, Вы сможете:

  • Производить всевозможные операции над матрицами, решать линейные уравнения, работать с векторами;
  • Вычислять корни многочленов любой степени, производить операции над многочленами, дифференцировать, экстраполировать и интерполировать кривые, строить графики любых функций;
  • Проводить статистический анализ данных с использованием цифровой фильтрации, статистической регрессии;
  • Решать дифференциальные уравнения. В частных производных, линейных, нелинейных, с граничными условиями – не важно, матлаб все решит;
  • Выполнять операции целочисленной арифметики.


Помимо всего этого возможности MATLAB позволяют визуализировать данные вплоть до построения трехмерных графиков и создания анимированных роликов.

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

MATLAB как язык программирования


А еще MATLAB – это язык программирования, используемый непосредственно при работе с программой. Не будем вдаваться в подробности, скажем только, что программы, написанные на языке MATLAB, бывают двух видов: функции и скрипты.


MATLAB - серьезное средство для серьезных ребят

Основной рабочий файл программы – М-файл. Это бесконечный текстовый файл, и именно в нем происходит непосредственно программирование вычислений. Кстати, пусть Вас не пугает это слово – для того, чтобы работать в MATLAB, вовсе не нужно быть профессиональным программистом.

М-файлы делятся на

  • М-сценарии. М-сценарий – самый простой тип M-файла, у которого отсутствуют входные и выходные аргументы. Данный файл используется для автоматизации многократно повторяемых вычислений.
  • M-функции. М-функции – это М-файлы, допускающие наличие входных и выходных аргументов.

Строка определения функции сообщает системе MATLAB, что файл является М-функцией, а также определяет список входных аргументов. Так, строка определения функции average имеет вид:
function y = average(x)
Где:

  1. function - ключевое слово, определяющее М-функцию;
  2. y - выходной аргумент;
  3. average - имя функции;
  4. x - входной аргумент.

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

Безусловно, такой мощный пакет нужен не только для того, чтобы облегчить жизнь студентам. В настоящее время MATLAB, с одной стороны, очень популярен среди специалистов многих научных и инженерных отраслей. С другой стороны, возможность работы с большими матрицами делает MATLAB незаменимым инструментом финансовых аналитиков, позволяющим решить намного больше задач, чем, к примеру, известный всем Excel. Подробнее о том, как сделать презентацию на компьютере вы можете прочитать в обзорной статье.

Недостатки работы с MATLAB


MATLAB - хорошо, но тяжело

Какие есть трудности в работе с MATLAB? Трудность, пожалуй, всего одна. Но фундаментальная. Чтобы полностью раскрыть возможности MATLAB и с легкостью решать встающие перед Вами задачи, придется попотеть и сначала разобраться с самим матлабом (как создать файл, как создать функцию и др.). А это не так просто, ибо мощность и широкие возможности требуют жертв.

При всем желании нельзя сказать, что MATLAB – простая программа. Тем не менее, надеемся, все вышеперечисленное будет достаточным аргументом для того, чтобы взяться за ее освоение.

И напоследок. Если Вы не знаете, почему все в Вашей жизни пошло так, а не иначе, спросите об этом у матлаба. Просто наберите в командной строке “why” (почему). Он ответит. Попробуйте!

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

MATLAB – популярный пакет программ для решения технических, математических, статистических задач, вычислений и моделирования. Так же называется и одноимённый язык программирования, который используется в этом пакете. Давайте рассмотрим порядок работы с окном команд и редактором среды MATLAB.

1 Работа с окном команд в среде MATLAB

В среде MATLAB есть несколько режимов работы. Самый простой – это ввод команд непосредственно в окно команд (Command Window).

Использование пакета MATLAB

Окно команд MATLAB

Если оно не видно в интерфейсе программы, откроем его. Найти окно команд можно через меню Desktop Command Window.

Давайте для примера введём в это окно последовательно друг за другом команды

Стрелками клавиатуры вверх и вниз в окне команд мы можем переключаться между введёнными командами, тут же изменять их, а по нажатию Enter отправлять среде MATLAB на исполнение. Стрелками влево и вправо можно перемещаться по введённой команде и редактировать её. Если в конце команды стоит точка с запятой, то результат будет посчитан, но не будет выведен в окно команд; в противном случае результат выполнения команды будет отображён тут же. По любой функции в среде MATLAB есть подробная встроенная справка. Например, чтобы получить справку по команде plot, выделите эту команду, нажмите на неё правой кнопкой мыши, и в открывшемся контекстном меню выберите пункт Help on Selection или нажмите клавишу F1.

Справка по командам MATLAB

Получение справки по командам MATLAB

Удобно? Безусловно. И главное – очень быстро. Все эти действия занимают несколько секунд.

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

2 Работа с редактором в среде MATLAB

Чтобы упростить жизнь учёному, инженеру или студенту, служит окно редактора (Editor). Давайте откроем окно редактора через меню Desktop Editor.

Открытие редактора MATLAB

Открытие редактора MATLAB

В окне редактора можно создавать новые переменные, строить графики, писать программы (скрипты), создавать компоненты для обмена с другими средами, создавать приложения с пользовательским интерфейсом (GUI), а также редактировать имеющиеся.

Нас в данный момент интересует написание программы, содержащей функции для повторного использования в будущем. Поэтому идём в меню File редактора и выбираем New M-File.

Создание нового M-файла в MATLAB

Создание нового M-файла в MATLAB

М-файлами в среде МАТЛАБ называются файлы, содержащие текст программ (скрипты) или определённые пользователем функции.

Давайте напишем в редакторе простую функцию draw_plot:

Ввод текста программы в окне редактора MATLAB

Ввод текста программы в окне редактора MATLAB

Мы добавили вторую функцию и будем выводить сразу два графика рядом друг с другом. Знаком процента обозначаются в среде MATLAB комментарии.

Не забудем сохранить программу. Стандартное расширение файла с программой МАТЛАБ – *.m. Теперь закройте редактор и окно с графиком, который мы построили ранее.

Переходим обратно в окно команд.

Можно очистить историю команд, чтобы лишняя информация нас не отвлекала. Для этого кликните правой кнопкой мыши на поле ввода команд и в открывшемся контекстном меню выберите пункт Clear Command Window.

Переменная X у нас осталась после предыдущего эксперимента, мы её не изменяли и не удаляли. Поэтому в окно команд можно сразу ввести:

Вы увидите, что MATLAB прочитает нашу функцию из файла и выполнит её, нарисовав график.

Результат выполнения скрипта, написанного в редакторе MATLAB

Результат выполнения скрипта, написанного в редакторе MATLAB

Основным является сессионный cookie, обычно называемый MoodleSession. Вы должны разрешить использование этого файла cookie в своем браузере, чтобы обеспечить непрерывность и оставаться в системе при просмотре сайта. Когда вы выходите из системы или закрываете браузер, этот файл cookie уничтожается (в вашем браузере и на сервере).

Другой файл cookie предназначен исключительно для удобства, его обычно называют MOODLEID или аналогичным. Он просто запоминает ваше имя пользователя в браузере. Это означает, что когда вы возвращаетесь на этот сайт, поле имени пользователя на странице входа в систему уже заполнено для вас. Отказ от этого файла cookie безопасен - вам нужно будет просто вводить свое имя пользователя при каждом входе в систему.

Читайте также: