Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаба 1 по ММ. Основы работы с пакетом Matlab

.pdf
Скачиваний:
101
Добавлен:
01.06.2015
Размер:
1.79 Mб
Скачать

31

end

При отладке выражений и программ в окне Редактора-отладчика сообщения об ошибках выдаются в командное окно MATLAB.

М-файлы бывают двух типов: сценарии (скрипты) и функции. Для их создания необходимо вызвать редактор m-файлов командой edit в командном окне либо последовательностью File→New→M-file из меню командного окна

M-файл-сценарий, называемый также Script-файлом, является простой записью серии команд без входных и выходных параметров. Он имеет следующую структуру:

%Основной комментарий %Дополнительный комментарий Тело файла с любыми выражениями

Особенности файлов-сценариев состоят в следующем:

они не имеют входных и выходных аргументов;

работают с данными из рабочей области;

в процессе выполнения не компилируются;

представляют собой зафиксированную в виде файла последовательность операций, полностью аналогичную той, что используется в сессии при работе в командном окне.

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

Создание m-файла сценария производится путем копирования заданной последовательности команд из Command Window, размещением ее в окне редактора, вызываемом последовательностью File New Blank M-File и сохранением ее под некоторым именем.

Использование m-файла-сценария состоит в вызове его в заданное место Command Window для выполнения определяемых им действий.

32

М-файл-функция является типичным объектом языка программирования системы Matlab. Одновременно он является полноценным модулем с точки зрения структурного программирования, поскольку содержит входные и выходные параметры и использует аппарат локальных переменных. Структура такого модуля с одним выходным параметром выглядит следующим образом:

function vаг = f_name(Список_параметров) %Основной комментарий %Дополнительный комментарий Тело файла с любыми выражениями vаг=выражение

М-файл-функция имеет следующие свойства:

он начинается с объявления function, после которого указывается имя переменной var – выходного параметра, имя самой функции и список ее входных параметров;

функция выдает значение и может использоваться в виде

name(список_параметров)

в математических выражениях;

все переменные, имеющиеся в теле файла-функции, являются локальными, то есть действуют только в пределах тела функции;

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

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

файл-функция служит средством расширения системы Matlab;

при обнаружении файла-функции он компилируется и затем исполняется, а созданные машинные коды хранятся в рабочей области системы Matlab.

Последняя конструкция vаг = выражение вводится, если требуется, чтобы функция выдавала результат вычислений.

Пример 5. Файл-функция

function r =randint(m,n)

33

%RANDINT случайная матрица с целыми элементами. %randint(m,n) возвращает матрицу mxn с целыми %элементами между 0 и 9.

r =floor(10*rand(m,n));

Пример 6. Более общий вид файл-функции function r =rand(m,n,a,b)

%RANDINT случайная матрица с целыми элементами. %randint(m,n) возвращает матрицу mxn с целыми %элементами между 0 и 9.

%rand(m,n,a,b) возвращает матрицу с целыми %элементами в диапазоне между целыми a и b.

if randint <3,a =0;b =9;end

r =floor((b-a+1)*randin(m,n))+a;

Этот текст должен быть записан на диск в виде файла с именем rand .m (в соответствии с именем функции – это обязательное условие для функции).

Первая строка функции – объявление имени функции, входные аргументы, выходные аргументы. Без такой строки весь следующий файл является программой, или сценарием, а не функцией. Так, например, оператор

z = randint(4,5)

приведет к передаче чисел 4 и 5 переменным m и n, а выходной результат будет передан переменной z. Поскольку переменные в файле-функции локальные, их имена никак не влияют на имена и значения переменных в текущей рабочей области Matlab .

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

function [vаг1,vаг2,...] = f_namе (список_параметров) %Основной комментарий %Дополнительный комментарий Тело файла с любыми выражениями

34

var1-выражение

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

[varl,var2, …] = namе (Список_параметров).

После такого вызова выходные переменные varl, var2, … становятся определенными и их можно использовать в последующих математических выражениях и иных сегментах программы. Если функция используется в виде

f_namе (список_параметров),

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

Пример 7. Файл-функция с двумя параметрами function a=gcd(a,b)

%GCD Наибольший общий делитель.

%gcd(a,b) является наибольшим общим делителем %целых чисел a и b, оба не равны нулю.

a =round(abs(a)); b =round(abs(b)); if a ==0 &b ==0

