Массивы ячеек и доступ к элементам массива ячеек
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

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

Массивы ячеек удобны для структурирования разнородной информации. Для доступа к данным, хранящимся в структуре, необходимо знать названия полей структуры, тогда как для доступа к данным массива ячеек нужны только индексы, указывающие на конкретную ячейку. Самый простой вариант создания ячейки состоит в использовании фигурных скобок {}. Элементы одной строки массива отделяются друг от друга запятой, а столбцы точкой с запятой. Массивы ячеек в этом отношении аналогичны матрицам, но без ограничений на типы данных, находящихся внутри ячеек. В ячейке может находиться структура или массив ячеек. Для удобного просмотра содержимого массивов следует также использовать окно Редактор переменных. Кроме того, тип данных cell удобен для организации массивов данных, когда заранее не известен тип этих данных или известно, что данные разнородны.

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

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

Рассмотрим пример создания вектора ячеек для хранения разных типов данных (рис. 1.3.6-1).

 

--> // Создание векторов ячеек для хранения данных разных типов

--> book = struct('title', 'Онегин', 'author', 'Пушкин', 'year', 2000)

 book =

title: [1x1 string]

author: [1x1 string]

year: [1x1 constant]

-->

--> Vcell(1) = {book}, Vcell(2) = {'Пушкин'}, Vcell(3) = {2000}

 Vcell =

[1x1 struct]

 Vcell =

[1x1 struct]

[1x1 string]

 Vcell =

[1x1 struct ]

[1x1 string ]

[1x1 constant]

-->
--> Vcell{1}

 ans =

title: [1x1 string]

author: [1x1 string]

year: [1x1 constant]

-->

--> Vcell(1)
[1x1 struct]

-->

--> VcellArray = cell(2, 2)

 VcellArray =

 [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 Извлечение несколько элементов из массива ячеек

 

       Рассмотрим еще один пример (рис. 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).

 

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

-->

--> 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?

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?


 

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

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

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

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

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

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

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

 

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

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

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

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

 

 


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

 

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

o полигонального графика;

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

o контурного графика;

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

 


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

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

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

 

h = scf(id);

h = scf(),

 

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

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

 

 

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

 

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

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

Инструменты:Показать/скрыть панель инструментов, Увеличить область, Исходный вид, 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 , то любая графическая функция создает ее автоматически.

 

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

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

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

 

-->// Построение графика функции --> -->x = -1.5 : 0.01 : 1.5; -->y = exp(-x.^2); --> plot(x, y)  

 

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

 

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

Можно построить в одном графическом окне графики нескольких графиков функций. На рис.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).

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

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

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

 

Определитель Стиль линии
- Сплошная линия (по умолчанию)
-- Штриховая линия
: Пунктирная линия
-. Штрихпунктирная линия

 

Рис. 1.4.1-5. Символы, указывающие на тип линии

Определитель Цвет
r Красный
g Зелёный
b Синий
c Голубой
m Пурпурный
y Жёлтый
k Чёрный
w Белый

 

Рис. 1.4.1-6. Символы, указывающие на цвет линии

 

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

Тип_маркера – строка, определяющая тип маркера. Заметьте, что, если указывается маркер без стиля линии, то будут нарисованы только маркеры. Это свойство связано со свойствами объекта Mark_style ( Cтиль_маркера ) и Mark_mode (Режим маркера)(рис.1.4.1-7).

 

Определитель Тип маркера
+ Знак "плюс"
o Кружок
* Звёздочка
. Точка
x Крестик
'square' ('s') Квадрат
'diamond'('d') Ромб
^ Треугольник, указывающий вверх
v Треугольник, указывающий вниз
> Треугольник, указывающий вправо
< Треугольник, указывающий влево
'pentagram' ('p') Пятиконечная звезда (пентаграмма)
  Нет маркера (по умолчанию)

 

Рис. 1.4.1-7. Символы, указывающие тип маркера

 

Рассмотрим пример на (рис.1.4.1-8).

 

-->// Построить штрихпунктирную линию -->// с треугольниками, указывающими --> // вправо, центрованными на каждой --> // точке -->clf(); -->x=1:0.1:10;// Инициализация -->plot(x, sin(x), 'r-.>')  

 

