Elettracompany.com

Компьютерный справочник
4 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Matlab создание функции

Matlab создание функции

2. Синтаксис определения и вызова M-функций .

Текст M-функции должен начинаться с заголовка , после которого следует тело функции .

Заголовок определяет » интерфейс» функции ( способ взаимодействия с ней ) и устроен следующим образом:

function [ RetVal1, RetVal2, ] = FunctionName( par1, par2, )

Здесь провозглашается функция ( с помощью неизменного «ключевого» слова function ) с именем FunctionName, которая принимает входные параметры par1, par2, , и вырабатывает ( вычисляет ) выходные ( возвращаемые ) значения RetVal1, RetVal2

По-другому говорят, что аргументами функции являются переменные par1, par2. а значениями функции ( их надо вычислить ) являются переменные RetVal1, RetVal2, .

Указанное в заголовке имя функции (в приведённом примере — FunctionName) должно служить именем файла, в который будет записан текст функции. Для данного примера это будет файл FunctionName.m ( расширение имени, по-прежнему, должно состоять лишь из одной буквы m ). Рассогласования имени функции и имени файла не допускается!

Тело функции состоит из команд, с помощью которых вычисляются возвращаемые значения. Тело функции следует за заголовком функции. Заголовок функции плюс тело функции в совокупности составляют определение функции.

Как входные параметры, так и возвращаемые значения могут быть в общем случае массивами ( в частном случае — скалярами ) различных размерностей и размеров. Например, функция MatrProc1

function [ A, B ] = MatrProc1( X1, X2, x )

A = X1 .* X2 * x;

B = X1 .* X2 + x;

рассчитана на «приём» двух массивов одинаковых ( но произвольных ) размеров и одного скаляра.

Эти массивы в теле функции сначала перемножаются поэлементно, после чего результат такого перемножения ещё умножается на скаляр. Таким образом порождается первый из выходных массивов. Одинаковые размеры входных масивов X1 и X2 гарантируют выполнимость операции их поэлементного умножения. Второй выходной массив ( с именем B ) отличается от первого тем, что получается сложением со скаляром ( а не умножением ).

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

Если фактический параметр задан именем некоторой переменной, то реальные вычисления будут производиться с копией этой переменной ( а не с ней самой ). Это называется передачей параметров по значению .

Ниже показан вызов из командного окна MATLABа ранее созданной нами для примера функции MatrProc1.

Здесь имена фактических входных параметров ( W1 и W2 ) и переменных, в которых записываются результаты вычислений ( Res1 и Res2 ), не совпадают с именами аналогичных переменных в определении функции MatrProc1. Очевидно, что совпадения и не требуется, тем более, что у третьего входного фактического параметра нет имени вообще! Чтобы подчеркнуть это возможное отличие, имена входных параметров и выходных значений в определении функции называют формальными.

В рассмотренном примере вызова функции MatrProc1 из двух входных квадратных матриц 2 x 2 получаются две выходные матрицы Res1 и Res2 точно таких же размеров:

Res1 =
9 6
6 6

Res2 =
6 5
5 5

MatrProc1 [r1,r2] = MatrProc1( [ 1 2 3; 4 5 6 ], [ 7 7 7; 2 2 2 ], 1 );

с двумя входными массивами размера 2×3, получим две выходные матрицы размера 2×3. То есть, одна и та же функция MatrProc1 может обрабатывать входные параметры различных размеров и размерностей! Можно вместо массивов применить эту функцию к скалярам ( это всё равно массивы размера 1×1 ).

Теперь рассмотрим вопрос о том, можно ли использовать эту функцию в составе выражений так, как это делается с функциями, возвращающими единственное значение? Оказывается это делать можно, причём в качестве значения функции, применяемого для дальнейших вычислений, используется первое из возвращаемых функцией значений. Следующее окно системы MATLAB иллюстрирует это положение:

При вызове с параметрами 1,2,1 функция MatrProc1 возвращает два значения: 2 и 3. Для использования в составе выражения используется первое из них.

Так как вызов любой функции можно осуществить, написав произвольное выражение в командном окне MATLABа, то всегда можно совершить ошибку, связанную с несовпадением типов фактических и формальных параметров. MATLAB не выполняет никаких проверок на эту тему, а просто передаёт управление функции. В результате могут возникнуть ошибочные ситуации. Чтобы избежать ( по-возможности ) возникновения таких ошибочных ситуаций, предлагается в тексте M-функций осуществлять проверку входных параметров. Например, в функции MatrProc1 легко осуществить выявление ситуации, когда размеры первого и второго входных параметров различны. Для написания такого кода требуются конструкции управления, которые мы пока ещё не изучали. Самое время приступить к их изучению!

