практика МathLab


Применение среды Matlabдля компьютерных вычислений
Лабораторная работа №1 Знакомство со средой MatlabКраткая теория
Интерфейс среды MatLabСреда MATLAB имеет интуитивно понятный и дружественный, стандартный для windows – приложений графический интерфейс. При запуске MATLAB на экране открывается рабочая среда, изображенная на рис.1.1.

Рис.1.1 Интерфейс среды MatlabОсновными элементами рабочей среды являются:
• меню, позволяющее выполнять стандартные операции, такие как создание, сохранение файла, управление внешним видом окна и т.д.(File) ;• панель инструментов с кнопками и раскрывающимся списком;
• окна с вкладками Workspace и CurrentDirectory для просмотра переменных и установки текущего каталога;
• окно CommandWindow, служащее для ввода команд и вывода результата;
• окно CommandHistory, предназначенное для просмотра и повторноговыполнения ранее введенных команд (окно CommandHistory может быть не пустым, если до этого пакет MATLAB использовался);
• строка состояния с кнопкой Start.
При нажатии на кнопку Start открывается меню, с помощью которого обеспечивается доступ ко всем основным средствам MATLAB.
Вычисление арифметических выражений
Арифметические выражения в MatLab состоят, как и в большинстве языков программирования, из чисел, знаков арифметических операций, знака ^ (возведение в степень), круглых скобок, переменных, и встроенных функций. Десятичная часть числа отделяется точкой. Для вычисления простейшего выражения следует набрать его в командной строке и нажать ‹Enter›. Ответ записывается в специальную переменную ans и результат выводится в командное окно:
>>1.5+2.9 ans= 4.4000
Вид результата зависит от установленного формата, подробнее о форматах вывода написано ниже. После вычисления следующего выражения значение ans изменится. Для сохранения результатов промежуточных вычислений их следует записывать в переменные. При использовании переменных необходимо придерживаться правил:
имя переменной может состоять из символов латинского алфавита, знака подчёркивания и цифр, но начинается обязательно с символа алфавита;
прописные и строчные буквы различаются;
пробел не входит в имя переменной.
В качестве знака присваивания используется =, например:
>>a=3.25*(0.7-3.3/5.1)+2.3^3 a=12.3391.
Обратите внимание, что результат сразу же выводится в командное окно. Для подавления вывода следует завершить строку с оператором присваивания точкой с запятой.
Пусть, например, требуется найти значение выражения при x = 0.2 и y = -3.9:
c=sin43πx+e0.1ycos43πx+e0.1y+3sin43πx+e0.1ycos43πx+e0.1y.
Если набирать сразу все выражение, то получается достаточно длинная строка. Для переноса на следующую строку любой команды MatLab можно использовать три идущие подряд точки, после нажатия на "Enter" среда MatLab ждет продолжения ввода:
>>x=0.2; >>y=-3.9; >>c=sqrt((sin(4/3*pi*x)+exp(0.1*y))/(cos(4/3*pi*x)+exp(0.1*y)))+... ((sin(4/3*pi*x)+exp(0.1*y))/(cos(4/3*pi*x)+exp(0.1*y)))^(1/3) .
Проще всего решить поставленную задачу, используя промежуточные переменные:
>>x=0.2; >>y=-3.9; >>a=sin(4/3*pi*x)+exp(0.1*y); >>b=cos(4/3*pi*x)+exp(0.1*y); >>c=sqrt(a/b)+(a/b)^(1/3) c= 2.0451 .
Все операторы присваивания, кроме последнего, завершены точкой с запятой для подавления вывода результата.
В любой момент можно вывести значение переменной в командное окно, для чего следует набрать имя переменной в командной строке и нажать "Enter", либо вызвать функцию disp:
>>disp(c) 2.0451 .
Просмотр текущих переменных рабочей среды производится при помощи команды whos. Предположим, что ранее переменным a и b были присвоены значения:
>>a=-1.34; >> b=2.98+3.86i;
вызовите команду whos, указав через пробелы имена переменных
>>whos a b
Числовые переменные в MatLab являются двумерными массивами размера один на один. Представление всех данных в MatLab в виде массивов оказывается очень полезным.
Векторы и матрицы
Массивы являются одним из самых распространенных способов хранения данных и используются во всех языках программирования и вычислительных пакетах. К особенностям работы с массивами в MatLab относится то, что одномерный массив может быть вектор-строкой или вектор-столбцом. Если способ представления массива важен, то мы будем подчеркивать, о строке или о столбце идет речь. Если же это несущественно, то будем говорить о вектор-строках и вектор-столбцах просто как о векторах или одномерных массивах (одномерный массив в MatLab есть двумерный, у которого один из размеров равен единице).
Для ввода вектора используются квадратные скобки, элементы вектора отделяются друг от друга:
точкой с запятой, если требуется получить вектор-столбец;
пробелом или запятой, если необходимо разместить элементы в вектор-строке.
Занесите вектор-столбцы и вектор-строки в соответствующие массивы, набрав в командной строке:
>> a=[0.2; -3.9; 4.6];
>> b=[7.6; 0.1; 2.5];
>> u=[0.1 0.5 -3.7 8.1];
>> v=[5.2 9.7 3.4 -0.2];
Точка с запятой в конце каждой строки поставлена для подавления вывода на экран, она никак не связана с точкой с запятой, которая является разделителем элементов в вектор-столбцах. Числа хранятся в двумерных массивах, каждый из размеров которых равен единице. Векторы также представляются двумерными массивами, один из размеров которых равен единице.
Для получения длины вектора предназначена функция length, вектор указывается в качестве ее входного аргумента:
>> L=length(a) L = 3
Вектор-столбцы с одинаковым числом элементов можно складывать и вычитать друг из друга при помощи знаков "+" и "-". Аналогичное верно и для вектор-строк:
>> с=a+b;
>> w=u-v;
Сложение и вычитание вектор-строки и вектор-столбца или векторов разных размеров приводит к ошибке. Операция * предназначена для умножения векторов по правилу матричного умножения. Поскольку MatLab различает вектор-строки и вектор столбцы, то допустимо либо умножение вектор-строки на такой же по длине вектор-столбец (скалярное произведение), либо умножение вектор-столбца на вектор-строку (внешнее произведение, в результате которого получается прямоугольная матрица). Скалярное произведение двух векторов возвращает функция dot, а векторное - cross:
>> s=dot(a,b)
>> c=cross(a,b)
Для операции транспонирования зарезервирован апостроф '. Если вектор содержит комплексные числа, то операция ' приводит к комплексно-сопряженному вектору. При вычислении скалярного и векторного произведений функциями cross и dot не обязательно следить за тем, чтобы оба вектора были либо столбцами, либо строками. Результат получается верный, например, при обращении c=cross(a,b'), только c становится вектор-строкой.
MatLab поддерживает поэлементные операции с векторами. Наряду с умножением по правилу матричного умножения, существует операция поэлементного умножения .* (точка со звездочкой). Данная операция применяется к векторам одинаковой длины и приводит к вектору той же длины, что исходные, элементы которого равны произведениям соответствующих элементов исходных векторов. Например, для векторов a и b, введенных выше, поэлементное умножение дает следующий результат:
>> c=a.*b
c =
1.5200
-0.3900
11.5000
Аналогичным образом работает поэлементное деление ./ (точка с косой чертой). Кроме того, операция .\ (точка с обратной косой чертой) осуществляет обратное поэлементное деление, то есть выражения a./b и b.\a эквивалентны. Возведение элементов вектора a в степени, равные соответствующим элементам b, производится с использованием .^. Для транспонирования вектор-строк или вектор-столбцов предназначено сочетание .' (точка с апострофом). Операции ' и .' для вещественных векторов приводят к одинаковым результатам. Не обязательно применять поэлементные операции при умножении вектора на число и числа на вектор, делении вектора на число, сложении и вычитании вектора и числа.
Векторы могут быть аргументами встроенных математических функций, таких, как sin, cos и т. д. В результате получается вектор с элементами, равными значению вызываемой функции от соответствующих элементов исходного вектора, например:
>> q = sin([0 pi/2 pi])
q = 0 1.0000 0.0000
Однако для вычисления более сложной функции от вектора значений, например, υsinυ+υ2υ+1выражение f=(v*sin(v)+v^2)/(v+1) вызовет ошибку уже при попытке умножения v на sin(v). Дело в том, что v является вектор-строкой длиной четыре, т. е. хранится в двумерном массиве размером один на четыре. Точно также представлен и sin(v), следовательно, умножение при помощи звездочки (по правилу матричного умножения) лишено смысла. Аналогичная ситуация возникает и при возведении вектора v в квадрат, т. е., фактически, при вычислении v*v. Правильная запись выражения в MatLab требует использования поэлементных операций:
>> f=(v.*sin(v)+v.^2)./(v+1)
Часто требуется вычислить функцию от вектора значений аргумента, отличающихся друг от друга на постоянный шаг. Для создания таких вектор-строк предусмотрено двоеточие. Последовательность команд
>> x=-1.2:0.5:1.8;
>> f=(x.*sin(x)+x.^2)./(x+1);
приводит к заполнению следующих векторов:
>> x
x = 0.3000 0.8000 1.3000 1.8000
>> f
f = -12.7922 3.1365 0.0997 0.1374 0.6744 1.2794 1.7832
Шаг может быть отрицательным, в этом случае начальное значение должно быть больше, либо равно конечному для получения непустого вектора. Если шаг равен единице, то его можно не указывать, например:
>> n=-3:4
n = -3 -2 -1 0 1 2 3 4
MatLab обладает большим набором встроенных функций для обработки векторных данных, часть из них приведена в табл. 3.1. Для получения подробной информацию о каждой функции требуется указать ее имя в качестве аргумента команды help.
Очень часто требуется обработать только часть вектора, или обратиться к некоторым его элементам. Разберем правила MatLab, по которым производится индексация векторных данных. Для доступа к элементу вектора необходимо указать его номер в круглых скобках сразу после имени переменной, в которой содержится вектор. Например, сумма первого и третьего элементов вектора v находится при помощи выражения
>> s=v(1)+v(3);
Обращение к последнему элементу вектора можно произвести с использованием end, т.е. v(end) и v(length(v)) приводят к одинаковым результатам.
Таблица. 3.1
Функции обработки данных
Функции Назначение
s=sum(a) Сумма всех элементов вектора a
p=prod(a) Произведение всех элементов вектора a
m=max(a) Нахождение максимального значения среди элементов вектора a
[m,k]=max(a) Второй выходной аргумент k содержит номер максимального элемента в векторе a
m=min(a) Нахождение минимального значения среди элементов вектора a
[m,k]=min(a) Второй выходной аргумент k содержит номер минимального элемента в векторе a
m=mean(a) Вычисление среднего арифметического элементов вектора a
a1=sort(a) Упорядочение элементов вектора по возрастанию
[a1,ind]=sort(a) Второй выходной аргумент ind является вектором из целых чисел от 1 до length(a), который соответствует проделанным перестановкам
Указание номеров элементов вектора можно использовать и при вводе векторов, последовательно добавляя новые элементы (не обязательно в порядке возрастания их номеров). Команды:
>> h=10;
>> h(2)=20;
>> h(4)=40;
приводят к образованию вектора:
>> h
h = 10 20 0 40
Индексация двоеточием позволяет выделить идущие подряд элементы в новый вектор. Начальный и конечный номера указываются в круглых скобках через двоеточие, например:
>> z=[0.2 -3.8 7.9 4.5 7.2 -8.1 3.4];
>>znew=z(3:6)
znew = 7.9000 4.5000 7.2000 -8.1000
Применение встроенных функций обработки данных к некоторым последовательно расположенным элементам вектора не представляет труда. Следующий вызов функции prod вычисляет произведение элементов вектора z со второго по шестой:
>> p=prod(z(2:6))
Индексация вектором служит для выделения элементов с заданными индексами в новый вектор. Индексный вектор должен содержать номера требуемых элементов, например:
>>ind=[3 5 7];
>>znew=z(ind)
znew =
7.9000 7.2000 3.4000
Конструирование новых векторов из элементов имеющихся векторов производится при помощи квадратных скобок. Следующий оператор приводит к образованию вектора, в котором пропущен пятый элемент вектора z
>>znew=[z(1:4) z(6:end)]
znew =
0.2000 -3.8000 7.9000 4.5000 -8.1000 3.4000
Матрицы небольших размеров удобно вводить из командной строки. Существует три способа ввода матриц. Например, матрицу
A=0.7-2.59.18.40.31.7-3.56.24.7можно ввести следующим образом: набрать в командной строке (разделяя элементы строки матрицы пробелами): A=[0.7 -2.5 9.1 и нажать ‹Enter›. Курсор перемещается в следующую строку (символ приглашения командной строки >> отсутствует). Элементы каждой следующей строки матрицы набираются через пробел, а ввод строки завершается нажатием на ‹Enter›. При вводе последней строки в конце ставится закрывающая квадратная скобка:
>> A=[0.7 -2.5 9.1 8.4 0.3 1.7
-3.5 6.2 4.7] Если после закрывающей квадратной скобки не ставить точку с запятой для подавления вывода в командное окно, то матрица выведется в виде таблицы.
Другой способ ввода матрицы основан на том, что матрицу можно рассматривать как вектор-столбец, каждый элемент которого является строкой матрицы. Поскольку точка с запятой используется для разделения элементов вектор-столбца, то ввод, к примеру, матрицы
B=6.10.3-7.94.42.5-8.1осуществляется оператором присваивания:
>> B=[6.1 0.3; -7.9 4.4; 2.5 -8.1];
Очевидно, что допустима такая трактовка матрицы, при которой она считается вектор-строкой, каждый элемент которой является столбцом матрицы. Следовательно, для ввода матрицы
C=0.4-7.25.30.1-2.1-9.5достаточно воспользоваться командой:
>> C=[[0.4; 0.1] [-7.2; -2.1] [5.3; -9.5]]
Функция size позволяет установить размеры массивов, она возвращает результат в виде вектора, первый элемент которого равен числу строк, а второй - столбцов:
>> s=size(B)
s =
3 2
Сложение и вычитание матриц одинаковых размеров производится с использованием знаков +, -. Звездочка * служит для вычисления матричного произведения, причем соответствующие размеры матриц должны совпадать, например:
>> P=A*B
P =
46.7700 -84.5000
53.1200 -9.9300
-58.5800 -11.8400
Допустимо умножение матрицы на число и числа на матрицу, при этом происходит умножение каждого элемента матрицы на число и результатом является матрица тех же размеров, что и исходная. Апостроф ' предназначен для транспонирования вещественной матрицы или нахождения сопряженной к комплексной матрице. Для возведения квадратной матрицы в степень применяется знак ^.
Ниже приведена запись в MatLab выражения R=(A – BC)3+ABC :>> R=(A-B*C)^3+A*B*C
R =
1.0e+006 *
-0.0454 0.1661 -0.6579
0.0812 -0.2770 1.2906
-0.0426 0.1274 -0.7871
MatLab обладает многообразием различных функций и способов для работы с матричными данными. Для обращения к элементу двумерного массива следует указать его строчный и столбцевой индексы в круглых скобках после имени массива, например:
>> C(1,2)
ans =
-7.2000
Индексация двоеточием позволяет получить часть матрицы - строку, столбец или блок, например:
>> c1=A(2:3,2)
c1 =
0.3000
6.2000
>> r1=A(1,1:3)
r1=
0.7000 -2.5000 9.1000
Для обращения ко всей строке или всему столбцу не обязательно указывать через двоеточие начальный (первый) и конечный индексы, то есть операторы r1=A(1,1:3) и r1=A(1,:) эквивалентны. Для доступа к элементам строки или столбца от заданного до последнего можно использовать end, так же как и для векторов: A(1,2:end). Выделение блока, состоящего из нескольких строк и столбцов, требует индексации двоеточием как по первому измерению, так и по второму.
Пусть в массиве T хранится матрица:
T=1 0 2-67 -5 4-4 -3 -6572 3-1 24-8 069731.
Для выделения ее элементов (обозначенных курсивом) со второй строки по третью и со второго столбца по четвертый, достаточно использовать оператор:
>> T1=T(2:3,2:4)
T1 =
-5 -6 3
4 5 -1
Индексация двоеточием так же очень полезна при различных перестановках в массивах. В частности, для перестановки первой и последней строк в произвольной матрице, хранящейся в массиве A, подойдет последовательность команд:
>> s=A(1,:);
>>A(1,:)=A(end,:);
>>A(end,:)=s;
MatLab поддерживает такую операцию, как вычеркивание строк или столбцов из матрицы. Достаточно удаляемому блоку присвоить пустой массив, задаваемый квадратными скобками. Например, вычеркивание второй и третьей строки из массива T, введенного выше, производится следующей командой:
>> T(2:3,:)=[ ]T =
1 7 -3 2 4 9
-6 -4 7 2 6 1
Индексация двоеточием упрощает заполнение матриц, имеющих определенную структуру. Предположим, что требуется создать матрицу
W=1 1 111 1 0 00 1 1 0 00 1 1 0 00 11 1 111.
Первый шаг состоит в определении нулевой матрицы размера пять на пять, затем заполняются первая и последняя строки и первый и последний столбцы:
>>W(1:5,1:5)=0;
>>W(1,:)=1;
>>W(end,:)=1;
>>W(:,1)=1;
>>W(:,end)=1;
Ряд встроенных функций, приведенных в табл. 3.1, позволяет ввести стандартные матрицы заданных размеров. Обратите внимание, что во всех функциях, кроме diag, допустимо указывать размеры матрицы следующими способами:
o числами через запятую (в двух входных аргументах);
o одним числом, результат - квадратная матрица;
o вектором из двух элементов, равных числу строк и столбцов.
Таблица. 3.2
Функции для создания стандартных матриц
Функция Результат и примеры вызовов
zerosНулевая матрицаF=zeros(4,5) F=zeros(3) F=zeros([3 4])
eyeЕдиничная прямоугольная матрица (единицы расположены на главной диагонали)I=eye(5,8) I=eye(5) I=eye([5 8])
onesМатрица, целиком состоящая из единицE=ones(3,5) E=ones(6) E=ones([2 5])
randМатрица, элементы которой - случайные числа, равномерно распределенные на интервале (0,1)R=rand(5,7) R=rand(6) R=rand([3 5])
randnМатрица, элементы которой - случайные числа, распределенные по нормальному закону с нулевым средним и дисперсией равной единицеN=randn(5,3) N=randn(9) N=randn([2 4])
diag1) диагональная матрица, элементы которой задаются во входном аргументе - вектореD=diag(v)
2) диагональная матрица со смещенной на k позиций диагональю (положительные k - смещение вверх, отрицательные - вниз), результатом является квадратная матрица размера length(v)+abs(k)D=diag(v,k)
3) выделение главной диагонали из матрицы в вектор
d=diag(A)
4) выделение k-ой диагонали из матрицы в вектор
d=diag(A,k)
Поэлементные вычисления с матрицами производятся практически аналогично, разумеется, необходимо следить за совпадением размеров матриц:
A.*B, A./B- поэлементные умножение и деление;
A.^p - поэлементное возведение в степень, p - число;
A.^B - возведение элементов матрицы A в степени, равные соответствующим элементам матрицы B;
A.' - транспонирование матрицы (для вещественных матриц A' и A.' приводят к одинаковым результатам).
Допустимо записывать сумму и разность матрицы и числа, при этом сложение или вычитание применяется, соответственно, ко всем элементам матрицы. Вызов математической функции от матрицы приводит кматрице того жеразмера, на соответствующих позициях которой стоят значения функции от элементов исходной матрицы.
Все функции обработки данных, приведенные в табл. 3.1, могут быть применены и к двумерным массивам. Основное отличие от обработки векторных данных состоит в том, что эти функции работают с двумерными массивами по столбцам, например, функция sum суммирует элементы каждого из столбцов и возвращает вектор-строку, длина которой равна числу столбцов исходной матрицы:
>> M=[1 2 3; 4 5 6; 7 8 9]
M =
1 2 3
4 5 6
7 8 9
>> s=sum(M)
s = 12 15 18
Если в качестве второго входного аргумента sum указать 2, то суммирование произойдет по строкам. Для вычисления суммы всех элементов матрицы требуется дважды применить sum:
>> s=sum(sum(M))
s = 45
Очень удобной возможностью MatLab является конструирование матрицы из матриц меньших размеров. Пусть заданы матрицы:
M1=1234M2=-2-3-5-1-5-6M3=98-71-52M4=010100001 .
Требуется составить из M1, M2, M3 и M4 блочную матрицу M
M=M1M2M3M4Можно считать, что Mимеет размеры два на два, а каждый элемент является, соответственно, матрицейM1, M2, M3 илиM4. Следовательно, для получения в рабочей среде MatLab массива M с матрицей
Часть 2 Графика и визуализация данных в MatlabMatLab обладает широким набором средств для построения графиков функций одной и двух переменных и отображения различных типов данных. Все графики выводятся в графические окна со своими меню и панелями инструментов. Вид графиков определяется аргументами графических команд и затем может быть изменен при помощи инструментов графического окна. Важно понимать, что для построения графиков функций на некоторой области изменения аргументов следует вычислить значения функции в точках области, часто для получения хороших графиков следует использовать достаточно много точек.
Разберем сначала, как получить график функции одной переменной, к примеру: f(x)=exsin(πx)+x2 на отрезке [-2, 2].
Первый шаг состоит в задании координат точек по оси абсцсс. Заполнение вектора x элементами с постоянным шагом при помощи двоеточия позволяет просто решить эту задачу. Далее необходимо поэлементно вычислить значения f(x) для каждого элемента вектора x и записать результат в вектор f. Для построения графика функции осталось использовать какую-либо из графических функций MatLab. Достаточно универсальной графической функцией является plot. В самом простом случае она вызывается с двумя входными аргументами - парой x и f (т. е. plot выводит зависимость элементов одного вектора от элементов другого). Последовательность команд, записанная ниже, приводит к появлению графического окна Figure No.1 с графиком функции (рис. ).
>> x=[-2:0.05:2];
>> f=exp(x).*sin(pi*x)+x.^2;
>>plot(x,f)