Рис. 1.4.1-8. Пример построения различных линий и маркеров

 

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

 

В общем случае, число аргументовфункцииplotне ограничивается двумя, посколькуфункция в общем видеимеет следующий формат:

 

plot(x1,y1, 'c1', x2,y2,'c2',...),

 

гдеxn , yn - каждая очередная пара векторов предназначена для построения нового графика, а'с n ' –символы, указывающие на цвет и тип точки.  Вэтомслучае происходит построение нескольких графиковв одном графическом окне.

Выполним теперь тот же пример, что и на рис.1.4.1-2, добавив в него при построении каждого графика символы для отображения цвета и типа точки и другой формат функцииplot(рис.1.4.1-9).

 

-->//Использование инструкцийдля установки цвета и типа линии

-->

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

-->y1 = sin(x);// Тип линии -, черный

-->y2 = sin(2*x); // Тип линии -, красный

-->y3 = sin(4*x); // Тип линии – с точкой, синий

-->plot(x, y1,'-k',x, y2, '-r', x,y3,'.-b');

 

 

 

Рис. 1.4.1-9. Использованием инструкций для цвета и символа при
построении в одном графическом окне трех графиков

 

Различие между приведенными выше примерами состоит не только в количестве параметров функцииplot, но еще и в том, что в примере, приведенном на рис.1.4.1-4, формируется матрицаy, содержащая значения функций в виде столбцов, а в примере, приведенном на рис.1.4.1-9, формируются три вектора значений функций(y1,y2,y3).

График, выведенный в графическое окно Scilab, может быть снабжензаголовком, именами осей, текстом, сеткойи другой дополнительной информацией, которая устанавливается вспомогательными функциямиxtitle, xgrid, legendи др.Параметрами этих функций являются значения текстовых строк. Например, формат командыxtitle, добавляющей к графику заголовок и подписи осей, может выглядеть следующим образом:

 

          xtitle('title','xstr','ystr'),

где:'title'– заголовок графика;

'xstr'– подпись осих;

'ystr'– подпись осиy.

 

       Функцияxgridпозволяет отобразить вГрафическом окнекоординатную сетку, а функция legendиспользуется,как правило, когдана одной координатной плоскости надо отобразить графики нескольких функций (как, например, на рис. 1.4.1-9).Очевидно, что в этом случае возникает необходимость использованиясвоих обозначений (цвета и символа) для каждого из графиков. Эти принятые обозначения выводятся на экранфункциейlegend, которая имеет следующие форматы:

 

          legend(leg1, leg2, ..., legn),

   legend(leg1, leg2, ..., legn, pos),

где: leg1– имя первого графика;

   leg2–имя второго графика;

   legn–имяn-го графика;

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

 

Значение аргумента Размещение легенды
-1 В правом верхнем углу над областью графика
0 Выбирается автоматически, чтобы не перекрывались кривые
1 В правом верхнем углу (и по умолчанию)
2 В левом верхнем углу области графика
3 В левом нижнем углу области графика
4 В правом нижнем углу области графика

 

Рис. 1.4.1-10 Значение аргумента pos для указания места

размещения легенды

 

Безусловно, каждый график удобнее выводить с использованием своей функцииplot,однако в этом случае происходит создание нового графического окна. Для того чтобы этого избежать,после первого выведенного графика достаточно выполнить функциюmtlb_hold('on').Эта функция позволяет расположить все выводимыевдальнейшемграфики в одном и том же окне.

Рассмотрим пример, в котором при построении трех графиков в одномГрафическом окнеиспользованыи прокомментированы всеописанные выше инструкции (рис.1.4.1-11).

 

 

--> //Построение нескольких графиков в одном окне,
--> //
дополняя их заголовком и легендой

-->

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

-->y1 = sin(x);

--> y2 = sin(2*x);

--> y 3 = sin (4 * x );

-->

-->plot(x, y1, '-k') //Сплошная кривая черного цвета

-->xgrid()      //Нанесение сетки

-->//Построение всех последующих графиков в одном окне

-->mtlb_hold('on')

-->

-->plot(x, y2, 'b--') //Штриховая линия синего цвета