Документация

Создание функций в файлах

И скрипты и функции позволяют вам последовательностям повторного использования команд путем хранения их в программных файлах. Скрипты являются самым простым типом программы, поскольку они хранят команды точно, когда вы ввели бы их в командной строке. Функции обеспечивают больше гибкости, в основном, потому что можно передать входные значения и возвратить выходные значения. Например, эта функция с именем fact вычисляет факториал номера ( n ) и возвращает результат ( f ).

Этот тип функции должен быть задан в файле, не в командной строке. Часто, вы храните функцию в ее собственном файле. В этом случае лучшая практика состоит в том, чтобы использовать то же имя для функции и файла (в этом примере, fact.m ), поскольку MATLAB ® сопоставляет программу с именем файла. Сохраните файл или в текущей папке или в папке на пути поиска файлов MATLAB.

Можно вызвать функцию из командной строки, с помощью тех же синтаксических правил, которые применяются к функциям, установленным с MATLAB. Для экземпляров вычислите факториал 5.

Начиная в R2016b, другая опция для хранения функций должна включать их в конце файла скрипта. Например, создайте файл с именем mystats.m с несколькими командами и двумя функциями, fact и perm . Скрипт вычисляет перестановку (3,2).

Читать еще:  Натуральный логарифм matlab

Вызовите скрипт из командной строки.

Синтаксис для функционального определения

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

function ключевое слово (требуется)

Используйте символы нижнего регистра для ключевого слова.

(Дополнительные) выходные аргументы

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

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

Если нет никакого выхода, можно не использовать его.

Или можно использовать скобки пустого квадрата.

Имя функции (требуется)

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

Примечание

Чтобы избежать беспорядка, используйте то же имя и для файла функции и для первой функции в файле. MATLAB сопоставляет вашу программу с именем файла , не имя функции. Файлы скрипта не могут иметь того же имени как функция в файле.

(Дополнительные) входные параметры

Если ваша функция принимает какие-либо входные параметры, заключите их имена в круглые скобки после имени функции. Разделите входные параметры запятыми.

Если нет никаких входных параметров, можно не использовать круглые скобки.

Совет

Когда вы задаете функцию с несколькими аргументами ввода или вывода, перечисляете любые обязательные аргументы сначала. Это упорядоченное расположение позволяет вам вызывать свою функцию, не задавая дополнительные аргументы.

Содержимое функций и файлов

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

Программные файлы могут содержать несколько функций. Если файл содержит только функциональные определения, первая функция является основной функцией и является функцией, которую MATLAB сопоставляет с именем файла. Функции, которые следуют за основной функцией или кодом скрипта, являются вызванными локальными функциями. Локальные функции только доступны в файле.

Операторы end

Функции заканчивают любым end оператор, конец файла или строка определения для локальной функции, какой бы ни на первом месте. end оператор требуется если:

Любая функция в файле содержит вложенную функцию (функция, полностью содержавшая в ее родительском элементе).

Функция является локальной функцией в файле функции, и любая локальная функция в файле использует end ключевое слово.

Функция является локальной функцией в файле скрипта.

Несмотря на то, что это является иногда дополнительным, используйте end для лучшей удобочитаемости кода.

MATLAB Language Анонимные функции и функции

пример

основы

Анонимные функции являются мощным инструментом языка MATLAB. Это функции, которые существуют локально, то есть: в текущей рабочей области. Однако они не существуют на пути MATLAB, как регулярная функция, например, в m-файле. Вот почему они называются анонимными, хотя они могут иметь имя как переменную в рабочей области.

Оператор @

Используйте оператор @ для создания анонимных функций и функций. Например, чтобы создать дескриптор функции sin (sine) и использовать его как f :

Теперь f является дескриптором функции sin . Как и в реальной жизни, дверная ручка — это способ использовать дверь, функциональная рукоятка — это способ использовать функцию. Для использования f аргументы передаются ему, как если бы это была функция sin :

f принимает любые входные аргументы, которые принимает функция sin . Если sin будет функцией, которая принимает нулевые входные аргументы (а это не так, но другие делают, например, функцию peaks ), f() будет использоваться для вызова без входных аргументов.

Пользовательские анонимные функции

Анонимные функции одной переменной

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

Теперь f принимает один входной аргумент, называемый x . Это было задано с помощью круглых скобок (. ) непосредственно после оператора @ . f теперь является анонимной функцией x : f(x) . Он используется, передавая значение x в f :

