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

Учебник Математические пакеты

.pdf
Скачиваний:
43
Добавлен:
23.12.2022
Размер:
6.39 Mб
Скачать

[0x0 constant] [0x0 constant] [0x0 constant] [0x0 constant]

Рис. 1.3.6-1 Создание векторов ячеек для хранения данных разных типов На рис. 1.3.6-1 задан вектор ячеек Vcell с тремя элементами. Первый эле-

мент соответствует структуре, второй – строке, а третий – числу. В этом и заключается особенность организации данных с помощью ячеек: у каждого элемента свой тип данных.

Для обращения к содержимому той или иной ячейки используются фигурные скобки, внутри которых ставится индекс элемента, с которым предполагается работать. Если же используются круглые скобки, то будет возвращена структура данных вместо отдельных значений.

Для того чтобы задать вектор или матрицу ячеек с пустыми (неопределенными) значениями, используется функция cell(VcellArray=cell(2,2)). Данную инициализацию целесообразно выполнять, когда нужно определить большой вектор или матрицу ячеек и в цикле задавать их значения. В этом случае Scilab сразу создает массивы нужных размеров, в результате чего повышается скорость выполнения программ.

На рис. 1.3.6-2 показано, как извлечь несколько элементов из массива ячеек – список, разделенный запятыми, учитывая, что массив ячеек 4×6.

--> // Извлечение несколько элементов из массива ячеек

--> C = cell(4, 6); --> for k = 1:24

>C{k} = k * 2;

>end

-->

C=

[2][10] [18] [26] [34] [42]

[4][12] [20] [28] [36] [44]

[6][14] [22] [30] [38] [46]

[8][16] [24] [32] [40] [48]

--> --> С{:, 5}

ans = 34 ans = 36 ans = 38 ans = 40

--> // Это то же самое, что вводить С{1,5}, C{2,5}, С{3,5}, C{4,5}

Рис. 1.3.6-2 Извлечение несколько элементов из массива ячеек

101

Рассмотрим еще один пример (рис. 1.3.6-3), в котором показано, как считывать и записывать данные массива ячеек. Для этого создадим массив ячеек 2×3 текстовых и числовых данных.

--> // Считывание и запись данных в массив ячеек и из массива ячеек

-->

 

 

 

 

 

 

--> C = {'one', 'two', 'three'; 1, 2, 3}

 

C

=

 

 

 

 

 

 

 

[1x1 string

]

[1x1 string

]

[1x1 string

]

 

[1x1 constant]

[1x1 constant]

[1x1 constant]

-->

 

 

 

 

 

 

--> upLeft = C(1:2, 1:2)

 

 

 

upLeft

=

 

 

 

 

 

 

[1x1 string

]

[1x1 string

]

 

 

[1x1 constant]

 

[1x1 constant]

 

 

 

-->

 

 

 

 

 

 

--> // Замена значений элементам первой строки

 

--> C(1,1:3) = {'first','second','third'}

 

C

=

 

 

 

 

 

 

 

[1x1 string

]

[1x1 string

]

[1x1 string

]

 

[1x1 constant]

[1x1 constant]

[1x1 constant]

--> nicC = C(2,1:3)

 

 

 

nicC

=

 

 

 

 

 

 

[1x1 constant]

[1x1 constant]

[1x1 constant]

-->

 

 

 

 

 

 

--> // Преобразование массива ячеек в вектор

 

--> nicV = cell2mat(nicC)

 

 

 

1.2. 3.

Рис. 1.3.6-3 Считывание и запись данных в массив ячеек и из массива ячеек

Существует два способа ссылки на элементы массива ячеек. Можно заключить индексы в круглые скобки () и обращаться к массиву ячеек, например, для того, чтобы определить подмножество массива. Также можно заключить индексы в фигурные скобки {}, и сослаться на элементы данных (текст, числа или другие данные) в отдельных ячейках.

Индексы массива ячеек в круглых скобках относятся к наборам ячеек. Например, круглые скобки используются, чтобы создать массив ячейки 2×2, который является подмножеством C.

Обновление набора ячеек выполняется их заменой с тем же числом ячеек. Например, чтобы заменить ячейки в первой строке C используется эквивалент массив ячеек размера (1×3). Чтобы заменить содержимое ячейки, аналогично можно индексировать и с использованием фигурных скобок

(рис. 1.3.6-4).

--> // Индексирование с использованием фигурных скобок

102

-->

--> last = C{2, 3} last =

3.

--> C{2, 3} = 300; --> C{2, 3}

ans = 300.

--> las = C{1:2, 1:2} las =

las(1)

first

las(2)

1.

las(3) second

las(4)

2.

--> las(1) ans = first

Рис. 1.3.6-4 Индексирование с использованием фигурных скобок

Если элементы в массиве содержат числовые данные, можно преобразовать ячейки в числовом массиве, используя функцию cell2mat.

Доступ к содержимому ячеек (число, текст или другие данные в ячейках) производится путем индексации с использованием фигурных скобок. Например, для доступа к содержимому последней ячейки C, используйте фигурные скобки.

