Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
pract_4.doc
Скачиваний:
2
Добавлен:
06.11.2018
Размер:
146.43 Кб
Скачать

1.5.5. Два вида m-файлов: скрипты и функции

Все m-файлы, содержащие исходные коды на языке MATLAB, делятся на два типа: файлы-сценарии и файлы-функции.

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

% Основной комментарий

% Дополнительный комментарий

Тело скрипта, состоящее из любой совокупности операторов.

Основным комментарием является первая строка текстовых комментариев, а дополнительным – последующие строки. Основной комментарий выводится при выполнении команд lookfor и «help имя_каталога». Полный комментарий выводится при выполнении команды «help имя_файла».

Замечание: так же, как и при работе в командном окне MATLAB, если в m-файле в конце какой-либо строки с вычислениями не поставить знак «;» (точка с запятой), то результат этих вычислений выведется в окне MATLAB.

М-файл типа «функция» является типичным элементом языка программирования MATLAB. Файлы-функции обязательно начинаются с объявления function, после которого указывается имя переменой (или имена нескольких переменных) – выходного параметра, имя самой функции и список ее входных параметров.

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

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

Правила вводов комментариев те же, что у файлов-сценариев.

Структура файла-функции с одним выходным параметром выглядит следующим образом:

function v=f_name(список_параметров)  заголовок

% Основной комментарий

% Дополнительный комментарий

Тело функции, состоящее из любой совокупности операторов

var=выражение

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

Замечание 2: Если выходных параметров больше одного, то необходимо использовать конструкцию типа: function [var1, var2, …]=f_name(список_параметров). Если функция, имеющая несколько выходных параметров, входит в состав математического выражения, то для выполнения вычислений в выражении будет использоваться первый из выходных параметров. Для получения значения всех выходных параметров функции ее необходимо вызывать в виде:

[res1, res2, …]=f_name(список_параметров);

В состав функций (но не скриптов!) можно включать встроенные функции (подфункции). Они объявляются и записываются в теле основных файлов и имеют конструкцию, идентичную основной функции. Пример функции с подфункциями:

function [avg,med] = newstats(u) основная функция

% NEWSTATS Find mean and median

% with internal functions.

n = length(u);

avg = mean(u,n);

med = median(u,n);

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

% Calculate average.

a = sum(v)/n;

function m = median(v,n) подфункция

% Calculate median.

w = sort(v);

if rem(n,2) == 1

m = w((n+1)/2);

else

m = (w(n/2)+w(n/2+1))/2;

end;

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

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

global var1 var2 …;

Здесь переменные var1 и var2 определены как глобальные. Чтобы несколько программных модулей могли совместно использовать глобальную переменную, ее идентификатор должен быть объявлен как global во всех этих модулях. Если в функции и подфункциях должны использоваться общие переменные, их необходимо также объявить глобальными как в функции, так и в ее подфункциях.

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

1. При написании программ желательно «векторизовывать» алгоритмы, т.е. преобразовывать циклы for и while с использованием векторов или матриц. Это значительно ускоряет работу программы. Например, один из способов получения вектора с компонентами, являющимися синусом 0 до 10 с шагом 0.001 (10001 компонент) реализуется фрагментом

i = 0;

for t = 0:.001:10

i = i+1;

y(i) = sin(t);

end

С использованием векторов эту же операцию можно выполнить иначе:

t = 0:.001:10;

y = sin(t);

При этом второй фрагмент будет выполняться значительно быстрее: для первого случая время составляет приблизительно 4 секунды (процессор Pentium-III 600MHz). Во втором случае временные затраты на вычисление, оцениваемые специальными функциями MATLAB tic и toc, практически равны нулю.

2. Время выполнения программного кода можно также значительно уменьшить, если заранее задавать размерности используемых массивов. При этом MATLAB освобождается от необходимости постепенного увеличения размерности, за счет чего и происходит экономия времени. Кроме того, это также помогает предотвратить фрагментацию памяти при работе с большими массивами данных. Например,

y = zeros(1,100)

for i = 1:100

y(i) = det(X^i);

end

выполнится намного быстрее, чем

for i = 1:100

y(i) = det(X^i);

end

Еще более показательным является следующий пример

y = zeros(1,10000)

for i = 1:10000 for i = 1:10000

y(i) = i^2; y(i) = i^2;

end end

0.109999 сек 3.68 сек

43

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]