error(’gcd не определена, если оба числа равны нулю ’) else

while b ~=0 r =rem(a,b); a=b; b=r;

35

end end

Создание m-файла функции производится в окне редактора, вызываемом последовательностью File New Function M-File и сохранением ее под некоторым именем.

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

4.4.4 Рабочая область

Рабочая область системы Matlab Workspace – это область памяти, в которой размещены переменные системы. Содержимое этой области можно просмотреть из командной строки с помощью команд who и whos. Различие между этими командами состоит в следующем:

who – выводит только имена переменных;

whos – выводит дополнительно информацию о размерах массивов и типе переменной.

Сохранение переменных рабочей области. Команда Save Workspace As… меню File либо команда save fname, набранная в командном окне позволяет сохранить содержимое рабочей области в двоичном m-файле, который можно в дальнейшем вызвать командой Open из меню главного окна, либо командой load из командного окна.

Загрузка рабочей области. Команда Open меню File или команда load, набранная в командном окне позволяет загрузить m- файл, который был ранее сохранен с помощью команды save. При загрузке m-файла новые значения одноименных переменных будут записаны взамен старых. Если m-файл имеет расширение, отличающееся от .mat, то необходимо использовать флаг –mat; в противном случае Matlab будет считать форматом файла ASCII- формат.

Загрузка файлов данных в ASCII-формате. Команда load

позволяет выполнять импорт файлов данных в ASCII-формате; она

36

преобразует содержимое файла в переменную с именем файла только без расширения. Например, применение команды load tides.dat создает в рабочей области системы Matlab переменную с именем tides. Если исходный файл в ASCII-формате имеет m строк с n значениями в каждой строке, то результатом будет массив чисел размера m×n.

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

Например, следующая конструкция позволяет сохранить квадраты чисел от 1 до 10 в файлах с именами data1, …, data10:

file = 'data'; for i = 1:10 j = i.^2;

save([file int2(i)],'j'); end

Использование группового символа. Команды load и save

допускают использование группового символа (*) в качестве замены ряда символов в шаблоне имени переменной.

Например, команда save rundate x* сохраняет все переменные, имена которых начинаются с символа x в файле с именем rundata.mat.

Точно также команда load testdata ex1*95 загружает все переменные, имена которых начинаются с символов 'ex1' и заканчиваются символами '95', независимо от того, какие символы размещены между ними.

4.4.5 Визуализация вычислений

Система Matlab имеет большие возможности графического представления информации. Она позволяет строить двумерные и трехмерные графики функций, заданных в аналитическом виде, в виде векторов и матриц, позволяет строить множество функций на одном графике, позволяет строить графики разного цвета, разными типами точек, в различных системах координат.

Основными функциями двумерной графики являются:

37

plot(x, y) plot(x, y, s)

plot(x1, y1, s1, x2, y2, s2,…, xn, yn, sn)

где: х – аргумент функции, задаваемый в виде вектора;

y – функция, представленная в аналитическом виде или в виде вектора или матрицы;

s – вектор стилей графиков: параметр, определяющий цвет линий графика, тип точек, тип линий;

x1, x2,…, xn – аргументы n функций, изображенных на одном графике;

y1, y1,…, yn – функции, изображенные на одном графике; s1, s1,…, sn – векторы стилей изображений n функций.

Стили графиков системы Matlab приведены в таблице 2. Таблица 2

 

Тип точки

 

Цвет линий

 

Тип линий

 

 

 

 

 

 

.

Точка

Y

Желтый

-

Сплошная

 

 

 

 

 

 

Окружность

M

Фиолетовый

:

Двойной пунктир

 

 

 

 

 

 

×

Крест

C

Голубой

-.

Штрих-пунктир

 

 

 

 

 

 

+

Плюс

R

Красный

--

Штриховая

 

 

 

 

 

 

*

Восьмиконечная снежинка

G

Зеленый

 

 

 

 

 

 

 

 

S

Квадрат

B

Синий

 

 

 

 

 

 

 

 

D

Ромб

W

Белый

 

 

 

 

 

 

 

 

˄ ˅

Треугольник вверх, вниз,

K

черный

 

 

˂ ˃

влево, вправо

 

 

 

 

 

 

 

 

 

 

P

Пятиконечная звезда

 

 

 

 

 

 

 

 

 

 