Можно получить доступ к содержимому нескольких ячеек путем индексации с фигурными скобками.

1.3.7.Контрольные вопросы

1)Какие способы создания векторов и матриц реализованы в Scilab?

2)Каким образом создается вектор с постоянным шагом?

3)Можно ли создать матрицу, элементы строки которой изменяются с постоянным шагом?

4)С какого номера начинается индексация вектора?

5)Какая функция позволяет определить длину вектора?

6)Какие функции предназначены для определения числа строк, числа столбцов матрицы и общего количества ее элементов?

7)Что такое «пустая матрица» и как ее создать?

8)Какую матрицу создает операция ones?

103

9)Каким образом в Scilab могут быть объединены две матрицы?

10)С использованием каких функций матрицы могут динамически изменять свой размер в процессе выполнения программы?

11)Для чего предназначены в Scilab функции matrix и resize_matrix?

12)Назначение и формат функции cat?

13)Каким образом удалить из матрицы определенный столбец?

14)Что такое векторизация?

15)Что такое стандартное индексирование векторов и матриц?

16)Что такое векторное индексирование матриц?

17)Что такое логическое индексирование матриц?

18)Что такое поэлементные действия (операции с точкой) и где они используются?

19)Каким образом можно транспонировать вектор или матрицу?

20)Требуется ли при работе с векторами и матрицами предварительное объявление их размера?

21)Какой символ используются для разделения элементов матрицы в строке, а какой для разделения ее столбцов?

22)Какие команды предназначены для заполнения матрицы случайными числами, распределенными по равномерному или нормальному закону распределения?

23)Какой командой можно осуществить выбор минимального и максимального значения элемента матрицы.

24)В каких случаях матрицы могут динамически изменять свой размер?

25)Как создается массив ячеек?

26)Что представляют собой операции доступа извлечения и модификации матриц?

27)Что такое индексирование и векторизация?

28)Что такое логическая индексация?

29)Когда можно использовать функцию find?

104

1.4. Средства визуализация в системе Scilab

Пользователь Scilab имеет целый ряд возможностей для визуализации данных:

высокоуровневые графические функции (plot, surf, mesh и многие другие);

интерактивную среду, компоненты которой позволяет изменять свойства элементов графика;

специализированные функции и средства для графического отображения характеристик исследуемых объектов и результатов вычислений;

низкоуровневые средства построения графиков и простейших геометрических фигур;

низкоуровневые средства построения графических интеофейсов пользователей.

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

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

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

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

Впоследующих параграфах рассматриваются высокоуровневые и низкоуровневые графические средства, а также средства для создания графических интерфейсов пользователей (GUI).

105

1.4.1. Высокоуровневые графические средства. Средства отображение графиков функций

и простейших геометрических фигур

Основные понятия высокоуровневой графики

Графическое изображение в высокоуровневые графики – это чаще всего графическое представление графика функций или графическое изображение простейших геометрических фигур.

В среде Scilab все графики строятся по точкам, при этом каждые две соседние точки соединяются друг с другом отрезком. Чем меньше расстояние между точками, тем меньше искажение графика за счет замены его реального образа кусочно-линейной функцией. Поэтому главным ограничивающим фактором в желании получить как можно более гладкое представление графического изображения, является то, что координаты точек нужно хранить в оперативной памяти.

Внешний вид графика определяют следующие факторы:

Вид математической функции в системе координат:

o одной переменной – графики функции с одной переменной в заданной системе координат:

в прямоугольной системе координат;

в полярной системе координат;

в комплексной плоскости (например, годографы);

в векторной плоскости;

oдвух переменных – графики функции с двумя переменными в заданной системе координат:

в пространственной прямоугольной системе координат;

в сферической системе координат;

в цилиндрической системе координат;

в векторном пространстве.

Способ представления в виде:

oточечного графика;

oлинейного графика (с учетом всевозможных представлений линии);

o полигонального графика; o градиентного графика; o контурного графика;

o гистограммы.

106

Графические окна

Графические изображения (объекты) в Scilab отображаются в специальных Графических окнах, причем в одном графическом окне (в одной системе координат) могут быть построены несколько графических объектов, а на экране дисплея могут быть размещены одновременно несколько графических окон, причем разных типов.

Графические окна имеют свою нумерацию. Чтобы создать новое графическое окно с конкретным номером достаточно выполнить функцию scf:

h = scf(id); h = scf(),

где: id необязательный целочисленный параметр, задающий номер окна, а h дескриптор создаваемого окна, который связан с набором свойств этого окна и их значениями.

Если параметр, указывающий номер создаваемого окна, отсутствует, то система присваивает окну последний незанятый порядковый номер, начиная с нуля. В ответ функция scf возвращает дескриптор окна, а также набор его свойств, причем большая часть значений свойств заранее предопределена (т.е. заданы по умолчанию), кроме того первое обращение к одной из графических команд автоматически вызывает появление графического окна, которому присваивается номер ноль (id=0) рис.1.4.1-1).

