Результат:
s = 4 5 2
rows = 4
cols = 5
Пример 4. Количество входных параметров.
Тип файла – функция. Имя файла – testarg1.m
function c = testarg1(a,b)
if (nargin == 1)
c = a.^2;
elseif (nargin == 2)
66
c = a + b;
end
Вызовы функции:
estarg1([1 2])
testarg1([1 2],[3 4])
Результат выполнения:
ans = 1 4
ans = 4 6
Пример 5. Суммирование объектов double в массиве ячеек
varargin
function s = add(s,varargin)
for n = 1:nargin-1
s = s + varargin{n};
end
Пример 6.
О массиве ячеек
varargin
входных параметров переменной длины
function b = blue(varargin)
if nargin < 1
varargin = {’rgb’};
end
switch(varargin{1})
case ’rgb’
b = [0 0 1];
case ’hsv’
b = [2/3 1 1];
otherwise
error('Цветовая модель не определена')
end
Аноним и функция-строка
Помимо описанных конструкций в ML используются анонимы. Это не-
поименованные процедуры-функции одного или нескольких аргументов.
67
Синтаксис анонимов сводится к выражению, левая часть которого является
именем процедуры, правая состоит из определяющего символа @, после ко-
торого в круглых скобках перечисляются один или несколько аргументов
функции, а затем приводится её аналитическое представление, зависящее от
этих аргументов, например,
sincos = @(x) sin(x) + cos(x);
w = @(x,t,c) cos(x-c*t);
Заметим, что анонимы могут быть аргументами функций, например, fzero
fzero( @(x) sin(x)+cos(x), 0 ).
Анонимную функцию можно определять прямо в командной строке ML или в
пределах функции или скрипта. То есть, можно создать простые функции без
необходимости создания файла специально для них.
Конструкция
inline
также обеспечивает быстрое создание функции одной
или нескольких переменных в соответствие с предлагаемым синтаксисом:
Namefunction=inline(expression_string)
Пример 5. Процедура
inline
g=inline('2*cos(x)-sin(y)')
g(pi/8,pi/12)
symvar(g)
% массив ячеек, содержит аргументы функции
g{1},g{2}
% аргументы
Подпроцедуры
Помимо функций и процедур иногда целесообразно определить
функцию, которая нужна только для выполнения конкретной процедуры, то-
гда она должна быть записана в том же файле, что и головная процедура, и
является подпроцедурой (подфункцией). Подпроцедура «невидима» для ос-
тальных программ или процедур.
68
Пример 6. Процедуры и подфункции
function [x1,x2] = quadform(a,b,c)
d = discrim(a,b,c);
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end
% quadform()
function D = discrim(A,B,C)
D = sqrt(Bˆ2 - 4*A*C);
end
% discrim()
69
Литература
1.
Говорухин, В. Компьютер в математическом исследовании: Учеб.курс -
СПб. *и др.+: Питер, 2001. - 624 с.
2.
А. М. Половко, П. Н. Бутусов. MATLAB для студента Санкт-Петербург
БХВ-Петербург 2005 320 с. (19 экз)
3.
Таранчук В.Б. Основные функции систем компьютерной алгебры. ,
2013. — 59 p.
4.
Дьяконов В.П. MatLab:Учебный курс. СПб..: 2001
5.
Джон Г. Мэтьюз,КуртисД.Финк.Численные методы. Использование
MatLab.И. «Вильямс »Москва, Санкт-Петербург, Киев.2001, 713 с.
6.
Дьяконов В. П. Энциклопедия компьютерной алгебры. ДМК-Пресс,
2009. — С. 1264. — ISBN 978-5-94074-490-0.
Достарыңызбен бөлісу: |