>> M=[1 2 3; 4 5 6; 7 8 9]
M =
1 2 3
4 5 6
7 8 9
Удалим второй столбец, используя оператор : (двоеточие):
>> M(:,2)=[ ]
M =
1 3
4 6
7 9
А теперь, используя оператор : (двоеточие), удалим вторую строку:
>> M(2,:)=[ ]
M =
1 3
7 9
Работа с демонстрационными примерами с командной строки
Вызов списка демонстрационных примеров
Одним из самых эффективных методов знакомства со сложными математическими системами является ознакомление со встроенными примерами их применения. Система MATLAB содержит многие сотни таких примеров – по примеру практически на каждый оператор или функцию. Наиболее поучительные примеры можно найти в разделе demos справки или выполнив команду:
>> help demos
Examples and demonstrations.
Type 'demo' at the command line to browse more demos of
MATLAB, the Toolboxes, and Simulink.
demo – Run demonstrations.
Mathematics.
intro – Basic Matrix Operations
inverter – Inverses of Matrices
buckydem – Graphs and Matrices
sparsity – Sparse Matrices
matmanip – Matrix Manipulation
integerMath – IntegerArithmeticExamples
Здесь весьма длинный список примеров обрезан.
Пример – вывод изображения поверхности
Исполнив команду
>> wernerboy
можно наблюдать изображение сложной поверхности Вернера–Боя, показанной на рисунке в окне графики.
Это построение прекрасно иллюстрирует технику функциональной окраски сложных поверхностей и фигур, именуемую рендерингом. Данная техника обеспечивает высокую степень реалистичности поверхностей с учетом условий освещения и свойств отражения света от материалов с определенными свойствами.
Что больше – e^pi или pi^e?
Рассмотрим еще один простой пример, дающий ответ на сакраментальный вопрос о том, какое значение больше – e^pi или pi^e? Для запуска этого примера надо исполнить команду
>> e2pi
и наблюдать красочное шоу – графики степенных функций x^y и y^x с построением на них линий заданных функций и оценкой их значений – рисунке. Этот пример – наглядная демонстрация перехода от узких понятий к более широким.
Так можно легко убедиться в том, что все же e^pi больше, чем pi^e. Можно проверить это и помощью логического оператора сравнения > (результат 1 означает, что неравенство выполняется и дает логическое значение TRUE):
>> e^pi>pi^e
ans = 1
Встроенные фигуры
MATLAB имеет ряд встроенных фигур, которые можно легко выводить на построение простым указанием их названия. Так, введя команду knot, можно задать построение еще одной сложной пространственной фигуры узла с функциональной окраской. Можно убедиться в том, что имеется возможность вращать полученную фигуру. В данном примере показан также вывод шкалы цветовых оттенков – справа от фигуры.
Просмотр текстов примеров и m-файлов
Как программная среда MATLAB открыта для пользователя. Любой m-файл системы, например файл демонстрационных примеров, можно просмотреть с помощью любого текстового редактора, редактора и отладчика m-файлов, встроенного в систему, или с помощью команды
type Имя_M-файла
Например, если вы хотите просмотреть текст файла демонстрационного примера e2pi, то нужно выполнить команду:
>> type e2pi
Используя команду help, можно получить справку по любой конкретной функции или команде.
Особенности двумерной графики MATLAB
Для визуализации вычислений в MATLAB широко используется машинная графика. Графика в MATLAB имеется двух типов:
• обычная двумерная и трехмерная растровая графика;
• специальная дескрипторная (handle) графика.
Остановимся на обычной графике. С ней связано представление о графических объектах, имеющих определенные свойства. В большинстве случаев об объектах можно забыть, если только не занимаеться объектно-ориентированным программированием задач графики. Связано это с тем, что большинство команд высокоуровневой графики, ориентированной на конечного пользователя, автоматически устанавливают свойства графических объектов и обеспечивают воспроизведение графики в нужной системе координат, палитре цветов, масштабе и т. д. Применение графики MATLAB практически исключает необходимость в сложных математических вычислениях, обычно необходимых для построения графиков.
Средства графики в новых версиях MATLAB существенно дополнены. Новая позиция Graphics меню содержит три команды:
• New Figure – открывает пустое окно графики;
• Plot Tools – открывает окно нового мощного редактора графики;
• More Plots… – открывает окно доступа к различным видам графики.
Первая команда очевидна, а две другие будут детально описаны ниже.
На более низком уровне решения задач используется ориентированная на опытного программиста дескрипторная графика (Handle Graphics), при которой каждому графическому объекту в соответствие ставится особое описание – дескриптор, на который возможны ссылки при использовании графического объекта. Дескрипторная графика позволяет осуществлять визуальное программирование объектов пользовательского интерфейса – управляющих кнопок, текстовых панелей и т. д.
Графики функций одной переменной
Графики в MATLAB строятся в отдельных масштабируемых и перемещаемых окнах. Возьмем вначале простейший пример – построение графика синусоиды. Следует помнить, что MATLAB (как и другие СКМ) строит графики функций по ряду точек, соединяя их отрезками прямых, то есть осуществляя линейную интерполяцию функции в интервале между смежными точками. Зададим интервал изменения аргумента x от 0 до 10 с шагом 0,1. Для построения графика достаточно вначале задать вектор x=0:0.1:15, а затем использовать команду построения графиков plot(sin(x)).
Итак, для построения графика синусоиды надо исполнить следующие команды:
x=0:0.1:15; y=sin(x); plot(x,y)
При этом будут построены окно графика и сам график синусоидальной функции. В этих примерах вектор x задает интервал изменения независимой переменной от 0 до 15 с шагом 0,1. Почему взят такой шаг, а не, скажем, 1? Дело в том, что plot из окна командного режима работы MATLAB строит не истинный график функции sin(x), а лишь заданное числом элементов вектора x число точек. Эти точки затем просто соединяются отрезками прямых того или иного стиля и цвета, то есть осуществляется кусочно-линейная интерполяция данных графика. При 100 точках полученная кривая глазом воспринимается как вполне плавная, но при 10–20 точках она будет выглядеть состоящей из отрезков прямых.
Графики ряда функций
Построим графики сразу трех функций: sin(x), cos(x) и sin(x)/x. Прежде всего отметим, что эти функции могут быть обозначены переменными, не имеющими явного указания аргумента в виде y(x):
>> y1=sin(x); y2=cos(x); y3=sin(x)/x;
Такая возможность обусловлена тем, что эти переменные являются векторами – как и переменная x. Теперь можно использовать одну из ряда форм команды
plot:
plot(a1,f1,a2,f2,a3,f3,...),
где a1, a2, a3, … – векторы аргументов функций (в нашем случае все они – x), а f1, f2, f3, … – векторы значений функций, графики которых строятся в одном окне. В нашем случае для построения графиков указанных функций мы должны записать следующее:
>> plot(x,y1,x,y2,x,y3)
Можно ожидать, что MATLAB в этом случае построит, как обычно, точки графиков этих функций и соединит их отрезками линий. Но, увы, если мы выполним эти команды, то никакого графика не получим вообще. Не исключен даже сбой в работе системы. Причина этого казуса – если x представляет собой массив (вектор), то нельзя использовать оператор матричного деления /.
Этот пример еще раз наглядно указывает на то, что чисто поверхностное применение даже такой мощной системы, как MATLAB, иногда приводит к досадным срывам. Чтобы все же получить график, надо вычислять отношение sin(x) к x с помощью оператора поэлементного деления массивов ./. Этот случай поясняет рисунок. Кстати, на нем показана открытой позиция Tools (Инструменты) меню графического окна, которая открывает доступ к многочисленным командам форматирования графиков.
Обратим внимание на то, что хотя на этот раз MATLAB построил графики всех трех функций, в окне командного режима появилось предупреждение о делении на 0 – в момент, когда x=0 – «Warning: Divide by zero.». Таким образом, plot «не знает» о том, что неопределенность sin(x)/x=0/0 устранимая и дает 1. Это недостаток практически всех систем для численных вычислений.
Построение графиков трех функций
Графическая функция fplot
Разумеется, MATLAB имеет средства для построения графиков и таких функций, как sin(x)/x, которые имеют устранимые неопределенности. Не обсуждая эти средства подробно, просто покажем, как это делается, с помощью другой графической команды – fplot:
fplot('f(x)', [xmin xmax])
Она позволяет строить график функции f(x), заданной в символьном виде, в интервале изменения аргумента x от xmin до xmax без фиксированного шага изменения x. Один из вариантов ее применения демонстрирует рисунке. Хотя в процессе вычислений предупреждение об ошибке (деление на 0) выводится, но график строится правильно, при x=0 sin(x)/x=1. Обратите также внимание на две используемые команды: clear (Очистить) – очистка графического окна и grid on (Сетка) – включение отображения сетки, которая строится пунктирными линиями.
На рисунке представлено также меню Insert (Вставка) окна графики. С его помощью можно задать вставки в графическое окно различных объектов, например легенд – обозначений кривых графиков, шкалы цветов и т. д. На рисунке представлены примеры вставки легенды и шкалы цветов Colorbar.
Обратим внимание и на позицию File (Файл) меню окна графики. Она содержит типовые файловые операции. Однако они относятся не к файлам документов, а к файлам графиков. В частности, можно присваивать имя записываемым на диск рисункам с графиками.
Знакомство с трехмерной графикой MATLAB
Построение трехмерных графиков
Столь же просто обеспечивается построение графиков сложных поверхностей, представленных функцией двух переменных z=f(x,y). Такую графику называют трехмерной, или 3D-графикой. Надо только знать, какой командой реализуется тот или иной график. Например, для построения графика поверхности и ее проекции в виде контурного графика на плоскость под поверхностью достаточно использовать следующий фрагмент программы: