Практикум по матлабу. практикум по матлабу. Физических процессов с использованием
Скачать 1.13 Mb.
|
Editor/Debu- ger. Для его запуска используется команда edit <имя_файла> или пункт меню File/Open. Можно открыть окно редактора/отладчика и с помощью пункта ме- ню File/New/M-file. При таком варианте имя отлаживаемого файла открывается уже из меню самого редактора/отладчика. Общий вид окна редактора показан на рис. 2 , а кнопки панели инструментов, которые удобнее всего использовать при отладке, показаны на рис. 3 Панель инструментов редактора/отладчика выглядит следующим образом: Рис. 3. Кнопки основной панели редактора/отладчика Способ использования этих кнопок понятен из их названия. Часть кнопок пред- ставляют собой обычные редактирующие кнопки, используемые при сохранении, копировании, печати и поиске файлов. Другая часть связана непосредственно с от- ладкой. Это кнопки установки и очистки точек остановки, кнопки пошагового пе- ремещения по программе с заходом в подпрограммы (Step in) и без захода в под- программы (Single Step), кнопка продолжения вычислений (Continue) и кнопка 133 остановки отладки (Quit Debugging). Как было отмечено выше, с помощью пунк- та меню View/Workspace Browser можно не только просмотреть, но и изменить значение любой переменной. При этом в одном из окон редактора открывается та- блица, подобная электронной таблице, и в ней можно не только просматривать, но и исправлять значения перемнных. 7.4. Сравнение алгоритмов: flops и etime Для определения эффективности алгоритмов принято использовать два парамет- ра -число операций с плавающей запятой (flops) и затраченное время. Функция MATLAB flops сохраняет полное число выполненных операций с плавающей за- пятой. Команда flops(0) (не flops = 0!) обнуляет счетчик выполненных опера- ций. Таким образом, если вы в начале исполнения вашего алгоритма введете коман- ду flops(0), то команда flops сразу после его завершения даст число операций. Функция clock возвращает текущее время с точностью до сотых долей секунды (см. help clock). При наличии двух таких времен t1 и t2 функция etime(t2,t1) выдает время, прошедшее от t1 до t2. Можно, например, измерить время, требу- емое для решения данной линейной системы Ax = b методом исключения Гаусса следующим образом: t = clock; x = A \ b; time = etime(clock,t). Вы можете сравнить это время и число flops с временем решения этой же системы с помощью оператора x = inv(A)*b;. Попробуйте сами сделать это. В версии 4.0 и выше имеются более удобные функции tic и toc. 8. Графика MATLAB может создавать как плоские графики, так и трехмерные сетчатые по- верхности, а также движущиеся графики, или анимацию. Для знакомства с некото- рыми графическими возможностями имеющейся у вас версии запустите программу demo. Основными и наиболее часто употребительными являются графики, которые представляют собой линии, описывающие те или иные численные данные. MAT- LAB предоставляет набор команд высокого уровня, которые используются для построения таких линий. Это такие команды, как plot, title, axis, text, hist, contour и ряд других, описанных в следующих двух разделах. 134 8.1. Плоские графики 8.1.1. Команда plot Команда plot создает x-y график в линейных осях; если x и y являются векторами одинаковой длины, то команда plot(x,y) открывает графическое окно и рисует зависимость y(x). Вы можете нарисовать график синуса на интервале от -4 до 4 с помощью команды x = -4:.01:4; y = sin(x); plot(x,y) Попробуйте это сделать сами. Вектор x является набором равноотстоящих точек с шагом 0.01, а y -вектор со значениями функции синуса в этих точках (вспомните, что синус -поэлементная функция). Рисунок при создании открывает отдельное окно. Переход между окнами (возврат в окно MATLAB или переход от рисунка к рисунку осуществляется в соответствии с правилами среды, например, с помощью комбинации Alt+Tab или с помощью мыши). В качестве второго примера вы мо- жете нарисовать график e −x 2 на интервале от -1.5 до 1.5 следующим образом: x = - 1.5:.01:1.5; y = exp(-x.ˆ2); plot(x,y). Обратите внимание на то, что точка перед ˆ обязательна, поскольку мы хотим, чтобы возведение в степень выполня- лось поэлементно (см. п. 3.3 ). Можно, например, рисовать кривые, заданные па- раметрически. Попробуйте, например, выполнить такой оператор t=0:.001:2*pi; x=cos(3*t); y=sin(2*t); plot(x,y). Аргументами функции plot могут быть различные комбинации векторов и мат- риц. Возможны следующие варианты: • plot(y) – Если y -вектор, то будет нарисована кривая y как функция номера эле- мента в y. – Если y -матрица, то будет сгенерирован набор кривых, каждая из кото- рых представляет собой зависимость столбца матрицы от номера строки. • plot(x,y) – Если x и y -вектора одинаковой длины и размерности (оба строки или оба столбцы), то будет нарисована кривая y от x. – Если x -вектор, а y -матрица, строки или столбцы y будут нарисованы в зависимости от x. Если столбец матрицы y имеет ту же длину, что и век- тор x, то будет построен набор кривых, представляющий зависимость каждого из столбцов от x. Если строка матрицы y имеет ту же длину, 135 что и вектор x, то будет построен набор кривых, представляющий зави- симость каждой из строк от x. Если число строк и столбцов y одинаково, то строятся столбцы от x. – Если x -матрица, а y -вектор, то будет построено несколько кривых представляющих зависимость y от строк или столбцов матрицы x по пра- вилу, описанному в предыдущем пункте. – Если x и y -матрицы одинаковой размерности, то будет построен набор кривых, представляющих столбцы y от столбцов x. Если у вас цветной монитор, то вы уже обратили внимание, что при описанном способе вызова функции plot различные кривые на одном и том же графике от- рисовываются разным цветом. Перебор цветов выполняется автоматически, а при использовании соответствующих аргументов у команды plot эти цвета можно вы- бирать (см. далее). Число аргументов у команды plot не ограничивается двумя. Можно исполь- зовать эту команду в формате plot(x1,y1,x2,y2,...), причем правила, описанные выше, относятся к каждой паре аргументов. Иногда для отрисовки кривой используется функция line с теми же аргумента- ми, что и функция plot. Различие станет ясно после знакомства с дескрипторной графикой низкого уровня (см. п. 8.4 ). Представляет интерес познакомиться с функцией comet(x,y), которая строит движущуюся двумерную кривую с головой другого цвета. И хотя такое отображе- ние не является анимацией в полном смысле слова, поскольку выполняется отри- совка уже насчитанных точек, тем не менее при построении сложных параметриче- ских кривых полезно использовать эту функцию (например, в задаче исследования кривых Лиссажу). 8.1.2. Разметка графика и надписи Команда grid поместит сетку на график. График может быть снабжен заголов- ком, именами осей, и на сам график может быть помещен дополнительный текст с помощью команд вывода текста. Аргументами всех этих команд является тексто- вая строка. Например, команда title(’График наилучшего приближения’) добавит к вашему графику заголовок. Команда gtext(’Пятно’) позволяет с помо- щью мыши или клавишного курсора разместить на рисунке индикаторный крест, в месте размещения которого и будет помещен текст после нажатия произволь- ной клавиши. При необходимости сделать подписи осей используются команды Xlabel(’ПодписьX’), Ylabel(’ПодписьY’). При необходимости вывести в каче- 136 стве надписи какую-либо комбинацию символов, которые отсутствуют в стандарт- ном текстовом процессоре (например, верхние и нижние индексы, формулы и т.д.), вы можете использовать стандартную нотацию LaTeXа (подробнее о LaTeX вы можете узнать, например в [ 10 ]). Если выведена неправильная надпись, то можно ее стереть или заменить на другую, повторив такую же команду вывода текста, но с пустой или новой строкой в качестве аргумента. Для изображения нескольких кривых на одном рисунке существуют два спосо- ба, которые иллюстрируются следующими примерами. 1. x=0:.01:2*pi; y1=sin(x); y2=sin(2*x); y3=sin(4*x); plot(x,y1,x,y2,x,y3) или, что полностью эквивалентно, формируется матрица Y, содержащая зна- чения изображаемых функций в виде столбцов, и после этого рисунок созда- ется последовательностью команд x=0:.01:2*pi; Y=[sin(x)’, sin(2*x)’, sin(4*x)’]; plot(x,Y) 2. Другим способом такого рисования является использование команды hold on, которая замораживает текущий график, так что последующие кривые по- мещаются на этот же график. При этом масштаб и разметка осей изменяют- ся, если новая кривая не вписывается в нарисованные оси. Команда hold off приводит к тому, что любой последующий вызов команды plot создает новый рисунок на этом же листе, т.е. предыдущий график стирается. При выводе графика можно сменить принятый по умолчанию тип точек, с по- мощью которых рисуется данный график. Например, последовательность команд x=0:.01:2*pi; y1=sin(x); y2=sin(2*x); y3=sin(4*x); plot(x,y1,’--’,x,y2,’:’,x,y3,’+’) приведет к тому, что первый график будет нарисован пунктиром, второй – точками, а третий – символами + (рис. 4 ). В общем случае каждая линия на графике опре- деляется триплетом x,y,s, где x и y -это вектора с координатами, а s -строковая 137 Рис. 4. Пример графика Sin(x), Sin(2x) и Sin(3x) переменная, образованная любыми комбинациями из каких-нибудь приведенных ниже столбцов. S Цвет S Маркер S Тип линии y желтый точка - сплошная m фиолетовый o кружок : точечная c голубой x x-метка -. штрих-пунктирная r красный + плюс - - пунктирная g зеленый * звездочка b синий s квадрат w белый d алмаз k черный v треугольник (вниз) ˆ треугольник (вверх) < треугольник (влево) > треугольник (вправо) p шестиугольник h восьмиугольник 8.1.3. Управление осями при выводе графиков По умолчанию масштаб осей выбирается автоматически так чтобы график целиком поместился в окне, причем с разумным запасом. Кроме того, оси автоматически 138 размечаются и по умолчанию выбирается декартова система координат с началом координат 5 , в левом нижнем углу. Эта автоматическая установка может быть из- менена с помощью команды axis. Использование этой функции применительно к плоским графикам описано в следующей далее таблице. Обращение Результат axis([xmin xmax ymin ymax]) Устанавливает пределы изменения соот- ветственно по x и y координатам соот- ветственно. Если максимальный предел по любой координате установить равным Inf, то соответствующий предел будет опреде- ляться автоматически. Аналогичное спра- ведливо для нижнего предела, если его установить равным -Inf. axis(’square’) Делает область вывода квадратной. axis(’equal’) Делает единицы измерения по оси x и y одинаковыми. axis(’normal’) Восстанавливает режим по умолчанию. axis(’ij’) Помещает начало координат в левый верх- ний угол. Направление оси x -слева на- право, направление оси y -сверху вниз. axis(’xy’) Восстанавливает стандартную декартову систему координат с началом в левом ниж- нем углу и направлением оси y снизу вверх. axis(’tight’) Устанавливает пределы по осям точно рав- ными максимальным и минимальным зна- чениям соответствующих переменных. 5 Началом координат считается точка с координатами x min , y min . 139 Обращение Результат axis(’off’) Делает невидимыми оси, метки осей и над- писи на осях. axis(’on’) Включает оси и их разметку. 8.1.4. Несколько графиков на листе При необходимости вывести на один экран несколько графиков, т.е. разбить гра- фическое окно на несколько отдельных частей, каждая из которых со своими ося- ми, используется команда subplot(m n p) или, что тоже самое, subplot(m,n,p). Значение m указывает, на сколько частей окно разбивается по вертикали, n -по горизонтали, а p -порядковый номер подокна при счете слева направо и сверху вниз. Команда subplot используется как для создания нового подокна, так и для перехода от одного подокна к другому. После вызова этой команды plot нарисует график или графики в соответствующем подокне. Например, последовательность команд x= -1:.1:1; y1=sin(x); subplot(2, 1, 1), plot(x, y1); y2=log(abs(y1)); subplot(2, 1, 2), plot(x,y2); строит два рисунка в верхней и нижней части экрана. В верхней части строится гра- фик sin(x), а в нижней части экрана -зависимость log(abs(sin(x))). Как видно из приведенной выше последовательности команд, при x=0 вычисляется log(0). При этом в командном окне появляется предупреждение, а график строится в точках −1 ≤ x ≤ 0.1 и 0.1 ≤ x ≤ 1. 8.2. Специальные виды графиков Существует целый ряд функций высокого уровня, которые позволяют построить такие виды зависимости, как столбиковые диаграммы, гистограммы, ступенчатые зависимости и статистические кривые с указанием погрешностей. 8.2.1. Столбиковые диаграммы Как правило, построение таких диаграмм у большинства ассоциируется с электрон- ными таблицами или другими подобными средствами. Но поскольку MATLAB 140 используется и для финансового анализа (а также эта функция удобна для постро- ения гистограмм), мы здесь с ней познакомимся. Если необходимо построить столбиковую диаграмму, показывающую зависи- мость какой-либо величины, хранящейся в векторе bar_h, от номера каждого эле- мента, то это выполняется командой bar(bar_h). Если необходимо построить эту же зависимость, но от другой величины, то используется функция bar(bar_h,x). Если вам необходимо рисовать столбики определенного цвета или с помощью опре- деленной линии, то можно использовать еще один аргумент у функции bar(x, y, line_style_string), который полностью эквивалентен такому же аргументу у ко- манды plot(см. п. 8.1.2 ). Существуют еще разные возможности построения стол- биковых диаграмм, когда аргументом является не вектор, а матрица. При этом воз- никают различные возможности группировки этих столбиков. Поскольку это вы- ходит за рамки наших интересов, рекомендуем при необходимости ознакомиться с этими возможностями с помощью встроенной помощи( help bar). 8.2.2. Ступенчатые кривые В системе MATLAB существует функция, которая создает ступенчатое изобра- жение ваших данных. Например, вместо соединения каждой пары точек из векторов- аргументов прямыми линиями (как это делает функция plot или line) функция stairs изображает ваши данные в виде горизонтальных отрезков на уровне y i , при- чем каждый отрезок горизонтальной линии длится от i до i + 1, если обращение имеет вид stairs(y), и от x i до x i+1 , если обращение имеет вид stairs(x,y). Зна- чения x i не должны быть равноотстоящими и не должны быть упорядочены по возрастанию. Вывод графика на экран можно предотвратить, используя обраще- ние вида [xs,ys]=stairs(x,y). Потом этот график может быть выведен на экран с помощью команды plot, line или другим каким-нибудь способом (см., например, п. 8.6 ) 8.2.3. Гистограммы Гистограмма является специальным видом столбиковой диаграммы. При постро- ении гистограмы (т.е. графического изображения распределения некоторой вели- чины) необходимо задавать определенное число бинов (иногда говорят: каналов гистограммы) 6 , определяя тем самым, сколько данных попадет в каждый бин, и 6 Т.е. число разбиений переменной на интервалы, относительно которой и будет вычис- ляться и строиться распределение. Например, если студенты имеют рост от 150 см до 200 см, то можно разбить этот интервал ростов на 10 бинов, по 5 см в каждом, т.е это интервалы от 150 см до 155 см и т.д. Так вот, гистограмма показывает, сколько студентов попадает в каждый 141 графически изображать это в виде столбиковой или ступенчатой диаграммы. В MATLAB существует функция hist, которая при обращении к ней в виде hist(y) вычисляет и рисует гистограмму с 10 бинами, равномерно распределенными между y max и y min . Кроме того, функция hist(y) может иметь второй аргумент. Если этот аргумент -целое число, то это число определяет число бинов. Если второй аргумент -вектор, то этот вектор определяет центры используемых бинов. В этом случае центры бинов должны быть равноотстоящими, а координаты этих центров должны быть расположены в возрастающем порядке. При нарушении любого из этих условий результат становится непредсказуемым. Как и при использовании команды |