-->plot(x, y3, 'r.-') //Штрих-пунктирная линия красного цвета

-->xtitle('Построение графиков трех функций', 'x', 'y') // Заголовок

--> legend('y1(x)', 'y2(x)', 'y3(x)', 1) // Легенда

 

 

Рис. 1.4.2-11. Использование инструкцийпри построении графиков

 

При построении нескольких графиков в одном графическом окнес помощьюplotследует помнить, что в заданном диапазоне аргументхсами отображаемыефункциидолжны иметь соизмеримые значения, иначе совместное изображение графиков не позволит оценить результаты расчета, поскольку нарушается их «видимость».  

Функцияplot2dлишена этого недостатка, посколькустроит график по формату, который уже определен пользователем при построении предыдущего графика.

На рис.1.4.1-12 приведен пример использования функцииplot2dдля отображения в одном графическом окне графиков двух функций. Заметим, что совместное изображение графиков, для того, чтобы в окне были достаточно хорошо видны оба графика,потребовало изменения масштаба по оси y.

-->//Построение 1-го графика y = sin ( x )

-->

-->scf(0);

-->deff('y=f(x)','y=sin(x)');

-->x = -10:0.5:10;

-->y = f(x);

-->plot(x, y, '--')

 

 

-->//Добавление графика функции x ^2

-->

-->scf(0);

-->plot2d(x,x.^2)

 

Рис.1.4.1-12 Построение в одном окне двух графиков

 

Добавление к имени функцииplot2d цифр 2, 3или 4, приводит к изменению шаблона графика:

· plot2d2– функция, предназначенная для построения графика в виде ступенчатой функции;

· plot2d3– функция, предназначенная для построения графика в виде вертикальных полосок;

· plot2d4– функция, предназначенная для построения графика с указанием направления.

 

Примеры использования функций plot2d2, plot2d3иplot2d4приведены на рис.1.4.1-13 (а, b и с).

 

-->//Примеры использования функций -->//plot 2 d 2, plot 2 d 3 и plot 2 d 4 --> -->deff('y = f(x)','y = sin(x)'); -->x=[1:0.1:3*%pi]; -->y = f(x); -->     -->// Ступенчатый график -->plot2d2(x,y) --> -->// График с вертикальными -->// полосами -->scf(1); -->plot2d3(x,y) -->     -->//График с указанием направления -->scf(2); -->plot2d4(x,y)    a) Ступенчатый график   b) График в виде вертикальных полос   c) График с указанием направления

 

Рис. 1.4.1-13 Примеры использования функций

a) plot2d2b), plot2d3, c) plot2d4

 

Для построения гистограмм на плоскости в Scilab предназначена функцияhistplot.На рис.1.4.2-14 приведен пример, отображающий данные в 20-ти отрезках, имеющие нормальное распределение.

 

-->// Построения гистограммы --> -->d = rand(1, 10000, 'normal');  -->histplot(20,d);

 

 

Рис. 1.4.1-14 Пример построения гистограммы функциейhistplot

 

Чтобы воспроизвести изображение в двумерном пространстве в виде векторных полей можно использовать функциюchamp,самый простой формат которой имеет следующий вид:

 

с hamp(x,y,fx,fy),

где:   x , y– векторы, определяющие сетку координат;

   fx– матрица, описывающаяx–компоненту каждого поля вектора;

   fy– матрица, описывающаяy–компонентой в точке (x ( i ), y ( i )).

 

-->// Пример использования функцииchamp --> -->champ(-5:5,-5:5, rand(11,11), rand(11,11))  
 
 

 

   Рис. 1.4.1-15. Пример использования функцииchamp

С помощью функциис hampвекторныеполя изображаются в виде стрелок, а их длина указывает интенсивность векторного поля(рис. 1.4.2-15).

Все сведения об используемых в п. 1.4.2 функциях приведены в
Приложении 1.4. табл. 1.4.2-1

 

 

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

Трехмерные поверхностиописываются функцией двух переменныхz(x,у).Для построения одних трехмерных графиков необходимосформироватьдвематрицы, например,x М и y М, а для другихдва вектора, например, XVиYV.

Сформированные в виде матриц данные используются функциями:

· mesh(xM , xM , zM)– для построения сетчатых графиков;

