Тема-3-5. Основы работы с математическими пакетами (MathCad)
![]()
|
Тема 3.5. Основы работы с математическими пакетами Страница 338 7 Zoom Out — уменьшение масштаба изображения; 10 Data Cursor — включение режима, при котором точка графика, попавшая под курсор, сопровождается отображением значений координат; 11 Insert Colorbar — включение столбика с палитрой цветов (Colormap), от- ражающего распределение высот z; 12 Insert Legend — вставка автоматической легенды; 13 Hide Plot Tools — удаление средств редактирования и просмотра; 14 Show Plot Tools — пристыковка к графическому окну средств редактирования и просмотра (Figure Palette (Редактор графического окна), Property Editor (Редактор свойств), Plot frowsier (Просмотр графика)). Команды элемента меню View (Вид) позволяют отобразить (команда помечена галочкой) на экране или скрыть следующие средства редактирования (рис. 3.5.3-21): Figure Toolbar — панель инструментов графического окна; Camera Toolbar — панель инструментов для управления камерой; Plot Editor Toolbar — панель инструментов для редактирования графика; Figure Palette — редактор графического окна; Plot Browser — средства просмотра графических объектов; Property Editor — редактор свойств графических объектов. На рис. 3.5.3-22 представлено графическое окно со средствами редектирования. Рис. 3.5.3-22. Графическое окно со средствами редактирования Тема 3.5. Основы работы с математическими пакетами Страница 339 Окно Plot Browser (Просмотр графика) отображает список графических объектов, расположенных в поле графика. Элемент меню Insert (Вставка) содержит набор команд по вставке в графическое окно различных элементов оформления — легенды (Legend), разноцветной полоски (Colorbar), линии (Line), различных стрелок (Arrow, Double Arrow, Text Arrow), пояснительной подписи (Text Box), прямоугольников (Rectangle) и эллипсов (Ellipse). Все эти команды дублируют возможности Figure Palette (Редактор графического окна) и Plot Edit Toolbar (Панель инструментов редактирования графика). Команда Insert | Light (Вставка | Свет) подключает к графическому окну Property Editor (Редактор свойств) источник света (Property Editor — light), с помощью которого можно изменить позицию (Position — х, у, z), стиль (Style) распространения лучей света (бесконечно удаленный — Infinite, локальный — Local) и цвет лучей (Color). Элемент меню Tools (Сервис) содержит команды Edit Plot (Редактировать график), Zoom In (Увеличить масштаб). Zoom Out (Уменьшить масштаб), Pan (Захватить), Rotate 3D (ЗD-поворот) и Data Cursor (Данные под курсором) продублированы аналогичными кнопками на панели инструментов Figure Toolbar (Панель графического объекта). Команда Reset View (Восстановить вид) возвращает на исходное место график, перемешенный в режиме Pan (Захватить). Команда Options (Параметры) открывает список команд, с помощью которых можно изменить режим масштабирования, траекторию перемещения графика, захваченного в режиме Pan (Захватить), и способ отображения координат точки, выделенной курсором. Команда Tools | Data Statistics (Сервис | Статистика данных) позволяет получить стандартные статистические данные о кривой, представленной в поле графика. Довольно много средств оформления графиков представлено в окне Figure Palette (Редактор графического окна) и продублировано соответствующими кнопками на панели инструментов Plot Edit Toolbar (Панель инструментов редактирования графика 3.5.3.2.3. Построение трехмерных изображений Не всегда весь объем визуализируемой информации удобно представить в виде набора двумерных кривых. Иногда, по смыслу задачи, данные должны быть представлены как объекты трехмерного пространства. Для изображения таких объектов рассмотрим несколько функций. Способ обращения к команде plot3, а также список дополнительных параметров полностью совпадает с описанным в п. 3.5.3.3.1 и далее. Аналогично функциям plot( ) - plot3( ) существует пара функция comet( ) - comet3( ). Функция comet3( ) используется так же, как и comet. При использовании для обрисовки трехмерной кривой функции (объекта) line( ) можно обращаться к этой функции как к функции plot( ), т.е. line(x,y,z). Трехмерные поверхности обычно описываются функцией двух переменных z(x, у). Специфика построения трехмерных графиков ("по точкам") требует не просто задания ряда значений векторов х и у. Она требует определения для X и Y двумерных массивов — матриц, которые используются для дальнейших вычислений и построений трехмерных поверхностей. Для создания таких массивов служит функция meshgrid( ). В основном она используется совместно с функциями построения графиков трехмерных поверхностей. Функция meshgrid( ) записывается в следующих формах: [X,Y] = meshgrid(x) — аналогична [X,Y] = meshgrid(x,y); [X,Y,Z] = meshgrid(x,y,z) Тема 3.5. Основы работы с математическими пакетами Страница 340 и возвращает трехмерные массивы, используемые для вычисления функций трех переменных и построения трехмерных графиков; [X.Y] = meshgrid(x.y) преобразует область, заданную векторами х и у, в массивы X и Y, которые могут быть использованы для вычисления функции двух переменных и построения трехмерных графиков. Строки выходного массива X являются копиями вектора X. Пример 3.5.3-64 >> [X,Y]=meshgrid(0:3,-3:0); >> X = 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 >> Y = -3 -3 -3 -3 -2 -2 -2 -2 -1 -1 -1 -1 0 0 0 0 Эти данные используются функциями mesh(X,Y,Z) – построение сетчатого графика, где X,Y,Z – матрицы одинаковой размерности; plot3(X,Y,Z) – построение точек, соединенных отрезками прямых (аналог plot); urf(X,Y,Z) –построение поверхности и др. Кроме численных методов построения можно использовать символьные: ezmesh( ), ezsurf( ), ezplot3( ) и т. п. Синтаксис использования этих функций прост. Рассмотрим пример 3.5.3-64 построения графика синуса на интервале от -4 до 4. Пример 3.5.3-64 >>ezsurf('sin((x^2+y^2)^(0.5))/((x^2+y^2)^(0.5))',[-10 10],[-10 10]) >> -10 -5 0 5 10 -10 -5 0 5 10 -0.5 0 0.5 1 x sin((x 2 +y 2 ) 0.5 )/((x 2 +y 2 ) 0.5 ) y Рис. 3.5.3-23 Тема 3.5. Основы работы с математическими пакетами Страница 341 Заключенное в апострофы – это функция, график которой необходимо построить, в скобках указаны пределы (их можно и не задавать). Обратите внимание на отсутствие . и eps – этого просто не надо. Кроме этого, эти функции позволяют строить графики, заданные параметрически, задавать различные параметры графиков и другие возможности (посмотрите help). Трехмерные сеточные поверхности изображаются с помощью функции mesh( ). Команда mesh(z) изображает в трехмерной перспективе поверхность, описываемую элементами матрицы z. Эта поверхность определяется Z-координатами точек над прямоугольной сеткой в X-Y плоскости. Попробуйте выполнить самостоятельно команду mesh(eye(10)). Для того чтобы нарисовать функцию z=f(x,y) над прямоугольником, необходимо определить вектора xx и yy , которые определят разбиение сторон прямоугольника. С помощью команды meshgrid можно создать матрицу x, каждая строка которой будет совпадать с xx, а размер столбцов которой будет совпадать с длиной вектора yy, и, аналогично, матрицу y, каждый столбец которой совпадает с yy, следующим образом [x,y] = meshgrid(xx,yy);. После этого необходимо определить матрицу z, вычисляя каждый ее элемент как функцию f в соответствующих точках, определяемых матрицами x и y, после чего использовать команду mesh. Вы можете, например, нарисовать поверхность на квадрате [-2,2] х [-2,2] с помощью следующего набора команд Пример 3.5.3-65 >>xx = -2:.1:2; >>yy = xx; >>[x,y] = meshgrid(xx,yy); >>mesh(z) >> Первые три строки можно заменить на [x,y] = meshgrid(-2:.1:2, -2:.1:2); . Более полно с возможностями изображения трехмерных поверхностей можно познакомиться с помощью оперативной помощи (help plot3/mesh/surf). Одним из популярных способов визуализации поверхностей является изображение изолиний. MatLab предоставляет возможность построения изолиний двух типов - двумерных или плоских, фактически являющихся проекциями соответствующих линий постоянного значения на плоскость X-Y, и трехмерных изолиний, нарисованных в какой- либо перспективе. Простейшим способом изобразить изолинии на плоскости -это обратиться к функции contour(Z), где Z -это матрица, содержащая значения исследуемой поверхности на равномерной сетке, т.е. Zij = f(i, j). При таком обращении система MatLab сама выберет число изолиний и значения функции, при которой они будут построены. Если вы хотите сами задать число выводимых изолиний, то необходимо обращение вида contour(Z,n_of_lines), если же необходимо задать сами эти уровни, то это можно сделать с помощью обращения contour(Z,values_of _levels). Если вам необходимо нарисовать одну изолинию с определенным значением функции, то вектор, содержащий уровни, должен иметь два одинаковых элемента, равных этому уровню. Отмеченные выше три способа вызова функции построения изолиний строят их по отношению к номерам строк и столбцов матрицы Z так, что элемент Z(1,1) будет помещаться в левом нижнем углу рисунка. Можно построить изолинии относительно выбранных вами масштабов по оси X и Y . Для этого необходимо передать функции вектора Тема 3.5. Основы работы с математическими пакетами Страница 342 или матрицу координат, определяющие координаты каждого из элементов матрицы Z. Эта передача осуществляется путем одного из следующих обращений: Пример 3.5.3-66 >>contour(x,y,Z); contour(x,y,Z,n_of_lines); >>contour(x,y,Z,values_of_levels); >> В трехмерной графике выполняются представления функции z=z(x,y), отличающиеся способом соединения точек: линия, сечения, сетчатая или сплошная поверхность. plot3(x,y,z) в тех же вариациях, что и plot( ), предполагает задание одномерных и двумерных массивов (строятся точки с координатами x(i,:),y(i,:),z(i,:) для каждого столбца и соединяются прямыми линиями. Если используется [x,y]=meshgrid( ), то строятся сечения. Пример 3.5.3-67 >> t=0:pi/50:10*pi; >>[x,y]=meshgrid([-2:0.1:2],[-2:0.01:2]); >> plot3(sin(t),cos(t),t) % >>z=exp(-x.^2-y.^2); >>plot3(x,y,z) >> Рис. 3.5.3-24 В примере mesh(x,y,z,c), mesh(z,c), mesh(z) определяют задание сетчатой поверхности (массив с определяет цвета узлов поверхности; если x,y не указаны, то x=1:n, y=1:m, где [m,n]=size(z). Пример 3.5.3-68 >> [x,y]=meshgrid(-8:0.5:8); >> t=sqrt(x.^2+y.^2)+0.001; >> z=sin(t)./t; >> mesh(x,y,z) % Рис.9.8 >> meshc(x,y,z) %Рис.9.9 >> Аналогичная функция meshс( ) в дополнение к поверхности строит проекции линий уровня, а meshz( ) делает срез поверхности до нулевого уровня (своеобразный пьедестал). Тема 3.5. Основы работы с математическими пакетами Страница 343 Рис. 3.5.3-25 Функции surf(x,y,z,c), surf(z,c), surf(z) определяют задание сплошной поверхности, отличаясь от mesh( ) системой окраски; аналогичная функция surfс( ) задает проекции линий уровня. Реализация трехмерной графики может сопровождаться множеством вспомогательных команд, например: hidden on/off включает или выключает режим удаления невидимых линий (по умолчанию on); shading faceted / flat / interp устанавливает затенение поверхностей (по умолчанию faceted дает равномерную окраску ячеек с черными гранями, flat - цветами узлов сетки, interp - интерполяцией цветов. Создание графического объекта исходит автоматически при обращении к командам, порождающим объекты Line( ) и Surface( ), но может выполняться и командой axec('<имя свойства>',<значение>, ...) Есть и команды более высокого уровня: axis([xmin xmax ymin ymax]), axis([xmin xmax ymin ymax zmin zmax]), которые устанавливает масштаб по осям; axes off/on выключает (включает) вывод на координатные оси обозначений и маркеров; grid on/off, grid ключает (выключает) или переключает режим нанесения координатной сетки на осях; box on/off, box включает (выключает) или переключает режим рисования контура параллелепипеда, трехмерный объект; zoom on/off Тема 3.5. Основы работы с математическими пакетами Страница 344 включает (выключает) режим интерактивного масштабирования графиков (левая мышь около точки увеличивает масштаб вдвое, правая - уменьшает; удержанием левой мыши можно выделить прямоугольную область для детального просмотра; zoom out восстанавливает исходный график. В отличие от meshс (...) и surfс(...) функция contour рисует только линии уровня соответствующих поверхностей и выступает в многообразии синтаксических форм: contour(X,Y,Z) - для массива Z =Z(X,Y), contour(X,Y,Z,n) - то же с указанием числа линий уровня (по умолчанию 10), contour(X,Y,Z,v) - то же для массива указанных значений ; contour(Z), contour(Z,n), contour(Z,v) - аналогичные функции без указания диапазонов для аргументов и contour(...,LineSpec) - аналогичные функции c указанием типа и цвета линий (см. plot); [C,h]=contour (...) возвращает массив С и вектор дескрипторов, позволяя тем самым продолжить работу с рисунком (давать оцифровку линий, заголовки и др.). Функция contourf(...) закрашивает области между линиями уровня, аналогична contourf(...) с разницей в формате[C,h, cf]=contour (...), где cf определяет матрицу раскраски. Пример 3.5.3-69 Пример 3.5.3-70 >> [x,y]=meshgrid(-8:0.5:8); >> [x,y]=meshgrid(-2:0.25:2); >> t=sqrt(x.^2+y.^2)+0.001; >> t=sqrt(x.^2+y.^2)+0.001; >> z=sin(t).^3./t; >> z=sin(t).^3./t; >> [c,h]=contour(x,y,z,20); >> >> [c,h,cf]=contourf(x,y,z,4); >> Рис. 3.5.3.26 Рис. 3.5.3.27 Рис. 3.5.3.28 Функция contour3(...) по синтаксису полностью аналогична contour(...), но изображает не проекции линий уровня, а рисует их в пространственной интерпретации; так команда [c,h]=contour3(x,y,z,20); дает фигуру (рис. 3.5.3.28). Тема 3.5. Основы работы с математическими пакетами Страница 345 3.5.3.3. Символьные (аналитические) вычисления и алгебраические преобразования 3.5.3.3.1 Введение в символьные вычисления Система MatLab является самой крупной системой компьютерной математики, ориентированной на матричные и численные вычисления. Однако MatLab имеет также и средства аналитических вычислений. Пакет Symbolic Math Toolbox добавил системе MatLab качественно новые возможности, связанные с выполнением символьных вычислений и преобразований, которые были доступны только в системахпринципиально иного класса, относящихся к компьютерной алгебре. Теперь MatLab, с учетом новых средств, становится в полной мере универсальной системой. Последняя реализация системы символьной математики Maple в своем ядре и в расширениях имеет около 3000 функций. Система MatLab с пакетом Symbolic, включающим в себя чуть больше сотни символьных команд и функций, намного уступает Maple по количеству таких команд и функций. Кроме того, есть специальная команда, которая дает доступ к ядру Maple, что заметно расширяет круг используемых функций. С помощью команды help symbolic можно получить перечень входящих в пакет команд и функций. Для получения справки по любой команде или функции можно использовать команду help sym / name.m, где name — это имя соответствующей команды или функции, а name.m — имя m -файла, задающего данную команду или функцию. Пакет Symbolic Math Toolbox включает следующие типы математических вычислений, которые приведены в таблице 3.5.3-10. Таблица 3.5.3-10 Вычисления Дифференцирование, интегрирование, пределы, суммы и произведения, разложение в ряд Тейлора Линейная алгебра 3.5.3.3.2 Создание и работа с символьными переменными, выражениями и функциями Поскольку переменные системы MatLab по умолчанию не определены и традиционно задаются как векторные, матричные, числовые и т. д., то есть не имеющие отношения к символьной математике, для реализации символьных вычислений нужно, прежде всего позаботиться о создании специальных символьных переменных. В простейшем случае их можно определить как строковые переменные, заключив имена в апострофы. Например, Пример 3.5.3-71 >> sin(x)^2 + соs(х)^2 ??? Undefined function or variable 'x'. >> sin('x')^2 + cos('x')^2 ans = 1 >> Тема 3.5. Основы работы с математическими пакетами Страница 346 Мы видим, что система MatLaв «возмутилась» нашей небрежностью и сообщила, что функция или переменная х не определена и ни о каких вычислениях синуса и косинуса речи быть не может. Вместе с тем она подсказала, как надо поступить - заключить имя переменной в апострофы, ибо таким образом система получает информацию о необходимости включить символьный режим вычислений. Поэтому во второй раз получен вполне осмысленный результат - сумма квадратов синуса и косинуса переменной 'х' выдана равной 1. Таким образом для работы с командами ядра Mаple в MatLab необходимо создать новый символьный объект, который фактически является строковой переменной. То есть для проведения аналитических (символьных) операций нужно, чтобы соответствующие переменные были предварительно объявлены с помощью функции sym(): имя_переменной = sym('имя_переменной') Например, Пример 3.5.3-72 >>х = sym ('x') x= x >>a=sym ('alfa') A alfa >> Рассмотрим пример, иллюстрирующий различие между стандартными типами данных MatLab символьных объектов. Пример 3.5.3-73 >>sqrt(2) ans= 1.4142 >>a=sqrt(sym(2)) a= 2^(1/2) >>double(a) ans= 1.4142 >> Пакет Symbolic может работать с числами различных форматов, применяемых в MatLab. Рассмотрим следующий пример Пример 3.5.3-74 >>1/2+3/4 ans= 1.2500 >>sym(1/2+3/4) ans= 5/4 >>pi/2 ans= 1.5708 sym(pi/2) ans= pi/2 >>sin(pi/3) ans= 0.8660 >>sym(sin(pi/3)) ans= sqrt(3/4) >>exp(1) ans= 2.7183 >>sym(exp(1)) ans= 6121026514868074*2^(-51) >> |