Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Если в индексных выражениях использовать двоеточие, то можно ссылаться на подблоки массива. Так индексное выражение A(1:k, j) ссылается на блок из k элементов столбца j.
Однако существует способ лучше: двоеточие само по себе ссылается на все элементы строки или столбца: A(:, 3). Кроме того, начиная с версии 5.0, на последнюю строку или столбец массива можно ссылаться с помощью ключевого слова end. Таким образом, оператор A(:, end) описывает последний столбец матрицы А. 3) Операция объединения отдельных подблоков в массив называется конкатенацией. Даже при формировании исходной матрицы, когда объединяются отдельные элементы, осуществляется операция конкатенации. Оператор конкатенации - это пара квадратных скобок [], внутри которых указываются отдельные элементы или блоки массива: B = [A A+32; A+48 A+16], где А - некоторая величина. 4) В системе MATLAB принято хранить каждый массив, независимо от его размерности, как вектор-столбец. Этот вектор образован объединением (конкатенацией) столбцов исходного массива. При обращении к массиву А с указанием единственного индекса происходит непосредственное обращение к этому вектору-столбцу. Обращение A(3) ссылается на третье значение в столбце; А(7) - на седьмое и так далее. Операторы системы MATLAB. Встроенные функции. Для работы с переменными, числами и др. в системе MATLAB существуют необходимые операторы. Они делятся на три категории: v Арифметические операторы позволяют конструировать арифметические выражения и выполнять числовые вычисления. v Операторы отношения позволяют сравнивать числовые операнды. v Логические операторы позволяют строить логические выражения и имеют самый низкий приоритет относительно операторов отношения и арифметических операторов. Арифметические операторы допускают использование индексных выражений: > > D=sqrt(A(2))+2*B(1) D = 4.8284 Операторы отношения. В системе MATLAB определено 6 следующих операторов отношения: < Меньше < = Меньше или равно > Больше > = Больше или равно == Равно тождественно ~ = Не равно Логические операторы. В состав логических операторов системы MATLAB входят следующие операторы: «&» - и; «|» - или; «~» - нет. Теперь можно строить выражения, которые используют любую комбинацию арифметических, логических операторов и операторов отношения. Кроме этих операторов (как и почти в любом языке программирования) существуют четыре основных оператора управления последовательностью исполнения инструкций: 1) оператор условия if, в сочетании с оператором else и elseif выполняет группу инструкций в соответствии с некоторыми логическими условиями; 2) оператор переключения switch, в сочетании с операторами case и otherwise выполняет различные группы инструкций в зависимости от значения некоторого логического условия; 3) оператор условия while выполняет группу инструкций неопределенное число раз, в соответствии с некоторым логическим условием завершения; 4) оператор цикла for выполняет группу инструкций фиксированное число раз. Все операторы управления включают оператор end, чтобы указать конец блока, в котором действует этот оператор управления. Подробнее говорить здесь об этом нецелесообразно, так цель данного раздела – дать общую характеристику математическому пакету MATLAB. Визуализация результатов вычислений: графика. В результате вычислений в системе МАТLАВ обычно получается большой массив данных, который трудно анализировать без наглядной визуализации. Поэтому система визуализации, встроенная в МАТLАВ, придает этому пакету особую практическую ценность. МАТLАВ показывает графические объекты в специальных графических окнах, имеющих в заголовке слово Figure (фигура, изображение). Вот несколько действий, которые позволят добиться необходимой визуализации:
Функции построения графиков, рассмотренные выше, осуществляли вполне приемлемое автоматическое оформление графиков. А сейчас рассмотрим дополнительные возможности, связанные с управлением внешним видом графиков - задание цвета и стиля линий, а также размещение различных надписей в пределах графического окна. Для изменения стиля линии и дискретных вычисляемых точек можно использовать функцию plot(x1, y1, 's1', x1, y2, 's2', …), которая позволяет объединить в одном графическом окне несколько графиков функций у1(х1), у2(х2),... проведя их со стилями s1, s2,... и т. д. Например, стиль линии определяется следующими маркерами: '-' – непрерывная; '--' – штриховая; ': ' - пунктирная; '-.' – штрихпунктирная; цвет линии: 'k' – чёрный; 'r' – красный; 'b' – синий; тип точек: '.' – точка; '+' – плюс; '*' – звезда; 'о' – кружок и т.д. Примеры. > > plot(x, y, 'o') % вычисляемые точки отмечены кружком > > plot(x, y, 'r+-') % красная непрерывная линия с точками-плюсами > > plot(x, y, '+r-') % аналогичный результат > > plot(x, y, 'r-', x, y, 'ko') > > plot(x1, y1, 'b', x2, y2, 'k+') Если в строке стиля поставить маркер типа точки, но не проставить маркер на тип линии, то тогда отображаются только вычисляемые точки, а непрерывной линией они не соединяются. Текущее значение любого параметра (атрибута, характеристики) графического объекта можно узнать с помощью функции get. Чтобы ознакомиться со списком всех свойств графического объекта, нужно вызвать функцию get указав ей описатель объекта в виде единственного параметра. Например, для описателя hPlot объекта типа line находим весь список его свойств: > > x=0: 0.1: 3; > > y=sin(x); > > hPlot=plot(x, y); > > get(hPlot) Color = [0 0 1] EraseMode = normal LineStyle = - LineWidth = [0.5] Marker = none … Среди всех этих свойств встречаются интуитивно понятные. В частности, мы видим значение толщины линии (LineWidth), равное 0, 5; свойство Соlor отвечает за цвет линии: он равен [0 0 1] (RGB-кодировка, то есть Красный Зеленый Синий), что соответствует синему цвету. Для успешного применения иных свойств требуется их подробное и кропотливое изучение, без которого, однако, вполне можно обойтись, так как наиболее важным свойствам система МАТLАВ присваивает по умолчанию вполне в среднем приемлемые значения. Они указываются в списке свойств справа от знака равно. Некоторые свойства не задействованы и являются резервом, который применяют в специальных случаях. Теперь от оформления непосредственно линий перейдем к оформлению осей координат, к надписям на осях и т. д. Система МАТLАВ устанавливает пределы на горизонтальной оси равными тем значениям, что указаны пользователем для независимой переменной. Для зависимой переменной по вертикальной оси МАТLАВ самостоятельно вычисляет диапазон изменения значений функции. В результате график функции оказывается как бы вписанным в прямоугольник. Если мы хотим отказаться от этой особенности масштабирования при построении графиков в системе МАТLАВ, то мы должны явным образом навязать свои пределы изменения переменных по осям координат. Это делается с помощью функции ахis([хmin, хmax, уmin, уmax]), причем команду на выполнение этой функции можно вводить с клавиатуры сколько угодно раз уже после построения графика функции, чтобы, глядя на получающиеся визуальные изображения, добиться наилучшего восприятия. Такое масштабирование позволяет получить подробные изображения тех частей графика, которые вызывают наибольший интерес в конкретном исследовании. Теперь изменим количество числовых меток на осях. Их может показаться недостаточно. Изменить отметки на осях координат можно с помощью функции set обрабатывающей графический объект axes. Это объект, который содержит оси координат и белый прямоугольник, внутри которого проводится график функции. Для получения описателя такого объекта применяют функцию gca. Эту функцию вызывают без параметров. В итоге фрагмент кода > > hAxes=gca; > > set (hAxes, 'xtick', [1.5 1.75 2.0 2.25 2.5]) выполняющийся после построения графика, устанавливает новые метки (в количестве пяти штук) на горизонтальной оси координат. Кроме того, используя команду grid on можно нанести измерительную сетку на всю область построения графика. Для проставления различных надписей на полученном рисунке применяют функции xlabel, ylabel, title и text. Функция xlabel предназначена для проставления названия горизонтальной оси, функция уlabel - то же для вертикальной оси. Если требуется разместить надпись в произвольном месте рисунка, применяем функцию text, имеющую свои свойства: text (x, y, 'some text'), где x, y – координаты точки, с которой начинается надпись. По умолчанию координаты задаются в тех же единицах измерения, что и координаты, указанные на горизонтальной и вертикальной осях. Специальные управляющие символы вводятся внутри текста после символа \ (обратная косая черта). Обозначения для специальных символов совпадают с таковыми в системе подготовки научных текстов ТеХ. В частности, для вывода части текста в следующую строку применяется управляющий символ newline. Общий заголовок для графика проставляется функцией title ('some text'), так же используемой язык TeX. Завершая рассказ о способах оформления графиков функций, изменим цвет фона, на котором эти графики рисуются. По умолчанию этот цвет белый. Сделаем его слегка зеленоватым, присвоив цветовому свойству объекта типа ахеs значение [0.5 0.8 0.5]. Но сначала надо получить описатель этого объекта: > > hAxes=gca; Функция gca предназначена для поиска описателя текущего объекта ахеs. Так как у нас имеется единственный объект ахеs, то проблемы выбора нет. Если бы было несколько областей, в которых рисуются графики функций, то есть несколько объектов типа ахеs, то в этом случае сначала нужно щелкнуть мышью на том из них, который должен стать текущим, и только после этого вводить представленный выше код. Сменить цвет фона легко: > > set (hАхеs, 'Со1ог', [ 0.5 0.8 0.5]); Аналогично меняем цвет фона всего графического окна: > > FigureColor = [ 0.8 0.5 0.5]; hFigure = gcf; > > Set (hFigure, 'Соlоr', FigureColor); где с помощью функции gcf мы получаем описатель объекта типа figure, представляющего графическое окно, а далее меняем цвет его фона на красноватый. Кроме двухмерной графики в систему MATLAB входят широкие возможности отображения трехмерных графических объектов. В частности, имеется возможность решать разнообразные задачи трехмерного моделирования объектов реального мира, опираясь на графические объекты типа рatch. Это исключительно обширный и непростой раздел современной компьютерной графики. Графики функций двух переменных представляют собой куски поверхностей, нависающие над областями определения функций. Отсюда ясно, что изображение графиков функций двух переменных требует реализации «трехмерной графики» на плоском экране дисплея компьютера. Высокоуровневая графическая подсистема МАТLАВ автоматически реализует трехмерную графику без специальных усилий со стороны пользователя. Пусть в точке с координатами х1, у1 вычислено значение функции z=f(x, y) и оно равно z1. В некоторой другой точке (то есть при другом значении аргументов) х2, у2 вычисляют значение функции z1. Продолжая этот процесс, получают массив (набор) точек (х1, у1, z1), (х2, у2, z2), …, (хN, уN, zN) в количестве N штук, расположенных в трехмерном пространстве. Специальные функции системы МАТLАВ проводят через эти точки гладкие поверхности и отображают их проекции на плоский дисплей компьютера. Чаще всего точки аргументов расположены в области определения функции регулярно в виде прямоугольной сетки (матрицы точек). Такая сетка точек порождает две числовые матрицы одной и той же структуры: первая матрица содержит значения первых координат этих точек (х-координат), а вторая матрица содержит значения вторых координат (у-координат). Обозначим первую матрицу как Х, а вторую - как У. Есть еще и третья матрица - матрица значений функции z=f(x, y) при этих аргументах. Эту матрицу обозначим буквой Z. В результате, для построения таких графиков вызов функции plot3 осуществляется в виде > > рlot3(Х, У, Z) где X, У и Z - матрицы одинаковых размеров, смысл которых мы только что объяснили. В системе МАТLАВ имеется специальная функция для получения по одномерным массивам u, v двумерных массивов Х и У, представляющих первые и вторые координаты получающейся прямоугольной сетки точек: [X, У] = meshgrid(u, v) (примеры графиков см. в решении задач). Таким образом, функция рlot3 строит график в виде набора линий (тип line) в пространстве, каждая из которых является сечением трехмерной поверхности плоскостями, параллельными плоскости уОz. По-другому можно сказать, что каждая линия получается из отрезков прямых, соединяющих набор точек, координаты которых берутся из одинаковых столбцов матриц X, У и Z. То есть, первая линия соответствует первым столбцам матриц X, У, Z; вторая линия - вторым столбцам этих матриц и т. д. Помимо этой простейшей функции система МАТLАВ располагает еще рядом функций, позволяющих добиваться большей реалистичности в изображении трехмерных графиков. Это функции mesh, surf и surfl. Они порождают графические объекты типа surface. Функция mesh и соединяет друг с другом все соседние точки поверхности графика отрезками прямых и показывает в графическом окне системы МАТLАВ плоскую проекцию такого объемного каркасно-ребристого (по-английски – wireframe mesh) тела. Каркасно-ребристое тело состоит из четырехугольных граней белого цвета, а ребра граней окрашиваются в разные цвета. По умолчанию более высоким точкам графика соответствуют красные цвета, а более низким (меньшие значения третьей координаты) - темно-синие. Промежуточные области окрашиваются в светло-синие, зеленые и желтые цвета. В результате, поскольку разные области поверхности графика (конкретно - ребра каркасного тела) окрашиваются в разные цвета, применение функции mesh порождает весьма наглядное изображение трехмерного графика. Как мы уже говорили, для лучшего восприятия «объемности изображения» разные ребра автоматически окрашиваются в разные цвета. Если вы считаете, что изображенное ребристое тело является прозрачным и не должно скрывать задних ребер, то можно ввести команду hidden off, после чего такие линии появятся на изображении. В одних случаях это позволяет улучшить изображение, в других - нет. Всегда можно вернуться к имеющему место по умолчанию режиму сокрытия при помощи команды hidden on. Более «плотного» изображения поверхности можно добиться за счет раскраски разными цветами не ребер, а граней каркасно-ребристого тела. Для этого вместо функции mesh нужно применить функцию surf: surf (X, У, Z). В результате получается изображение, представляющее плотную (непрозрачную) сетчатую поверхность, причем отдельные ячейки (грани) этой сетчатой поверхности (плоские четырехугольники) автоматически окрашиваются в разные цвета. Функция surfl в отличие от функции surf не применяет искусственных приемов закраски поверхности трехмерных графиков. Упрощённо говоря, эта функция сразу же использует понятие освещения поверхности графика. По умолчанию она использует встроенную засветку графика со стороны некоторой геометрической точки пространства. В результате точки поверхности графика, обращенные в сторону источника света (условно более яркие), изображаются красным цветом, а точки, находящиеся «в тени», - темно-синим. Что касается оформления трёхмерных графиков, то многие приёмы совпадают с теми, что были рассмотрены при изучении плоских графиков: axis([xmin xmax ymin ymax zmin zmax]), text, xlabel, ylabel, zlabel и т.д. Отличие состоит только в существовании для трёхмерной графики камеры и свойств её объектива. Главное из характеристик камеры – её положение. Оно определяется двумя углами, задающими ориентацию этой точки в пространстве: угол азимута (часто обозначают как az) и угол возвышения (обозначают el). Изменение первого угла означает вращение плоскости хОу вокруг оси Оz против часовой стрелки. Угол возвышения есть угол между направлением на точку обзора и плоскость хОу. Когда выполняются высокоуровневые графические функции mesh, surf или surfl, то по умолчанию устанавливаются значения az=-37.5º, el=30º. Эти значения в любой момент времени можно изменить специальной функцией view([az, el]), где аргументы – новые углы. Подводя итоги, заметим, что система MATLAB обладает огромными, трудно поддающимися обзору возможностями по оформлению графиков функций. Все рассмотренные возможности основаны на так называемой векторной графике, когда изображаемый объект задан своими координатами (числовыми данными, накопленными в массивах), которые сама система MATLAB в момент отображения переводит в значения (цвет) пикселов дисплея. Векторная графика прекрасно поддаётся масштабированию (что наглядно показано на рисунках в работе). Однако существуют графические объекты реального мира, заданные в растровой форме, например сосканированные для ввода в компьютер фотографии. Система MATLAB обладает также развитыми средствами работы с растровой графикой. Кроме этого, в MATLAB существуют возможности по показу движущихся векторных изображений (например, динамическое построение графика, вращение трёхмерных графиков, изображение «броуновского движения»), что важно для визуализации динамических данных и для всестороннего изучения 30-объектов. Но мультимедийные способности пакета МАТLАВ базируются не только на анимации, но и на возможности воспроизводить звук (если на компьютере присутствует соответствующее оборудование) стандартного для платформы Windows формата WAVE (*.wav). Аналитические вычисления с помощью пакета расширения Symbolic Math Toolbox. Сколь широки ни были бы возможности ядра системы МАТLАВ по предоставлению готовых услуг в области вычислений и компьютерной графики, всегда найдутся новые частные проблемы и целые предметные области, которые остались неохваченными. Для гибкого реагирования на такие ситуации архитектура пакета МАТLАВ построена таким образом, что имеется очень удобная техника встраивания в общую систему новых программных решений. Причем это встраивание происходит прозрачным (незаметным) для пользователя образом. После инсталляции пакета расширения (по-английски - tооlbох) функциональные возможности этого пакета как бы сливаются с базовыми возможностями ядра системы МАТLАВ и ими становится возможным пользоваться абсолютно традиционными способами. Пакеты расширения для системы МАТLАВ производят как фирма-изготовитель самого пакета МАТLАВ, так и сторонние производители. В настоящее время существуют десятки официально распространяемых пакетов расширения, среди которых существуют специальные математические пакеты для решения систем дифференциальных уравнений с частными производными (пакет Partial Differential Equations Тооlbох), для решения задач статистики (Statistics Тооlbох) и оптимизационных задач (Оptimization Тооlbох), дла решения задач обработки изображений (Image Processing Тооlbох; Wavelet Toolbox) и многих других задач. Рассмотрим только основные возможности пакета расширения Symbolic Math Тооlbох, позволяющего в рамках системы МАТLАВ осуществлять аналитические вычисления и аналитические преобразования выражений. Этот пакет лицензирован у фирмы Waterloo Марlе Software, Canada, и включен в состав дистрибутива пакета МАТLАВ на правах пакета расширения. Он столь органично дополняет и расширяет возможности ядра системы МАТLАВ, что пропустить рассказ об этом пакете расширения было бы неверно. Возможности пакета Symbolic Math Тооlbох поистине гигантские, поэтому мы остановимся лишь на основных и наиболее характерных из них. Помимо выполнения аналитических преобразований пакет Symbolic Math Тооlbох позволяет выполнить арифметические вычисления с контролируемой точностью, которую можно заказать заранее. С этого и начнем. Пакет расширения Symbolic Math Тооlbох предоставляет для этой цели две функции - digits и vpa. Первая из этих функций устанавливает требуемую точность в количестве верных десятичных знаков после запятой, а вторая функция осуществляет вычисления с заданной точностью. Аббревиатура vpa означает Variable Precision Arithmetic, что переводится как «арифметика с переменной точностью».
|