· surf(xM , yM , zM)– для построения графиков со сплошной поверхностями.

 

Сформированные в виде векторов данные используются функциями:

•    contour(xV , xV , zM) – для построения графиков с контурными

линиями;

•    plot3d(xV , yV , zM) – для построения графиков точек,
соединенных отрезкамипрямых и других линий.

 

Рассмотрим примеры использования перечисленных выше функций, для чего сформируем матрицуz M (x,y)с использованием встроенной внутренней функцииf(x,y)(рис. 1.4.1-16).Результаты построения соответствующих графиков приведены на рис. 1.4.3-3 – 1.4.3-5

 

--> // Построение различных видов графиков функции двух переменных --> // zM = xM.^2 + 2 * yM.^2 --> -->// Формирование двух матриц xM и yM --> [xM, yM] = meshgrid(-4 : 4, -4 : 4)  xM = 0. 1. 2. 3. 0. 1. 2. 3. 0. 1. 2. 3. 0. 1. 2. 3. --> yM = -3. -3. -3. -3. -2. -2. -2. -2. -1. -1. -1. -1. 0. 0. 0. 0. --> --> // Формирование матрицы zM -->deff('k = f(x, y)', 'k = x.^2 + 2 * y.^2'); -->zM = f(xM, yM) zM = 48. 41. 36. 33. 32. 33. 36. 41. 48. 34. 27. 22. 19. 18. 19. 22. 27. 34. 24. 17. 12. 9. 8. 9. 12. 17. 24. 18. 11. 6. 3. 2. 3. 6. 11. 18. 16. 9. 4. 1. 0. 1. 4. 9. 16. 18. 11. 6. 3. 2. 3. 6. 11. 18. 24. 17. 12. 9. 8. 9.    12. 17. 24. 34. 27. 22. 19. 18. 19. 22. 27. 34. 48. 41. 36. 33. 32. 33. 36. 41. 48. --> --> // Формирование векторов xV и yV -->x2 = -4 : 4; y2 = -4 : 4; --> --> // Построение двумерных графиков -->scf(1); mesh(xM,yM,zM) // Сетчатыйграфик(окно 1) -->scf(2);plot3d(xV, yV, zM)//График точек, соединенных отрезками -->//прямых(окно 2) -->scf(3);surf(xM,yM,zM) // График сплошной поверхности (окно 3) -->scf(4); contour(xV, yV, zM, 7) // График контурных линий (окно 4)

 

Рис. 1.4.1-16. Построение различных видов графиков

 

Результатом выполнения функции meshявляется построение в окне 1графика поверхности в виде сетки(рис.1.4.1-17).

 

 

Рис. 1.4.1-17 Результат выполнения в окне 1функцииmesh(x M ,y M ,z M )

В результате выполнения функцииplot3d(рис.1.4.3-17) происходит построение в окне2 графика поверхности, где точки соединены отрезками прямой, а соответствующая заливка квадратов делает изображение фигуры объемной(рис. 1.4.3-18). Функцииplot3dимеет формат:

 

plot3d(xV , yV , zM),

гдеx Vи y V–вектора целых чисел, указывающие диапазон изменения параметров функции;z M–матрица действительных чисел значений функции, описывающей поверхность z (x,y ).

 

 

Рис. 1.4.3-18. Результат выполнения в окне 2функцииplot3 d ( xV , yV , zM )

          Функция surfвыполняет построение в окне 3 графикасплошной поверхности(рис. 1.4.3-19) и имеет следующий формат:

 

surf (xM , yM , zM),

гдеx Mи y M–массивы целых чисел, указывающие диапазон изменения параметров функции;z M–матрица действительных чисел значений функции, описывающей поверхность z ( x , y ).

 

Рис. 1.4.1-20 Результат выполненияв окне 3функции surf(x M ,y M ,z M )

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

 

contour (xV , yV , zM , n),

гдеx Vиy V–массивыцелых чисел, указывающие диапазон изменения параметров функции;z M–матрица действительных чисел значений функции, описывающей поверхность z( x, y);n–целочисленныйпараметр, который устанавливает количество контурных линий.

              

          Функцияcontourпозволяет не только построитьв окне 4 график контурных линий, но и нанести в отдельных точках контурных линий значения функции (рис. 1.4.1-21). В этом примере получен график из 7-ми контурных линий, на каждой из которых отмечены значения функции.

 

 