Рис. 1.4.1-1 Графическое окно с номером 0

Элементы меню, расположенного в верхней части графического окна, предоставляют большой набор команд, предназначенных для отображения и оформления графиков, позволяющих в интерактивном режиме и без использования программного кода придать графику желаемый вид, а кнопки панели дублируют наиболее часто используемые пункты меню, ускоряя тем самым процесс оформления графика. Каждый элемент меню содержит набор команд, соответствующих его названию:

107

Файл: Новое графическое окно, Загрузить…, Сохранить…, Экспортировать, Ко-

пировать в буфер, Параметры страницы, Печать, Закрыть;

Инструменты: Показать/скрыть панель инструментов, Увеличить область, Исходный вид, 2D/3D вращение;

Правка: Установить текущим графическим окном, Очистить графическое окно…, Свойства графического окна…, Свойства осей, Разрешить выбор объектов, Включить/выключить управление подсказками данных, Начать/остановить изменение данных кривых;

Справка: Содержание, О Scilab.

Наиболее часто используемые команды вынесены на панель инструментов в виде кнопок.

Переход между Командным окном и Графическим окном осуществля-

ется с помощью комбинации клавиш <Alt+Tab> или с помощью мыши. Закрыть графическое окно можно традиционным способом – щелчком

по крестику, расположенному в правом верхнем углу окна, или выполнением команды xdel(id), в скобках которой указывается id – номер закрываемого графического окна.

Перечень всех открытых графических окон можно посмотреть, выполнив команду winsid, которая выводит в следующей строке номера открытых графических окон (рис.1.4.1-2).

--> // Примеры использования команд scf, xdel и winsid

--> scf(2); scf(3); scf(5);//Открытие графических окон 2,3,5

--> winsid//Вывод списка открытых графических окон ans =

2. 3. 5.

-->

--> xdel(3);//Удаление графического окна с номером 3

--> winsid ans =

2. 5. --> scf();

Рис. 1.4.1-2 Примеры использования команд scf, xdel и winsid

После каждого вызова функции scf появляется графическое окно с соответствующем номером, а в Командном окне отображаются свойства созданного окна. Причем основная область графического окна называется рабочей областью, и на ней можно отображать любые графические объекты.

Следует отметить, что если за время сеанса не было создано ни одного графического окна, с помощью функции scf, то любая графическая функция создает ее автоматически.

108

Построение графиков функций от одной переменной

Начнем знакомство с графической системой Scilab построением графика функции одной переменной. Самым простым способом построения графика функции y=f(x) является формирование двух векторов одинаковой длины (вектора значений аргументов x и вектора соответствующих им значений функции у) с последующим выполнением функции plot(x,y). Функция plot(x,y)открывает графическое окно и отображает в нем график функции

y(x).

 

 

Рассмотрим, например, построение графика функции

y

 

 

 

[-1.5;1.5]. В результате выполнения функции plot(x,y) Графическое окно 0 с графиком функции (рис.1.4.1-3).

e

 

 

x

2

на отрезке

 

появляется

--> // Построение графика функции

-->

--> x = -1.5 : 0.01 : 1.5; --> y = exp(-x.^2);

--> plot(x, y)

Рис. 1.4.1-3. Построение графика функции y e x2

Обратите внимание, что элемент меню графического окна File имеет команду Копировать в буфер обмена, которая позволяет копировать окно в буфер обмена, и, которое впоследствии можно вставить в Word или другой текстовый редактор.

109

Можно построить в одном графическом окне графики нескольких графиков функций. На рис.1.4.1-4 приведен пример построения в одном окне трех графиков.

--> // Построение в одном окне графиков 3-х функций

-->

--> x = 0:0.01:%pi;

--> y = [sin(x)', sin(2*x)', sin(4*x)']; --> plot(x', y)

Рис. 1.4.1-4. Построение в одном графическом окне графиков 3-х функций

При построении нескольких графиков в одном окне каждый график автоматически отмечается своим цветом (в нашем случае красным, синим и зеленым). Однако при печати в черно-белом варианте этот эффект теряется. В Scilab при выводе графика можно заменить принятый по умолчанию цвет и тип точек, с помощью которых строится каждый график (рис. 1.4.1-5).

Для быстрой настройки вида линий на графике можно использовать свойство Line_style. Line_style – это необязательный аргумент, который может быть использован внутри команды построения графика plot для настройки вида каждой новой линии. Он должен быть указан в виде соединённых строк, содержащих информацию о цвете, стиле линий или маркеров. Он очень полезен для быстрого определения этих основных свойств линий.

Например, чтобы определить красную штрихпунктирную линию с ромбовидными маркерами, строка должна быть в виде 'r-.diam'. Причем, полное написание значения каждого свойства не обязательно, однако строка, которая является связкой (в любом порядке) этих трёх типов свойств, должна оставаться однозначной. Кроме того, определение строки не чувствительно к регистру.

Элементы Line_style, которые можно использовать в plot для задания типа и цвета линий показаны на рис.1.4.1-5 и рис.1.4.1-6 соответственно.

110