H

Шестиконечная звезда

 

 

 

 

 

 

 

 

 

 

Пример. Построим график функции y=sin(x)*e-x.

Вокне Command Window (Окно команд) зададим программу:

>>x=-5:0.5:5; % задается отрезок [-5;5] с шагом 0,5

>>y=sin(x)*exp(-x); % задается функция y

>>plot(x, y, [‘R’, ‘*’, ‘-.’]) % строится график красного цвета (R), точки графика – снежинки (*), линии графика штрих-пунктир (-.).

>>grid on % задается сетка

График функции приведен на рис.7

38

Рис. 7. График функции y=sin(x)*e-x

Изобразить нескольких кривых на одном рисунке можно различными способами:

x=0:.01:2*pi;

или x=0:.01:2*pi;

y1=sin(x);

Y=[sin(x)’, sin(2*x)’, sin(4*x)’];

y2=sin(2*x);

plot(x,Y)

y3=sin(4*x);

 

plot(x,y1,x,y2,x,y3)

 

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

По умолчанию каждая следующая команда plot затирает вывод предыдущей команды. При помощи команды hold on затирание отключается, т.е. команда hold on позволяет добавлять кривые на существующий график, команда hold off вновь включает режим затирания.

Функция subplot позволяет выводить множество графиков в одном окне:

>>t=0:pi/10:2^pi;

>>[X,Y,Z]=cylinder(4*cos(t));

>>subplot(2,2,1);

>>mesh(X); >>subplot(2,2,2); mesh(Y); >>subplot(2,2,3); mesh(Z);

>>subplot(2,2,4); mesh(X,Y,Z);

Пример вывода приведен на рис.8.

39

 

Рис. 8. Несколько графиков в одном окне

 

Пункт Print в меню File и команда print печатают

графику

MatLab. Меню Print вызывает диалоговое

окно, которое

позволяет

выбирать

общие

стандартные

варианты

печати.

Команда print обеспечивает большую гибкость при выводе выходных данных и позволяет контролировать печать из М-файлов. Результат может быть послан прямо на принтер, выбранный по умолчанию, или сохранен в заданном файле.

Часто при анализе требуется преобразовать исходные данные. Наиболее используемыми методами преобразования данных выступают центрирование и шкалирование каждой переменной на стандартное отклонение.

Команда grid поместит сетку на график. График может быть снабжен заголовком, именами осей и на сам график может быть помещен дополнительный текст с помощью команд вывода текста. Аргументами всех этих команд является текстовая строка. Например,

40

команда title(’График наилучшего приближения’) добавит к вашему графику заголовок. Команда gtext(’Пятно’) позволяет с помощью мыши или клавишного курсора разместить на рисунке индикаторный крест, в месте размещения которого и будет помещен текст после нажатия произвольной клавиши. При необходимости сделать подписи осей используются команды Xlabel(’ПодписьX’),

Ylabel(’ПодписьY’).

Если необходимо построить столбиковую диаграмму, показывающую зависимость какой-либо величины, хранящейся в векторе bar_h, от номера каждого элемента, то это выполняется командой bar(bar_h). Если необходимо построить эту же зависимость, но от другой величины, то используется функция bar(bar_h,x). Если вам необходимо рисовать столбики определенного цвета или с помощью определенной линии, то можно использовать еще один аргумент у функции bar(x, y, line_style_string), который полностью эквивалентен такому же аргументу у команды plot.

При построении гистограммы (т.е. графического изображения распределения некоторой величины) необходимо задавать определенное число бинов (иногда говорят: каналов гистограммы, т.е. число разбиений переменной на интервалы, относительно которых и будет вычисляться и строиться распределение), определяя тем самым, сколько данных попадет в каждый бин, и графически изображать это в виде столбиковой или ступенчатой диаграммы. В Matlab существует функция hist, которая при обращении к ней в виде hist(y) вычисляет и рисует гистограмму с 10 бинами, равномерно распределенными между ymax и ymin. Кроме того, функция hist(y) может иметь второй аргумент. Если этот аргумент - целое число, то это число определяет число бинов. Если второй аргумент - вектор, то этот вектор определяет центры используемых бинов. В этом случае центры бинов должны быть равноотстоящими, а координаты этих центров должны быть расположены в возрастающем порядке. При нарушении любого из этих условий результат становится непредсказуемым.