Рис. 1.4.1-21 Результат выполнения в окне 4 функцииcontour( xV , yV , zM ,7)

          С использованием функцииmtlb_hold('on')(эта функция уже была применена раньше при построении графиков функции от одной переменной) в одном графическом окне можно построить несколько графиков функций от двух переменных. Например, построим в одном окне графики двух функций (рис.1.4.1-22).

 

 

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

 

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

 

 

Рис.1.4.1-23. Построения в одном окне 4-х графиков

 

На рис.1.4.1-23 приведены командные строки, позволяющие в одном окне произвести построение четырех графиков. Для этого графическое окно разбито на четыре области (две строкиn=2и два столбцаm=2). Последний параметр (k)указывает номер области построения текущего графика. Нумерация областей осуществляется по строкам, начиная с 1. Результат выполнения функций subplotприведен на рис. 1.4.3-24.

 

 

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

 

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

polarplot(phi,ro),

где:phi–диапазон значений угла;ro–функция от полярного угла.

 

На рис.1.4.1-25 приведен пример построения в полярных координатах графика функцииro=4*cos(3*fi), где fi(полярный угол) изменяется на интервале[0;2π]с шагом0.01.

 

--> // РИС14125: Построение графика в полярной системе координат

-->

--> fi=0:0.01:2*%pi;

-->polarplot(0:0.01:2*%pi,4*cos(3*fi))

   

 

Рис.1.4.1-25 Построение графика функции в полярнойсистеме координат

 

-->// РИС14126: -->// остроение 2D- гистограммы --> -->hist3d(10*rand(10,10));  

 

Рис.1.4.1-26 Построение 2D-гистограммы в виде 2D-графика

с помощью функцииhist3d

 

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

ВПриложении 1.4, табл. 1.4.1-2 представлены описания всех графических функций, используемых в этом разделе. Более полную справочную информацию о графических средствах и функциях Scilabможно получить на сайтеscilab.org[13].

Глобальное свойство графических объектов

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

 

'ИмяСвойства1',ЗначениеСвойства1,…,'ИмяСвойстваn',ЗначениеСвойстваn,

 

где:ИмяСвойстваn должно быть строкой, не чувствительной к регистру и определяющей то свойство, которое необходимо установить, а
ЗначениеСвойстваn может быть вещественным, целочисленным или строкой (скаляром или матрицей) в зависимости от типа используемого свойства. Например, чтобы определить красную (цвет) штрихпунктирную линию с длинными штрихами (стиль линии) с маркерами в виде ромба (маркер), последовательность должна быть следующей:

 

'Color','red', 'LineStyle','-.', 'Marker','diamond'.

 

В Приложении 1.4.1, табл.1.4.1-3 приведен полный список
ИмёнСвойстви их возможные значения – ЗначенияСвойства, которые можно установить при использовании plot или surf .

 

Иногда можно использовать два ИмениСвойства, соответствующих одному свойству: первое из них используется по умолчанию в Matlab, а второе имя по умолчанию используется в Scilab (например, Color или Foreground для линии).

 

На рис. 1.4.1-27 рассмотрен пример, в котором для построения двух графиков функций в одном графическом окне учтены и прокомментированы все описанные выше свойства графических объектов. Обратите внимание, что перед построением графика проведена очистка окнаОбозревателя переменных, Командного окнаиГрафических окон, а установка свойств графика (тип и ширина линии, тип точки (маркер) размер шрифта и др.) выполнена с использованием параметров функции plot, что является альтернативой средств графического редактора.  

 

--> exec( "РИС14127. sce " , 0)

Рис.1.4.1-27. Построение и отображение графиков двух функций
с использованием графических средств Scilab

Примеры построения содержательных графиков

Графические средства Scilabиспользуются для изучения многих дисциплин [14]. Приведем несколько примеров, иллюстрирующих построение графиков с использованием описанных выше функций, при изучении дисциплины «Теория электрических цепей» [15, 16, 17].

              





















Дата: 2019-11-01, просмотров: 349.