Вектор значений или переменная также может быть передан в f , если они действительным образом используются внутри f :

Анонимные функции более чем одной переменной

Таким же образом анонимные функции могут быть созданы, чтобы принимать более одной переменной. Пример анонимной функции, которая принимает три переменные:

Параметрирование анонимных функций

Переменные в рабочей области могут использоваться в определении анонимных функций. Это называется параметризацией. Например, для использования константы c = 2 в анонимной функции:

f(3) использовала переменную c как параметр для умножения с предоставленным x . Обратите внимание, что если значение c в этой точке задано на что-то другое, тогда вызывается f(3) , результат не будет отличаться. Значение c является значением во время создания анонимной функции:

Входные аргументы для анонимной функции не относятся к переменным рабочего пространства

Обратите внимание, что использование имени переменных в рабочей области в качестве одного из входных аргументов анонимной функции (т. Е. С помощью @(. ) ) не будет использовать значения этих переменных. Вместо этого они рассматриваются как разные переменные в рамках анонимной функции, то есть: анонимная функция имеет свое личное рабочее пространство, где входные переменные никогда не ссылаются на переменные из основного рабочего пространства. Основное рабочее пространство и рабочая область анонимной функции не знают друг о друге. Пример, иллюстрирующий это:

Значение x из основного рабочего пространства не используется в f . Кроме того, в основной рабочей области x осталось нетронутым. В пределах области f имена переменных между круглыми скобками после оператора @ не зависят от основных переменных рабочей области.

Читать еще:  Метод простой итерации matlab

Анонимные функции хранятся в переменных

Анонимная функция (или, точнее, дескриптор функции, указывающая на анонимную функцию) сохраняется как любое другое значение в текущем рабочем пространстве: в переменной (как мы это делали выше) в массиве ячеек ( <@(x)x.^2,@(x)x+1>) или даже в свойстве (например, h.ButtonDownFcn для интерактивной графики). Это означает, что анонимную функцию можно рассматривать как любое другое значение. Когда он хранится в переменной, он имеет имя в текущей рабочей области и может быть изменен и очищен так же, как переменные, содержащие числа.

По-разному: дескриптор функции (будь то в форме @sin или для анонимной функции) — это просто значение, которое может быть сохранено в переменной, подобно цифровой матрице.

Расширенное использование

Передающая функция обрабатывает другие функции

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

Пример: функция создается в m-файле, который принимает дескриптор функции и скалярное число. Затем он вызывает дескриптор функции, передавая ему 3 а затем добавляет скалярное число к результату. Результат возвращается.

Сохраните его где-нибудь на пути, например, в текущей папке MATLAB. Теперь funHandleDemo можно использовать следующим образом, например:

Рукоятка другой существующей функции может быть передана funHandleDemo :

Обратите внимание, что @sin был быстрым способом получить доступ к функции sin без предварительного ее хранения в переменной, используя f = @sin .

Использование bsxfun , cellfun и подобных функций с анонимными функциями

MATLAB имеет встроенные функции, которые принимают анонимные функции в качестве входных данных. Это способ выполнить многие вычисления с минимальным количеством строк кода. Например, bsxfun , который выполняет bsxfun двоичные операции, то есть: он применяет функцию по двум векторам или матрицам bsxfun . Обычно для этого требуется использование for -loops, для которого часто требуется предварительное распределение скорости. Используя bsxfun этот процесс ускоряется. Следующий пример иллюстрирует это, используя tic и toc , две функции, которые можно использовать для временного использования кода. Он вычисляет разницу между каждым элементом матрицы из среднего значения столбца.

Выполнение приведенного выше примера приводит к двум выходам:

Эти строки поступают от функций toc , которые печатают прошедшее время со времени последнего вызова функции tic .

bsxfun применяет функцию в первом аргументе ввода к двум другим входным аргументам. @minus — это длинное имя для той же операции, что и знак минуса. Возможно, была указана другая анонимная функция или дескриптор ( @ ) для любой другой функции, если она принимает A и mean(A) качестве входных данных для создания значимого результата.

Специально для больших объемов данных в больших матрицах bsxfun может значительно ускорить работу. Он также делает код более чистым, хотя его может быть труднее интерпретировать для людей, которые не знают MATLAB или bsxfun . (Обратите внимание, что в MATLAB R2016a и более поздних версиях многие операции, которые ранее использовали bsxfun больше не нуждаются в них, A-mean(A) работает напрямую и может в некоторых случаях быть еще быстрее.)

Нейронные сети в matlab

Login

