Matlab несколько графиков в одном окне

1. Построение двумерных графиков функций

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

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

Например, нет ничего проще, чем построить график функции одной вещественной переменной. Следующие команды

x = 0 : 0.01 : 2;

y = sin( x );

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

После этого одной единственной командой

plot( x , y )

удаётся построить вполне качественно выглядящий график функции:

MATLAB показывает графические объекты в специальных графических окнах, имеющих в заголовке слово Figure (изображение, внешний вид, фигура).

При построении графиков функций сразу проявляется тот факт, что очень большую часть работы MATLAB берёт на себя. Мы в командной строке ввели лишь одну команду, а система сама создала графическое окно, построила оси координат, вычислила диапазоны изменения переменных x и y; проставила на осях метки и соответствующие им числовые значения, провела через опорные точки график функции некоторым, выбранным по умолчанию, цветом; в заголовке графического окна надписала номер графика в текущем сеансе работы.

Если мы, не убирая с экрана дисплея первое графическое окно, вводим и исполняем ещё один набор команд

x = 0 : 0.01 : 2;

z = cos( x );

plot( x , z )

то получаем новый график функции в том же самом графическом окне (при этом старые оси координат и график в нём пропадают — этого можно также добиться командой clf, а командой cla удаляют только график с приведением осей координат к их стандартным диапазонам от 0 до 1):

Если нужно второй график провести "поверх первого графика", то перед исполнением второй графической команды plot, нужно выполнить команду

hold on

которая предназначена для удержания текущего графического окна. В результате будет получено следующее изображение:

Читайте также:  Долби диджитал для виндовс 10

Того же самого можно добиться, потребовав от функции plot построить сразу несколько графиков в рамках одних и тех же осей координат:

x = 0 : 0.01 : 2;

y = sin( x ); z = cos( x );

plot( x , y , x , z )

У такого способа есть ещё одно (кроме экономии на команде hold on) преимущество, так как разные графики автоматически строятся разным цветом.

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

Если всё же нужно одновременно визуализировать несколько графиков так, чтобы они не мешали друг другу, то это можно сделать двумя способами. Во-первых, можно построить их в разных графических окнах. Например, построив графики функций sin и cos в пределах одного графического окна (показано выше), вычисляем значения для функции exp:

w = exp( x );

После этого выполняем команды

figure; plot( x , w )

которые построят график функции exp в новом графическом окне, так как команда figure создаёт новое (добавочное) графическое окно, и все последующие за ней команды построения графиков выводят их в новое окно:

В результате в первом графическом окне (Figure No. 1) по вертикальной оси переменные изменяются в диапазоне от -0.5 до 1, а во втором графическом окне (Figure No. 2) — от 1 до 8.

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

Например, для ранее выполненных вычислений с функциями sin, cos и exp, строим графики первых двух функций в первой подобласти, а график третьей функции — во второй подобласти одного и того же графического окна:

subplot(1,2,1); plot(x,y,x,z)

subplot(1,2,2); plot(x,w)

в результате чего получаем графическое окно следующего вида:

Диапазоны изменения переменных на осях координат этих подобластей независимы друг от друга.

Функция subplot принимает три числовых аргумента, первый из которых равен числу рядов подобластей, второе число равно числу колонок подобластей, а третье число — номеру подобласти (номер отсчитывается вдоль рядов с переходом на новый ряд по исчерпанию).

Читайте также:  Как поменять номер в вк через телефон

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

help имя_функции

набираемой с клавиатуры и выполняемой в командном окне системы MATLAB.

Итак, уже рассмотренные примеры показывают, как подсистема высокоуровневой графики MATLABа легко справляется с различными случаями построения графиков, не требуя слишком большой работы от пользователя. Ещё одним таким примером является построение графиков в полярных координатах. Например, если нужно построить график функции r = sin( 3 f ) в полярных координатах, то следующие несколько команд

phi = 0 : 0.01 : 2*pi; r = sin( 3* phi );

