Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СИНТЕЗ ЦИФРОВЫХ ФИЛЬТРОВ С ИСПОЛЬЗОВАНИЕМ ПАКЕТА ПРОГРАММ MATLAB.DOC
Скачиваний:
146
Добавлен:
01.05.2014
Размер:
1.41 Mб
Скачать

5.10. M-файлы

МATLAB может выполнять последовательности операций, хранящиеся в файлах. Такие файлы называют M-файлами, так как они должны иметь расширение .m. Большая часть работы с MATLAB будет состоять в создании и детализации M-файлов.

Существует два типа M-файлов: сценарии и функции. Файл-сценарий представляет собой последовательность обычных операторов MATLAB. Если имя такого файла, скажем, rotate.m, то команда rotate повлечет за собой выполнение операторов, содержащихся в этом файле. Переменные в таком файле – глобальные и будут изменять значения переменных среды.

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

A = [

1 2 3 4

5 6 7 8

];

то оператор MATLAB data выполнит присвоение, описанное в файле data.m.

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

Рассмотрим простой пример функционального файла:

function P=prodsqr(A,B)

% prodsqr – произведение квадратов двух матриц

A=A^2*B^2;

Этот файл должен быть записан на диск под именем prodsqr.m (соответствующем имени функции). Первая строка объявляет имя функции, входные и выходные переменные; без этой строки получился бы script-файл. Затем оператор MATLAB z=prodsqr(x,y) вызовет передачу переменных x и y в переменные A и B в функциональном файле, а результат вычислений – в переменную z. Так как переменные функционального файла локальны, их имена независимы от таких же имен во внешней среде.

Функция может также иметь несколько выходных переменных. Например:

function [mean,stdev]=stat(x)

% stat – среднее арифметическое и среднеквадратичное отклонение

% для вектора х stat(X) возвращает среднее арифметичес-

% кое и СКО X.

% для матрицы X stat(X) возвращает 2 вектора-строки,

% coдержащих, соответственно, средние и СКО каждого

% столбца.

[m,n]==size(x);

if m==1

m=n; % обработка случая когда x – вектор-строка

end

mean=sum(x)/m;

stdev=sqrt(sum(x.^2)/m–mean.^2)

Если этот текст поместить в файл с именем stat.m, команда MATLAB, например, [xm,xd]=stat(x), присвоит переменным xm и xd среднее арифметическое и СКО вектора x соответственнно. С помощью функции, имеющей несколько выходных аргументов, можно также выполнить одно присвоение. Например, xm=stat(x) присвоит переменной xm значение среднего арифметического вектора х. Эта функция демонстрирует некоторые особенности MATLAB, которые можно использовать для написания эффективных программ.

Заметим, например, что x.^2 – матрица квадратов элементов Х, sum – векторная функция (см. 5.6), sqrt – скалярная функция (см. 5.5), а деление sum(x)/m – матрично-скалярная операция. Символ % означает, что остальные символы строки – комментарий; MATLAB проигнорирует остаток строки. Однако первые несколько строк комментария, которые документируют М-файл, доступны для получения помощи по данной функции и будут отображены на экране при вводе help stat (в нашем примере).