Рис. 2.1 График функции f(x)=exsin(πx)+x2
Тип линии, цвет и маркеры определяются значением третьего дополнительного аргумента функции plot. Этот аргумент указывается в апострофах, например, вызов plot(x,f,'ro:') приводит к построению графика красной пунктирной линией, размеченной круглыми маркерами. Обратите внимание, что абсциссы маркеров определяются значениями элементов вектора x. Всего в дополнительном аргументе может быть заполнено три позиции, соответствующие цвету, типу маркеров и стилю линии. Обозначения для них приведены в табл.. Порядок позиций может быть произвольный, допустимо указывать только один или два параметра, например, цвет и тип маркеров. Посмотрите на результат выполнения следующих команд: plot(x,f,'g'), plot(x,f,'ko'), plot(x,f,':').
Функция plot имеет достаточно универсальный интерфейс, она, в частности, позволяет отображать графики нескольких функций на одних осях.
Пусть требуется вывести график не только f (x), но и gx=e-x2sin⁡(5πx) на отрезке [-2, 2]. Сначала необходимо вычислить значения g(x):
>> g=exp(-x.^2).*sin(5*pi*x);
а затем вызвать plot, указав через запятую пары x, f и x, g и, при желании, свойства каждой из линий:
>>plot(x,f,'ko-', x,g,'k:')
Таблица 4.1 Сокращения для цвета, типа маркеров и стиля линий
Цвет Тип маркера
Y Желтый • Точка
m Розовый ° Кружок
c Голубой x Крестик
r Красный + Знак плюс
g Зеленый * Звездочка
b Синий s Квадрат
w Белый d Ромб
k Черный v Треугольник вершиной вниз
Тип линии ^ Треугольник вершиной вверх
— Сплошная < Треугольник вершиной влево
: Пунктирная > Треугольник вершиной вправо
—. Штрих-пунктирнаяp Пятиконечная звезда
-- Штриховая h Шестиконечная звезда
 
