Добавил:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

1-2 Моделирование / Matlab. Практический подход. Самоучитель

.pdf
Скачиваний:
762
Добавлен:
31.01.2021
Размер:
12.72 Mб
Скачать

Глава 9. Символьные вычисления

Рис. 9.52. Просмотр анимации

рис. 9.52. В результате анимация запускается, а пиктограмма кнопки с треугольника меняется на квадрат. Повторный щелчок на этой кнопке приведет к остановке анимации. Некоторые анимационные кадры (по умолчанию всего их 50) представлены в табл. 9.1.

Практически так же просто создается трехмерная анимация. Чтобы картинка была трехмерной, в аргументах функции plot() указываем инструкцию #3D, а чтобы это была анимация, а не статическое изображение, добавляем дополнительный аргумент, который определяет диапазон изменения переменной, отождествляющей время. Пример создания трехмерной анимации приведен на рис. 9.53.

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

Как и в предыдущем случае, командой f:=x->exp(-x^2/2)/ sqrt(2*PI) создаем функцию Гауссового типа. После этого командой F:=(x,y,t)->(f(x-t)+f(x+t))*(f(y-t)+f(y+t))/4 определяем базовую функцию, на основе которой будем строить трехмерную анимацию. Непосредственно анимация создается с помощью команды plot(F(x,y,t),x=-4..4,y=-4..4,Mesh=[80,80],t=0..2,#3D).

Первым аргументом функции plot() передается функция от трех аргу-

411

Самоучитель Matlab

Табл. 9.1. Кадры двумерной анима

Номер

Кадр

Номер

Кадр

кадра

 

кадра

 

 

 

 

 

1

 

12

 

5

16

7

25

8

40

9

50

412

Глава 9. Символьные вычисления

Рис. 9.53. Трехмерная анимация

ментов F(x,y,t). Также указан диапазон изменения пространственных переменных x и y, а также переменной t, которую отождествляем со временем. Инструкция #3D свидетельствует о том, что создается трехмерный график. Все эти аргументы вполне ожидаемы. Несколько неожиданным может показаться аргумент-опция Mesh=[80,80]. Она определяет количество узловых точек по каждой из координатных осей, на основе которых строится график функции (по умолчанию значение опции Mesh равно [50,40]). Эта опция не является обязательной. Мы ее использовали для того, чтобы график выглядел достаточно плавным. Если оставить для этой опции настройки по умолчанию, поверхность будет немного "угловатой" – особенно в районе пика.

413

Самоучитель Matlab

Табл. 9.2. Кадры трехмерной анимации

Номер

Кадр

Номер

Кадр

кадра

 

кадра

 

 

 

 

 

1

 

19

 

10

20

13

23

15

28

17

45

414

Глава 9. Символьные вычисления

Несколько замечаний о создании графики

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

К/ф "Приключения Шерлока Холмса и доктора Ватсона. Король шантажа"

В общем, для минимального использования возможностей среды MuPAD при создании графики и анимации достаточно функции plot(). Тем не менее, это даже не верхняя часть айсберга от тех возможностей в области графики и анимации, а намного меньше. Все описать здесь в силу объективных причин не получится. Выше мы рассмотрели только наиболее общие возможности среды MuPAD в плане создания графики и анимации. Здесь мы несколько расширим свои познания в этой области. Хотя скорее материал этого раздела можно рассматривать как напутственные пожелания.

На заметку

Значительная часть возможностей среды MuPAD реализована через библиотеки. Для того чтобы использовать функцию, описанную в той или иной библиотеке, перед именем функции следует еще указать и имя библиотеки. Имя библиотеки и имя функции разделяются оператором расширения контекста :: (два двоеточия). Другими словами, если функция описана в библиотеке, то вызывать функцию следует инструкцией вида библиотека::функция. Исключением является стандартная библиотека, функции из которой мы рассматривали до этого, и которые вызываются напрямую, без указания имени библиотеки. Обычно под библиотечными подразумевают те функции, что описаны не в стандартной библиотеке. Кроме того, библиотечную функцию можно загрузить в глобальное пространство имен с помощью инструкции вида use(библиотека,функция). После этого функцию можно вызывать без указания библиотеки. Если из библиотеки загружается несколько функций, они перечисляются через запятую. Чтобы экспортировать (загрузить в глобальное пространство имен) всю библиотеку, используют инструкцию вида use(библиотека). Значительная часть графических возможностей среды MuPAD реализована через функции библиотеки plot. Читателю, который планирует систематически использовать в своей работе среду MuPAD, имеет смысл обратить внимание на эту библиотеку.

Конечно же, не следует игнорировать опционные параметры, которые позволяют задавать основные свойства создаваемых графических объектов. Такие дополнительные опционные параметры могут задаваться непосредственно в функции plot(). Есть и другие функции для работы с графикой. Например, среди графических функций стандартной библиотеки имеется функция plotfunc2d(), предназначенная для создания двумерных графиков функций от одного переменного. Аналогичная ей функция

415

Самоучитель Matlab

plotfunc3d() предназначена для создания трехмерной графики. Примеры вызова этих функций приведены в документе на рис. 9.54 и рис. 9.55.

Рис. 9.54. Создание графики с помощью функции plotfunc2d()

Рис. 9.55. Создание графики с помощью функции plotfunc3d()

Многие опции для функций plotfunc2d() и plotfunc3d() одинаковы. Например, опцией GridVisible отображается координатная сетка (значение опции TRUE), а вспомогательная сетка отображается с помощью опции SubgridVisible. Опция Header позволяет задать заголовок графика.

416

Глава 9. Символьные вычисления

Тип шрифта для заголовка задается опцией HeaderFont. Существуют также опции для определения цвета кривых (опция Colors), толщины линий (опция LineWidth), подписей координатных осей (опция AxesTitles), шрифта для отображения легенды (опция LegendFont), цвета фона и координатных осей (опция BackgroundColor и AxesLineColor соответственно) и многих других.

На заметку

Значения "цветовых" опций могут задаваться в формате RGB::цвет. В качестве цвета используется одно из ключевых слов (Red, Green, Blue и так далее).

Более полное описание графических возможностей среды MuPAD могло бы стать темой отдельной книги. Наша книга не об этом. Единственное, что настоятельно хочется порекомендовать читателю в завершение, – не игнорировать уникальные возможности, которые предоставляются пользователю средой MuPAD, в том числе и в области создания графики и анимации.

417

Приложение А Файловый ввод/вывод

Во всяком случае, другого у нас нет.

К/ф "Клуб самоубийц, или Приключения титулованной особы"

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

Существует несколько базовых операций, которые обычно приходится выполнять в процессе работы с файлами. Им соответствует несколько функций, которые предназначены для выполнения соответствующих действий. Одно из самых простых – открытие из командного окна файла внешнего приложения. Открыть внешний документ можно с помощью функции open(). Аргументом функции указывается полное имя файла, который открывается. Какое приложение будет использовано для открытия файла, определяется по его расширению. Например, чтобы открыть файл MyData. pdf, который находится в каталоге C:\Documents\Data, используем команду open('C:\Documents\Data\MyData.pdf'). Открываться файл будет приложением, ассоциированным с pdf-расширением (скорее всего, это Adobe Acrobat). Для загрузки файла в рабочее пространство приложения Matlab используют функцию load(). Аргументом функции указывается имя загружаемого файла. Это может быть как mat-файл, так и, например, txt-файл. Рассмотрим простой пример. На рис. А.1 представлен текстовый документ, содержащий числовые значения.

Рис. А.1. Текстовый документ с числовыми значениями

Файл MyMatrix.txt содержит числовые значения, формирующие матрицу размерами 3×3. Мы хотим считать числовые значения из этого файла и записать результат в некоторую переменную в рабочем документе Matlab. Для этого в командном окне используем команду a=load('C:\ Documents\Data\MyMatrix.txt') (рис. А.2).

418

Приложение А. Файловый ввод/вывод

Рис. А.2. Результат загрузки файла – переменной присвоено значение

Аргументом функции load() указано полное имя к файлу 'C:\ Documents\Data\MyMatrix.txt' (предполагается, что файл MyMatrix.txt находится в каталоге C:\Documents\Data). Результат вызова функции load() присваивается в качестве значения переменной a. В результате эта переменная получает в качестве значения матрицу, составленную из числовых значений из файла MyMatrix.txt.

Эксперимент можно продолжить. Для этого новый рабочий документ сохраняем в качестве рабочего пространства как mat-файл (рис. А.3).

Рис. А.3. Сохранение рабочего документа Matlab

419

Самоучитель Matlab

В документе командами A=[1 2 3;4 5 6;7 8 9] и B=rand(5,3) создается две матрицы (одна из целых чисел, а вторая – из случайных). С помощью команды File Save Workspace As сохраняем файл рабочего пространства с именем NewData.mat в каталоге C:\Documents\Data. После этого в командном окне с помощью команды clear удаляем из рабочего пространства созданные переменные и затем командой clc очищаем командное окно. Далее командой load('C:\Documents\Data\NewData.mat') выполняем загрузку файла. После загрузки файла проверяем значения переменных A и B (рис. А.4).

Рис. А.4. Результат загрузки mat-файла

Несложно заметить, что переменные определены и имеют те же значения, которые они получили при создании.

На заметку

При желании можно загрузить не весь файл, а только отдельные переменные, определенные в этом файле. Например, командой load('C:\Documents\ Data\NewData.mat','B') из файла NewData.mat будет загружена переменная B.

Полезной в работе может стать функция save(). Эта функция позволяет сохранять данные вычислений в файл непосредственно из командного окна. Обратимся к примеру в документе на рис. А.5.

В командном окне инструкциями x=0:0.5:10, y=cos(2*pi*x)./(1+x)

и z=exp(-x).*sin(2*pi*x) создаются массивы данных, и затем эти спи-

420