Глава 3. Элементы программирования
Практически так же легко определяется и функция, возвращающая результат. Рассмотрим следующий программный код m-файла:
function y=Sinus(x) y=sin(x)./x;
end
На рис. 3.9 представлен редактор m-файлов с кодом функции Sinus().
Рис. 3.9. Окно редактора m-файлов с кодом функции Sinus()
В данном случае функция называется Sinus() и имеет один аргумент, который в программном коде обозначен как x. Результат имеет название y и вычисляется согласно соотношению y=sin(x)./x. Очевидно, что в данном случае речь идет о зависимости вида y(x) = sin(x x) . Обращаем внима-
ние, что при делении использован оператор ./, что позволяет в качестве аргумента использовать не только скаляр, но и матрицу (список значений аргумента). Ниже приведен пример вызова созданной функции (жирным шрифтом выделен ввод пользователя):
>>Sinus(pi/4) ans =
0.9003
>>Sinus([pi/4 pi/3 pi/2 pi]) ans =
0.9003 |
0.8270 |
0.6366 |
0.0000 |
>> Sinus([pi/4 pi/3;pi/2 pi]) ans =
0.9003 0.8270
0.6366 0.0000
Видим, что результат одинаково хорошо вычисляется как для скалярного, так и для матричного аргумента функции. При этом результатом является массив той же размерности, что и массив-аргумент. На рис. 3.10 показано окно рабочего документа с результатом выполнения приведенных выше команд.
Еще раз обращаем внимание читателя: несмотря на то, что аргументом функции может передаваться матрица, и такого же размера матрица воз-
111
Самоучитель Matlab
Рис. 3.10. Результат использования функции пользователя Sinus()
вращается как результат, у функции один аргумент и одно значение возвращается в качестве результата – просто эти значения могут быть матрицами. Это принципиально отличная ситуация от случая, когда у функции несколько аргументов и/или несколько значений возвращаются в качестве результата. Пример такой функции приведен в документе на рис. 3.11.
Рис. 3.11. Окно редактора m-файлов с кодом функции SpherCoords()
Окно редактора m-файлов содержит следующий код функции пользователя:
function [x,y,z]=SpherCoords(r,phi,theta) x=r*sin(theta)*cos(phi); y=r*sin(theta)*sin(phi);
z=r*cos(theta); end
112
Глава 3. Элементы программирования
В данном случае речь идет, очевидно, о функции для выполнения преобразования сферических координат r , ϕ и θ в декартовые x , y и z по формулам x = r sin(θ)cos(ϕ), y = r sin(θ)sin(ϕ) и z = r cos(θ). Полярные координаты точки передаются в качестве аргумента функции, а декартовые координаты возвращаются в качестве результата. На рис. 3.12 приведен пример использования функции SpherCoords() для выполнения преобразования одних координат в другие.
Рис. 3.12. Пример использования функции SpherCoords()
Если при вызове функции ее результат записывается в скалярную переменную, как, например, в команде x=SpherCoords(1,pi/3,pi/4), то соответствующая переменная получит в качестве значения первый элемент из списка результатов. В результате выполнения команды [x,y,z]=SpherCoords(1, pi/3,pi/4) значения получают все три переменные, указанные в списке, которому присваивается значение.
В программных кодах m-файлов могут использоваться комментарии. Комментарий предназначен исключительно для программиста (или пользователя) и при обработке кода игнорируется. Начинается комментарий со знака процента (то есть %). Все, что находится после знака процента, рассматривается как комментарий.
Комментарий, размещенный в шапке (в заголовке) m-файла, несет дополнительную функциональную нагрузку – он используется в качестве справки
113
Самоучитель Matlab
по программному коду (функции) этого m-файла. На рис. 3.13 окно редактора m-файлов с кодом функции, у которой имеется комментарий в начале программного кода.
Рис. 3.13. Окно с кодом функции и комментарием
В программном коде определена функциональная зависимость
f (x) = exp(x) −1 . Функция называется mExp(), и программный код для x
ее реализации (вместе с комментарием):
%В качестве значения для аргумента x функцией
%возвращается выражение (exp(x)-1)/x function y=mExp(x)
y=(exp(x)-1)/x; end
Для того чтобы получить справку по функции (в том числе и функции, созданной пользователем), достаточно в командной строке ввести ключевое слово help, после которого вводится имя функции, и с помощью клавиши <Enter> соответствующая команда выполняется. На рис. 3.14 показан результат применения этой процедуры по отношению к созданной функции.
Рис. 3.14. Справка для функции пользователя
114
Глава 3. Элементы программирования
После выполнения команды help mExp появляется следующее текстовое сообщение:
Вкачестве значения для аргумента x функцией возвращается выражение (exp(x)-1)/x
Несложно заметить, что это именно тот текст, что был введен в начале m-файла с кодом функции mExp() в качестве комментария. При этом если просто вызвать функцию с каким-то числовым аргументом, выводится значение функции для данного аргумента. Например, в результате выполнения команды mExp(2) получаем числовое значение 3.1945 (см. рис. 3.14).
Нередко удобно или просто необходимо в процессе вычисления функции вводить данные и выводить сообщения. Для ввода данных используется функция input(). Аргументом этой функции указывается текст приглашения, которое выводится перед тем, как нужно будет ввести значение. Результатом функции возвращается значение, введенное пользователем. На рис. 3.15 приведено окно редактора m-файлов с кодом функции, при выполнении которой пользователем вводится числовое значение для ее аргументов.
Рис. 3.15. В коде функции использована инструкция ввода значения
Программный код функции ComplPower() имеет следующий вид:
function z=ComplPower Re=input('Действительная часть Re='); Im=input('Мнимая часть Im='); n=input('Целочисленная степень n='); z=(Re+1i*Im)^n;
end
Функция предназначена для вычисления целочисленной степени комплексногочисла.Унеенетаргументов,авкачестверезультатаонавозвращаеткомплексное число. Поскольку для вычисления результата необходимо знать три значения: действительную часть комплексного числа, мнимую часть комплексного числа и степень, эти значения вводятся при выполнении функции. Для ввода действительной части в программном коде функции ComplPower() исполь-
115