В программе MATLAB вы будете использовать как встроенные функции, так и
Matlab функции, созданные вами.

Встроенные функции

Программа MATLAB имеет много встроенных функций. В их число входят
функции sqrt, cos, sin, tan, log, exp и atan (для функции арктангенс), а также
более специализированные математические функции, такие как gamma, erf и besselj. Программа MATLAB имеет также некоторые встроенные константы,
включая pi (число п), i (комплексное число i = корень(-1)) и Inf (°° — бесконечность). Ниже показано несколько примеров:

Функция log является натуральным логарифмом и во многих текстах называется In.

Функции, задаваемые пользователем

В этом разделе мы проверим два способа задания ваших собственных функций в
программе MATLAB. Первый способ использует команду inline, а второй
использует оператор @, чтобы создать так называемую «анонимную функцию».
Второй метод является новым в программе MATLAB 7, и в настоящее время этому
методу отдается предпочтение. Периодически мы будем упоминать о команде
inline ради пользователей более ранних версий программы. Однако мы
настоятельно рекомендуем пользователям MATLAB 7 и пользователям более ранних
версий, когда они обновят программу, использовать оператор @ в качестве
обычного метода для задания функций. Функции можно также задавать в
отдельных файлах, которые называются М-файлами (см. главу 3).
В этом примере показано, как задается функция f (x) = х 2 с использованием
этих команд.

Можно сделать и по-другому:

f1 =
Inline function:
f1(x) = х^2

Когда функция задана, не важно каким методом, вы можете ее вычислить, например:

Как мы отмечали ранее, большинство функций программы MATLAB могут
оперировать как векторами, так и скалярами. Чтобы быть уверенным, что заданная
вами функция может оперировать с векторами, вставляйте точки перед
математическими операторами .* ./ и .^ Таким образом, чтобы получить векторизованную версию функции f (x) = х 2 , введите строку

Теперь мы можем вычислить любую функцию для вектора, например:

ans =
1 4 9 16 25

Используя графические возможности программы MATLAB, вы можете начертить
графики функций f и f1. Это можно сделать несколькими способами, которые
мы рассмотрим в разделе «Графика» далее в этом уроке. В завершении этого
раздела отметим, что функции можно также задавать с двумя или более
переменными. Например, решение любой из этих функций

g = @(x, y) x^2 + y^2; g (1, 2);
g1 = inline (‘x^2 + y^2’, ‘x’, ‘y’); g1 (1, 2)

даст ответ 5. Если вместо этого вы зададите функцию следующим образом

тогда вы сможете вычислить векторы; таким образом, выполнение следующего
выражения

Читать еще:  M последовательность matlab

дает значения функции в точках (1, 3) и (2, 4).

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

В помощь математикам: обзор MATLAB

Доверь свою работу кандидату наук!

Обзор MATLAB

Те, кто имеет дело с высшей математикой, прекрасно знают, с какими математическими «чудовищами» иногда приходится сталкиваться. Например, на вычисление какого-нибудь гигантского тройного интеграла можно потратить настоящую уйму времени, душевных сил и не восстанавливающихся нервных клеток. Конечно, это очень интересно, бросить вызов интегралу, и взять его. Но, что делать, если вместо этого интеграл грозиться взять Вас? Или, что еще хуже, кубический трехчлен вышел из-под контроля и разбушевался? Такого и врагу не пожелаешь.

Что делать?

Раньше вариантов было всего два: плюнуть на все и пойти гулять или вступить в многочасовую схватку с интегралом. Ну, кому многочасовую, кому многоминутную – кто как учился. Но суть не в этом. Двадцатый век и неумолимо движущийся прогресс предлагают нам третий способ, а именно позволяют взять самый сложный интеграл «по-быстрому». То же самое касается решения всевозможных уравнений, построения графиков функций в виде кубических гиперболоидов и т.д.

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

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

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

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

MATLAB

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

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

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

М-файл

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

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

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

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

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

Для того чтобы наглядно показать, как происходит работа в MATLAB, приведем ниже пример создания функции в матлабе. Данная функция будет вычислять среднее значение вектора.
function y = average (x)
% AVERAGE Среднее значение элементов вектора.
% AVERAGE(X), где X — вектор. Вычисляет среднее значение элементов вектора.
% Если входной аргумент не является вектором, генерируется ошибка.
[m,n] = size(x);
if (

Строка определения функции сообщает системе 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 Вы всегда можете обратиться к нашим специалистам, в любой момент готовым ответить на любой Ваш вопрос.

Ссылка на основную публикацию
Adblock
detector