
- •Введение
- •Основы программирования в среде пакета matlab Типы данных
- •Имена переменных и функций
- •Операция присваивания
- •Генерация обычных векторов и матриц
- •Операции над данными Стандартные функции Matlab
- •Манипуляции с матрицами
- •Операторы языка Matlab
- •Основные логические функции
- •Оператор выбора
- •Формирование собственных m-файлов пользователя
- •Глобальные переменные
- •Графические средства пакета matlab
- •Двухмерная графика
- •Трехмерная графика
Основные логические функции
any(x) – где x матрица – возвращает 1, если некоторые из элементов x не равны нулю, и 0 в противном случае;
all(x) – возвращает 1, если все элементы x не равны нулю, и 0 в противном случае;
find(x) – возвращает массив индексов матрицы x, соответствующие элементы которой не равны нулю;
find(условие) – возвращает массив индексов матрицы, соответствующие элементы которой удовлетворяют условию;
» x=1:5
x =
1 2 3 4 5
» find(x>=3)
ans =
3 4 5
Оператор выбора
Формат оператора:
switch выражение
case выражение1, операторы1
case выражение2, операторы2
…
case выражениеN, операторыN
otherwise альтернативные операторы
end
Например, ветвь case1 выполняется, если истинно
выражение = выражение1
и т.д., ветвь otherwise (опциональная) выполняется, если выражение не приняло ни одного из указанных значений.
Допустима конструкция
case { выражениеК1, выражениеК2, … }, операторыК
ОператорыК будут выполняться, если значение выражения совпадет хотя бы с одним из значений выражений К1, К2, …
Оператор попытки
Формат оператора:
try, оператор-попытка
catch, оператор-альтернатива
end
Оператор-альтернатива выполняется в том случае, если при выполнении оператора-попытки зафиксированы ошибки. Текст сообщения об ошибке можно вывести с помощью команды lasterr.
» A=[1 2; 3 4]; B=[2 4];
» try, X=A\B, catch, lasterr, X=A\B', end
ans =
Error using ==> \
Matrix dimensions must agree.
X =
0
1
Операторы интерпретации символьной строки (eval)
и имени функции (feval)
eval(s) – интерпретирует символьную строку s как оператор Matlab. Например,
» s='sqrt(2)'; % Задание символьной строки
» eval(s)
ans =
1.4142
feval(s, x1, x2, …) – выполняет функцию, имя которой (совпадающее с именем соответствующего m-файла) задано в строковой константе s, с аргументами x1, x2, … Например,
» s='sin';
» feval(s,pi/2)
ans =
1
Формирование собственных m-файлов пользователя
В Matlab существует два типа m-файлов: программные (script-файлы) и функции (functions).
Создание m-файла удобнее всего выполнить с помощью встроенного блокнота-отладчика Matlab Editor/Debugger, хотя принципиально функция может быть создана с помощью любого текстового редактора.
Программные файлы (программы) содержат последовательность операторов и команд языка Matlab, представляющей собой запись определенного алгоритма вычислений. Все переменные, содержащиеся в script-файле, находятся в оперативной памяти компьютера, и остаются там даже после завершения работы программы (так называемые глобальные данные).
Выполнение программ происходит после указания в командной строке имени соответствующего файла без расширения или после использования меню File – Run Script…
Функции должны содержать в первой строке файла заголовок, имеющий формат:
function вых_параметр = имя_функции (список_вх_параметров)
После заголовка обычно записывают комментарий (непрерывную последовательность символов, начиная со второй строки m-функции и заканчивая первой командой или первой пустой строкой), обычно выполняющий роль помощи, который будет выводиться на экран при выполнении в командной строке инструкции
help имя_функции
Первая строка комментария-помощи, известная как m1-строка, включается в файл содержания данного каталога contents.m.
После комментария записывают последовательность операторов, составляющих тело функции и описывающих алгоритм преобразования входных параметров в выходные.
Сохранение функции следует выполнить в любой доступный каталог обязательно с именем, совпадающим с именем функции, и расширением .m.
Для выполнения функции к ней необходимо обратиться из другой функции, из программного файла или из командной строки, указав ее имя и в скобках – список фактических параметров (аргументов), каждый из которых к моменту вызова функции должен быть определен (иметь значение).
Входные и выходной параметры в описании функции являются формальными (не имеющими значений). Формальные параметры, а также вспомогательные переменные, используемые в операторах функции, являются локальными, то есть, их значения теряются после завершения работы функции. Функция не может изменить значения аргументов, даже если соответствующие им формальные входные параметры в процессе работы функции изменяются.
Если функция не требует наличия входных и (или) выходных параметров, они в заголовке функции указываются в виде пустого вектора [ ], или вообще опускаются.
Пример создания функции.
Создать функцию maxi(x), которая для заданного вектора определяет максимальный элемент и его адрес.
function [xm,im]=maxi(x)
% Пояснения к работе функции
% …
[m,n]=size(x);
if (m~=1)&(n~=1) % Если x - матрица
error('Ошибка в размерности аргумента');
end
k=length(x);
if k==1, xm=x; im=1; break; end
xm=x(1);
for i=2:k
if x(i)>xm xm=x(i); end
end
if nargout==2 % Два выходных параметра
im=find(x==xm);
end
Набранный текст функции необходимо сохранить в доступном каталоге в файле с именем maxi.m.
Пример работы с созданной функцией в командном окне Matlab выглядит следующим образом:
» y=[2 5 8 -1];
» maxi(y)
ans =
8
» [ymax imax]=maxi(y)
ymax =
8
imax =
3
» x=[1 2 8; 5 3 12];
» maxi(x)
??? Error using ==> maxi
Ошибка в размерности аргумента
» c=25;
» maxi(c)
ans =
25
Рациональное использование оперативной памяти в Matlab
для ускорения выполнения операций
Встроенные в Matlab операции над векторами и матрицами в целом выполняются намного быстрее, чем соответствующие им поэлементные операции. Поэтому следует стремиться к максимальной векторизации алгоритмов в m-файлах, особенно при больших объемах вычислений.
Например, в большом числе случаев возможно и целесообразно заменить циклические операции векторными или матричными:
clear all;
i = 1;
for t = 0:.1:10
i = i+1;
y(i) = sin(t);
end
% Время выполнения 2,31 сек
clear all;
t = 0:.1:10;
i = 1:length(t);
y = sin(t);
% Время выполнения 0,06 сек
Отсюда видно, что скорость выполнения операций, дающих практически тот же результат, возрастает в тридцать – сорок раз.
Продолжительность выполнения операций в Matlab может быть определена с помощью оператора, синтаксис которого имеет вид:
tic, операторы, toc
Если же какую-либо часть программы не удается векторизировать, выполнение циклических операций можно ускорить предварительным резервированием памяти под матрицы, в которые потом будут помещены результаты. Это особенно заметно при работе с большими массивами.