Каждый раз, когда вы выполняете команду построения (черчения), программа
MATLAB стирает старый чертеж и рисует новый. Если вы хотите произвести
наложение двух или более чертежей, используйте команду hold on.

Эта команда дает программе MATLAB инструкцию — сохранять старые изображения и рисовать любые новые изображения поверх старых. Эта инструкция будет выполняться до тех пор, пока вы не введете команду hold off. С помощью этих операторов вы с легкостью сможете построить несколько графиков matlab. Ниже приведен пример с использованием команды ezplot:

ezplot(‘exp(-x)’, [0 10])
hold on
ezplot(‘sin(x)’, [0 10])
hold off
title ‘exp(-x) and sin(x)’

Результат показан на Рис. 2.3 ранее в этой категории. Команды hold on и hold off
работают со всеми графическими командами.
С помощью команды plot вы можете сразу чертить несколько кривых. Например:

X = 0:0.01:10; plot (X, exp(-X), X, sin(X))

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

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

Рис.1.14. Вывод графиков функции f(x) и g(x) на одни оси с помощью команды hold

Вывод нескольких графиков в одном графическом окне

Функция subplot(i,j,n) позволяет разбить графическое окно на несколько подграфиков со своими осями. Здесьiиj– число подграфиков по вертикали и горизонтали, аn– номер подграфика, который надо сделать текущим.

[X, Y] = meshgrid(-1:0.05:1, 0:0.05:1);

Читайте также:  Программа для разгона оперативки

Рис.1.15. Вывод нескольких графиков в одном окне с помощью команды subplot

Работа со звуковыми файлами в системе MatLab

Считывание данных из wav-файлов

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

% «;» — подавляет вывод отсчетов на экран !

% filename – имя файла

% расширение wav указывать не обязательно

Размерность массива y зависит от количества записанных каналов в wav-файле (в простейшем случае, если wav-файл содержит монозапись, то переменная y будет вектором).

В системе MatLab при считывании данных из wav-файла значения отсчетов не зависимо от количества бит на отсчет представляются в диапазоне от -1 до 1 (рис.1.16).

Рис.1.16. Диапазон представлений отсчетов в системе MatLab при считывании из wav-файла

Функция wavread позволяет также считать из wav-файла дополнительную служебную информацию:

[y, Fs] =wavread(‘filename’); % получение значения частоты дискретизации Fs

[y, Fs, bits] =wavread(‘filename’); % получение значения бит на отсчет

[y, Fs, bits] =wavread(‘filename’, 1); % считывание частоты дискретизации, без считывания звуковых данных из файла

wavesize =wavread(‘filename’, ‘size’); % получение размера файла и числа каналов

В случае необходимости считать частично (фрагментарно) данные из wav-файле можно воспользоваться следующими возможностями функции wav-read:

y =wavread(‘filename’, N); % частичное считывание данных из файла, начиная с первого отсчета

y =wavread(‘filename’, [n1 n2]); % считывание фрагмента из файла

Пример считывания данных из wav-файла с их последующим графическим отображением (рис.1.17):

Рис.1.17. Фонограмма слова «Изгородь», считанная из wav-файла

При необходимости в системе MatLab имеется возможность отображать временные сегменты по частям с помощью функции strips (рис. 1.18):

strips(y, 5000) % Функция отображения фонограммы по частям

Запись данных в wav-файл

Запись данных в wav-файл осуществляется в системе MatLab с помощью функции wavwrite:

wavwrite(y, Fs, N, ‘filename’);

где y — записываемые данные (вектор — моно; 2-хстолбцовая матрица — стерео), Fs – частота дискретизации, N – число бит на отсчет (8 или 16), filename – имя файла,

(Примечание: по умолчанию запись производится со следующими параметрами: N=15 и Fs =8000)

Диапазон записываемых данных должен быть вещественным и лежать на интервале: -1. 1.

Рис.1.18. Отображение фонограмма с помощью функции strips