Автор: Пользователь скрыл имя, 12 Ноября 2010 в 00:08, курс лекций
Переменные рабочего пространства. Арифметические выражения. Типы данных. Скрипты и функции. Операторы MATLAB. Работа с файлами. Работа с текстовыми файлами.
Скрипт может быть подготовлен в любом текстовом редакторе и сохранен с расширением m или с помощью встроенного в MATLAB редактора m-файлов, вызываемого по команде "File/New/M-file" (рис. 5).
Для запуска
фрагмента, представленного на рис.
5 (вычисление факториала 5) необходимо
сохранить скрипт, например, под именем
fact5.m и в текущей строке командного окна
набрать имя файла: >> fact5 a = 120 |
Рис. 5. M-файл |
Функции – более удобная разновидность скриптов, первой строкой которых является заголовок, использующий оператор function.
Особенности функций:
Пример m-файл с именем factn.m для вычисления факториала любого числа n:
function y=factn(n)
k=1;
for (i=1:1:n)
k=k*i;
end
y=k;
Для вычисления 6! нужно набрать в командной строке:
>> k=factn(6)
k =
720
В любом m-файле можно описать несколько функций, но извне можно вызвать только первую. Остальные функции называются подфункциями.
MATLAB выполняет m-файлы, как правило в режиме интерпретации, что существенно снижает скорость работы по сравнению с компилирующими системами. Для повышения производительности MATLAB при первом обращении к скрипту (функции) формирует псевдокод (p-code), который остается в оперативной памяти либо до конца сеанса, либо до очистки оперативной памяти одной из следующих команд.
clear имя-функции | удаление конкретного псевдокода |
clear functions | удаление псевдокодов всех функций |
clear all | удаление всех функций и переменных |
Любой m-файл может быть превращен в псевдокод с помощью процедуры pcode:
pcode имя_m-файла
Результатом
работы является двоичный файл с тем
же именем и расширением p.
Операторы MATLAB
1 | var=expr | Присваивание – вычисляет значение выражения expr и заносит результат в переменную var. |
2 | if условие_1
операторы_1 [elseif условие_2 операторы_2 elseif условие_3 ……… else операторы] end |
Условный оператор – если справедливо условие_1, то выполняется группа операторов операторы_1 и т.д. Если все условия_i ложны, то выполняются операторы между else и end. |
3 | switch expr
case val1 операторы_1 case val2 операторы_2 ……… [othervise операторы] end |
Переключатель по значению выражения expr. Если совпадает с val1, то выполняются операторы операторы_1 и т.п. Если не совпадает ни с одним значением из case, то выполняются операторы между othervise и end. |
4 | for var=a:[h]:b
операторы end |
Цикл, в котором переменная var меняется от значения a до b с шагом h. |
5 | while условие
операторы end |
Цикл с предусловием, повторяющийся до тех пор, пока истинно указанное условие. |
6 | try
операторы_1 catch операторы_2 end |
Попытка выполнить группу операторы_1. Если возникает ошибка, то управление передается группе операторы_2. Если ошибка не возникла, то группа операторы_2 не выполняется. |
7 | break | Досрочный выход из управляющих конструкций for, while, switch, try-catch. |
8 | function [y1, y2, …]=f(x1,x2,…) | Заголовок функции. |
9 | return | Досрочный выход из тела функции. |
Комментарии
Комментарии в m-файлах начинаются с символа %. Могут находиться сначала строки или правее любого оператора.
Первая группа строк с подряд идущими комментариями до пустой строки образует текст, выдаваемый в командном окне по команде help с именем m-файла.
Например, добавим комментарий к файлу fact5.m.
%Эта
программа находит 5!
a=1;
for i=1:1:5
a=a*i;
end
a
Тогда возможен следующий результат выполнении команды:
>> help fact5
Эта программ находит 5!
Параметры функций
В языке MATLAB входные и выходные аргументы функций четко разделены.
Все входные параметры используют позиционный принцип и задаются в круглых скобках после имени функции. Для переменного числа аргументов MATLAB упаковывает все входные параметры в массив ячеек с именем varargin, а количество передаваемых аргументов – в глобальной переменной nargin.
Все выходные параметры объявляются как массив результатов и в операторах присваивания обычно записываются в квадратных скобках. Для переменного числа аргументов используется запись заголовка
function
[varargout]=имя_функции(
то есть
результаты работы функции должны присваиваться
компонентам массива ячеек vara
[y1,y2,y3]=имя_функции(
w1=имя_функции(аргументы)
Через переменную nargout передают требуемое число результатов.
Например, функция polyline.m получает массив переменной длины с координатами точек (x,y1), (x2,y2),… и строит ломаную линию, соединяющую эти точки.
% Рисует полилинию
function polyline(varargin)
if nargin<1
warning('No arguments')
return
end
for k=1:length(varargin)
x(k)=varargin{k}(1);
y(k)=varargin{k}(2);
end
plot(x,y)
Вызов
>> polyline([2 3],[1 5],[4 8],[6 5]) построит
полигон, приведенный на рис.6. |
Рис. 6. График полигона |
Функция array2vec получает массив размерности nx2, первый столбец которого содержит координаты x1, x2, …, а второй – координаты y1, y2, …. Результатом работы функции являются выходные вектора, содержащие координаты точек (x1, y1), (x2, y2).
function [varargout]=array2vec(a)
for k=1:nargout
varargout{k}=a(k,:);
end
Пример работы с функцией приведен ниже:
>> a1=[1 2; 3 4; 5 6; 7 8; 9 10; 11 12];
>> [p1 p2]=array2vec(a1)
p1 =
1 2
p2 =
3 4
>> [q1 q2 q3]=array2vec(a1)
q1 =
1 2
q2 =
3 4
q3 =
5 6
Работа с файлами
Файлы – именованные области внешней памяти, с которыми программы могут обмениваться информацией.
Работа с файлами ограничивается следующими операциями:
MATLAB работает с файлами в двоичном и текстовом форматах.
Открытие файла осуществляется с помощью функции fopen, которая в случае удачного завершения возвращает целочисленный положительный идентификатор файла f_id (номер файла) и возможное сообщение об ошибке err-txt.
[f_id err_txt] = fopen('name_file');
В случае ошибки открытия f_id=-1. Сокращенный вызов:
f_id = fopen('name_file');
Второй необязательный аргумент функции fopen определяет режим доступа к открываемому файлу.
fopen('name_file','r') | открытие существующего двоичного файла для чтения |
fopen('name_file','rt') | открытие существующего текстового файла для чтения |
fopen('name_file','r+') | открытие существующего двоичного файла, который можно использовать как для чтения, так и для записи |
fopen('name_file','rt+') | открытие существующего текстового файла, который можно использовать как для чтения, так и для записи |
fopen('name_file','w') | открытие существующего или создание нового двоичного файла для записи, предыдущее содержимое стирается |
fopen('name_file','wt') | открытие существующего или создание нового текстового файла для записи, предыдущее содержимое стирается |
fopen('name_file','a') | открытие существующего двоичного файла для дозаписи или создание нового файла |
fopen('name_file','at') | открытие существующего текстового файла для дозаписи или создание нового файла |
fopen('name_file','a+') | открытие существующего двоичного файла для чтения и дозаписи. Если файла с указанным именем нет, то он создается. |
fopen('name_file','at+') | открытие существующего текстового файла для чтения и дозаписи. Если файла с указанным именем нет, то он создается. |
Закрытие файла выполняемое с помощью функции fclose выталкивает в файл вывода информацию, накопившуюся в буфере обмена (flash) и освобождает ресурсы, выделенные системой.