Допускается построение произвольного числа графиков функций, свойства всех линий могут быть различными. Кроме того, области построения каждой из функций не обязательно должны совпадать, но тогда следует использовать разные вектора для значений аргументов и вычислять значения функций от соответствующих векторов. Для получения графика кусочно-заданной функции:
yx=sinx-4π≤x<-π3xπ+12 -π≤x≤03e-x 0≤x≤5достаточно выполнить последовательность команд:
>> x1=[-4*pi:pi/10:-pi];
>> y1=sin(x1);
>>x2=[-pi:pi/30:0];
>> y2=3*(x2/pi+1).^2;
>>x3=[0:0.02:5];
>> y3=3*exp(-x3)
>>plot(x1,y1,x2,y2,x3,y3)
Графики ветвей функции отображаются различными цветами. Можно было поступить и по-другому, а именно: после заполнения x1, y1, x2, y2, x3 и y3 собрать вектор x для значений аргумента и вектор y для значений y(x) и построить зависимость y от x:
>> x=[x1 x2 x3];
>> y=[y1 y2 y3];
>>plot(x,y)
Для сравнения поведения двух функций со значениями разных порядков удобно применять plotyy. Функция plotyy вызывается от двух пар входных аргументов (векторов) и приводит к появлению двух линий графиков, каждой из которых отвечает своя ось ординат.
Графики оформляются в MatLab специальными командами и функциями. Сетка наносится на оси командой gridon, а убирается при помощи gridoff.
Заголовок размещается в графическом окне посредством функции title, входным аргументом которой является строка, заключенная в апострофы:
>>title('Результаты эксперимента')
При наличии нескольких графиков требуется расположить легенду обратившись к legend. Надписи легенды, заключенные в апострофы, указываются во входных аргументах функции legend, их число должно совпадать с числом линий графиков. Кроме того, последний дополнительный входной аргумент определяет положение легенды:
-1 - вне графика в правом верхнем углу графического окна;
0 - выбирается лучшее положение в пределах графика так, чтобы как можно меньше перекрывать сами графики;
1 - в верхнем правом углу графика (это положение используется по умолчанию);
2 - в верхнем левом углу графика;
3 - в нижнем левом углу графика;
4 - в нижнем правом углу графика.
Функции xlabel и ylabel предназначены для подписей к осям, их входные аргументы так же заключаются в апострофы.
Обратимся теперь к визуализации векторных и матричных данных. Самый простой способ отображения векторных данных состоит в использовании функции plot с вектором в качестве входного аргумента. При этом получающийся в виде ломаной линии график символизирует зависимость значений элементов вектора от их индексов. Второй дополнительный аргумент может определять цвет, стиль линии и тип маркеров, например: plot(x,'ko'). Вызов функции plot от матрицы приводит к нескольким графикам, их число совпадает с числом столбцов матрицы, а каждый из них является зависимостью элементов столбца от их строчных индексов. Цвет и стиль линий и тип маркеров сразу для всех линий так же определяется вторым дополнительным аргументом.
Наглядным способом представления матричных и векторных данных являются разнообразные диаграммы. Простейшая столбцевая диаграмма строится при помощи функции bar:
>> x=[0.7 2.1 2.5 1.9 0.8 1.3];
>>bar(x)
Дополнительный числовой аргумент bar указывает на ширину столбцов (по умолчанию он равен 0.8), а значения большие единицы, например bar(x,1.2), приводят к частичному перекрытию столбцов. Указание матрицы во входном аргументе bar приводит к построению групповой диаграммы, число групп совпадает с числом строк матрицы, а внутри каждой группы столбиками отображаются значения элементов строк.
При обработке больших массивов векторных данных часто требуется получить информацию о том, какая часть данных находится в том или ином интервале. Функция hist предназначена для отображания гистограммы данных и нахождения числа данных в интервалах. Входным аргументом hist является вектор с данными, а выходным - вектор, содержащий количество элементов, попавших в каждый из интервалов. По умолчанию берется десять равных интервалов. Например, вызов hist(randn(1,5000)) приводит к появлению на экране гистограммы данных, распределенных по нормальному закону, а n=hist(randn(1,5000)) к заполнению вектора n длины десять (при этом гистограмма не строится). Число интервалов указывается во втором дополнительном аргументе hist. Можно задать интервалы, использовав в качестве второго аргумента не число, а вектор, содержащий центры интервалов. Более удобно задавать интервалы не центрами, а границами. В этом случае требуется сначала определить количество элементов в интервалах при помощи функции histc, а затем применить bar со специальным аргументом 'histc', например:
>> x=randn(1,10000);
>>int=[-2:0.5:2];
>> n=histc(x,int);
>>bar(int,n,'histc')
Каждое окно имеет свои оси, при наличии нескольких пар осей (в одном окне или в разных) вывод графиков производится в текущие оси. Последняя созданная пара осей является текущей. Для того, чтобы выбрать текущие оси из нескольких имеющихся, достаточно щелкнуть по ним левой кнопкой мыши перед вызовом графической функции. Возможна и обратная ситуация, когда в процессе работы требуется добавлять графики к уже имеющимся на некоторых осях. В этой ситуации перед добавлением графика следует выполнить команду holdon. Для завершения такого режима достаточно воспользоваться holdoff.
В одном графическом окне можно расположить несколько осей со своими графиками. Функция subplot предназначена для разбиения окна на части и определения текущей из них. Предположим, что требуется вывести графики на шесть пар осей в одно графическое окно (две по вертикали и три по горизонтали). Создайте графическое окно при помощи figure и выполните команду:
>>subplot(2,3,1)
В левом верхнем углу окна появились оси. Первые два аргумента в subplot указывают на общее число пар осей по вертикали и горизонтали, а последний аргумент означает номер данной пары осей. Нумерация идет слева направо, сверху вниз. Используйте subplot(2,3,2), : , subplot(2,3,6) для создания остальных пар осей. Вывод любой из графических функций можно направить в нужные оси, указав их при помощи subplot(2,3,k), например:
>>subplot(2,3,3)
>>bar([1.2 0.3 2.8 0.9])
>>subplot(2,3,6)
>>surf(X,Y,Z)

Рис. 2.6. Расположение нескольких графиков в одном окне

Приложенные файлы

  • docx 494614
    Размер файла: 174 kB Загрузок: 0

Добавить комментарий