Главная страница

scilab учебник. Учебник Scilab. Учебник Для студентов по дисциплин Базовые средства математических пакетов


Скачать 5.73 Mb.
НазваниеУчебник Для студентов по дисциплин Базовые средства математических пакетов
Анкорscilab учебник
Дата05.05.2022
Размер5.73 Mb.
Формат файлаpdf
Имя файлаУчебник Scilab.pdf
ТипУчебник
#513983
страница7 из 21
1   2   3   4   5   6   7   8   9   10   ...   21
mprintf
и каков ее формат?
28) Какие символы преобразования вам известны?
29) Что такое списки, структуры и ячейки в Scilab?
30) Какие типы функций пользователя используются в Scilab?
31) Как описываются и вызываются функции, описанные с использова- нием операторов
deff
и
function
?

73
1.3 Матричные операции создания, доступа,
извлечения и модификации.
Векторизация и индексирование
1.3.1. Представление данных в Scilab
Из предыдущих разделов известно, что математический пакет Scilab по- строен как программная система, ориентированная на работу с матрицами.
Двумерная структура данных способна хранить данные различного типа. Это могут быть числа, символы, логические значения, полиномы, рациональные дроби и другие объекты. Scilab размещает матрицы всех типов данных в
Рабочей области – оперативной памяти компьютера, по столбцам и отобра- жает информацию об активных объектах текущей сессии в окне
Обозревателя переменных.
Из рис. 1.3.1-1, иллюстрирующем матричную структуру представления данных в Scilab, следует, что матрицы могут быть пустыми
[]
; скалярными;
векторными, состоящими из одной строки или одного столбца, называемыми соответственно вектор-строкой или вектор-столбцом; квадратными и пря-
моугольными, а их элементы могут быть объектами практически любых типов данных, допустимых в системе Scilab.
Рис. 1.3.1-1 Представление данных в Scilab
При работе с матрицами в матрично-ориентированных программных си- стемах необходимо понимать, как можно создавать различные типы матриц и осуществлять доступ к ее элементам, и знать правила матричных операций
и функций.

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

с помощью операции квадратные скобки (операция конструирования
-
[]
);

с помощью соответствующих встроенных функций;

путем объединения уже существующих матриц;

с помощью операции двоеточие (:).
Создание векторов и матриц с помощью операции – []
При создании векторов с помощью операции конструирования, квадрат- ные скобки используют совместно с операцией присваивания (
=
). При этом значения элементов векторов, заключенные в
[]
, отделяются друг от друга символами:

точкой с запятой, если нужно создать вектор-столбец;

пробелом или запятой, если нужно создать вектор-строку.
На рис. 1.3.2-1. приведено несколько примеров создания векторов с по- мощью операции
[]
--> // Примеры создания векторов с помощью операции []
-->
--> // Пример1. Создание вектор-строки av из 4-х элементов
--> av = [2 4 -7 5] av =
2. 4. -7. 5.
-->
--> // Пример2. Создание вектор-столбца bv из 3-х элементов
--> bv = [0; 3 ;5] bv =
0.
3.
5.

75
-->
--> // Пример3. Создание вектор-столбца сv из 4-х элементов
--> // и вектор-строки tv из 4-х элементов
--> cv = [4; 6; -3; 2]; length(cv) ans =
4.
--> tc = cv' tc =
4. 6. -3. 2.
Рис. 1.3.2-1. Примеры создания векторов с помощью операции
[]
В
Примере3
для определения длины вектора использовалась функция
length
, а для транспонирования матрицы – апостроф
(
'
).
При создании матриц с помощью операции
[]
точно также, как и при создании векторов, необходимо сначала ввести имя матрицы и знак присваи- вания, а затем в квадратных скобках значения их элементов. При этом значе- ния элементов строк записываются через пробел или запятую, а строки мат- рицы разделяются
точкой
с
запятой, например,
А=[v1;v2;v3],
где
v1, v2, v3
– вектора одинакового размера (рис.1.3.2-2). Если строки мат- рицы слишком длинные
(
Пример3
), то ввод очередной строки матрицы можно перенести в следующую строку экрана, нажав после символа точки с запятой клавишу
В
Примере1
создается матрица
mA1(3,4)
,
а в
Примере2
пустая матрица
0×0
Матрица называется пустой, если она имеет число элементов равное нулю, хотя бы в одном измерении
В
Примере3
показан ввод элементов матрицы в две строки.
--> // Примеры создания матриц –[]
-->
--> // Пример1.Матрица 3х4
--> mA1 = [1 2 3 4;5 6 7 8; 9 10 11 12] mA1 =
1. 2. 3. 4.
5. 6. 7. 8.
9. 10. 11. 12.
-->
--> // Пример2. Матрица 0×0
--> mA2 = [] mA2 =
[]
-->
--> // Пример3. Ввод в две строки
--> B=[1.4444 2.78888 3.565555 -4.36789;
> 6.4444 2.55555 6.32322 -4.8796]
B =
1.4444 2.78888 3.565555 -4.36789

76 6.4444 2.55555 6.32322 -4.8796
Рис. 1.3.2-2. Примеры создания матриц с помощью операции
[]
Создание матриц с помощью встроенных функций
Для создания матриц определенного размера, структуры и содержания в
Scilab можно использовать встроенные функции
ones, zeros, eye, rand, repmat
и некоторые другие, описанные в Приложении 1.3, табл.1.3.2-1.
Перечисленные выше функции имеют следующие назначения:
ones
–со- здает единичную матрицу;
zeros
имеет те же форматы, что и функция
ones
, но создает матрицу, состоящую из нулей;
eye
– создает матрицу с единицами
на главной диагонали;
rand
– создает матрицу чисел двойной точности со слу-
чайными вещественными или комплексными элементами;
repmat
– создает большую матрицу, состоящую из копий другой матрицы, заданной парамет- ром.
Все перечисленные выше функции (кроме функции
repmat
) в зависимо- сти от входных параметров, создают матрицы в соответствии с заданной раз- мерностью (или того же размера), что и уже существующая матрица, указан- ная в параметрах.
Рассмотрим несколько примеров по созданию матриц с использова- нием описанных функций (рис
1.3.2-3).
--> // Создание матриц с помощью функций
-->
--> A = ones(2, 2) // Матрицы, состоящей из 1
A =
1. 1.
1. 1.
-->
--> B = zeros(2, 2)// Матрицы, состоящей из 0
B =
0. 0.
0. 0.
-->
--> C = eye(A) // Матрицы в которой элементы
-->
// главной диагонали равны 1
C =
1. 0.
0. 1.
-->
--> r = rand(A) // Матрицы из случайных чисел r =
0.7560439 0.3303271 0.2211 53811
-->
--> D = repmat(1:3,2,2)
D =
1. 2. 3. 1. 2. 3.
1. 2. 3. 1. 2. 3.

77
-->
--> f = testmatrix('frk',3) // МатрицаFranck f =
3. 2. 1.
2. 2. 1.
0. 1. 1.
Рис. 1.3.2-3. Создание специальных матрицы с помощью встроенных функций
Создание матриц путем объединения существующих
Новую матрицу можно создать и путем объединения уже существующих матриц с помощью операции
[]
и соответствующих функций. В этом случае
операция
[]
используется не только как конструктор матриц, но и как опе-
рация объединения. Например, выражение
c=[mA,mB]
предполагает горизон- тальное сцепление матриц
mA
и
mB,
а
mC=[mA;mB]
их вертикальное объединение
(рис. 1.3.2-4).
--> // Примеры матриц, созданных путем объединения
-->
--> // Пример1
--> ma = ones(2, 4) * 3;
--> mb = rand(3, 4);
--> mc = [ma; mb] mc =
3. 3. 3. 3.
3. 3. 3. 3.
0.2113249 0.3303271 0.8497452 0.068374 0.7560439 0.6653811 0.685731 0.5608486 0.0002211 0.6283918 0.8782165 0.6623569
-->
--> // Пример2
--> md = [5.36, 7.01, [], 9.44] md =
5.36 7.01 9.44 // Пустая матрица не влияет на формированияmd
Рис. 1.2.3-4 Примеры создания новых матриц путем объединения уже существующих
В
Примере1
создается новая матрица
mc
из матриц
ma
и
mb
в вертикальном направлении, а в
Примере2
создается новая матрица
m
d
из матриц
ma
и
mb
в гори- зонтальном направлении.
Кроме операции объединения в Scilab имеется встроенная функция
cat
, которая также позволяет объединить существующие матрицы для формирова- ния новой матрицы. Функция
cat
возвращает матрицу, которая образуется пу- тем сцепления двух или нескольких матриц, перечисленных в параметрах. Эта

78 функция являются альтернативой операции
[]
для объединения матриц. С помощью этой функции можно построить новые матрицы вдоль заданного из- мерения (рис. 1.3.2-5).
--> // Сцепление по строкам и столбцам
-->
--> A = [1 2 3; 6 7 8]; B = [0 8 7; 3 2 1];
--> C = cat(1, A, B) // Сцепление по строкам
C =
1. 2. 3.
6. 7. 8.
0. 8. 7.
3. 2. 1.
--> // Сцепление по столбцам
--> C = cat(2, A, B)
C =
1. 2. 3. 0. 8. 7.
6. 7. 8. 3. 2. 1.
Рис. 1.2.3-5 Сцепление матриц по строкам и столбцам
Если матрицы объединяются по горизонтали, то они должны иметь одинаковое ко-
личество строк. Если матрицы объединяются по вертикали, то матрицы должны
иметь одинаковое количество столбцов.
Создание матриц с помощью операции двоеточие – :
Создание векторов и матриц, элементы которых представляют собой не- которую последовательность значений, можно осуществить с помощью опе- рации двоеточие (:).
Операция двоеточия позволяет генерировать последовательность значе- ний вектора или строки (столбца) матрицы от
n
до
m
(
n:m
). Причем в этой по- следовательности каждое последующее значение отличается от предыдущего на
1
, даже если конечное значение не является точным значением
(
Примеры1-6
, рис. 1.3.2-6).
--> // Создание векторов и матриц с помощью – :
-->
--> // Пример1
--> vA1 = 10:15 vA1 =
10. 11. 12. 13. 14. 15.
-->
--> // Пример2
--> vA2 = -2.5:2.5 vA2 =
-2.5 -1.5 -0.5 0.5 1.5 2.5
-->

79
--> // Пример3
--> vA3 = 1:6.3 vA3 =
1. 2. 3. 4. 5. 6.
-->
--> // Пример4
--> vA4 = 10:5:50 vA4 =
10. 15. 20. 25. 30. 35. 40. 45. 50.
-->
--> // Пример5
--> vA5 = 3:0.2:3.8 vA5 =
3. 3.2 3.4 3.6 3.8
-->
--> // Пример6
--> vA = 9:-1:1 vA6 =
9. 8. 7. 6. 5. 4. 3. 2. 1.
-->
--> // Пример7
--> mA=[10:14;-2:2.5;1:5.3;5:-1:1] mA =
10. 11. 12. 13. 14.
-2. -1. 0. 1. 2.
1. 2. 3. 4. 5.
5. 4. 3. 2. 1.
Рис. 1.3.2-6 Создание векторов и матриц с помощью операции двоеточие
Если шаг изменения последовательности значений отличается от
1
, то необходимо указать значение шага
h
(
n:h:m
). Причем шаг может быть, как по- ложительным, так и отрицательным. В
Примере7
показано создание матрицы, элементы каждой строки которой генерируются в различных диапазонах и с разными шагами. Используя такой способ задания матриц, следует помнить, что в каждой строке матрицы должно быть одинаковое количество элемен- тов. В случае ошибки система выводит сообщение:
«
несовпадающие размеры строки/столбца
».
Динамическое изменение размера матрицы
Матрицы могут динамически изменять свой размер в процессе выполне- ния программы с помощью функций
matrix
и
resize_matrix
. Это позволяет адаптировать размер уже созданной матрицы к тем данным, которые ей пред- стоит хранить (рис. 1.3.2-7).
--> // Динамическое изменение размеров матриц
-->

80
--> А = [1 2 3; 4 5 6] // Исходная матрица
А =
1. 2. 3.
4. 5. 6.
--> А(3, 1) = 7 // Изменение размера матрицы путем дополнения элемента
А =
1. 2. 3.
4. 5. 6.
7. 0. 0.
-->
--> А(:, 3) = [] // Удаление 3-го столбца
А =
1. 2.
4. 5.
7. 0.
-->
-->
// Создание вектора заданного размера из матрицы А
--> В = matrix(А, 1, 6)
В =
1. 4. 7. 2. 5. 0.
-->
--> // Создание матрицы (3х4) по экспоненциальному закону распределения
--> M = grand(3, 4, 'exp', 5) // с математическим ожиданием 5
M =
3.1472369 0.7660456 0.472206 0.4688152 7.350552 4.6290769 4.0357003 3.3184658 0.4401028 13.20044 9.4667509 0.5462453
-->
--> M1 = resize_matrix(M, 2, 2)// Изменение размера матрицы М(3х4) на М1(2х2)
M1 =
3.1472369 0.7660456 7.350552 4.6290769
Рис. 1.3.2-7 Примеры динамического изменения размеров матриц
На рис. 1.3.2-7 создана матрица
А(2,3)
. Далее в эту матрицу добавлен элемент с индексами
(3,1)
. Добавление элемента вызывает в матрице
А
созда- ние третьей строки, где первому элементу в ней будет присвоено значение
7
, а значения остальных элементов данной строки будут установлены в
0
. Таким образом, размер матрицы может увеличиваться динамически.
Далее приведен пример динамического уменьшения размера матрицы, где для удаления третьего столбца матрицы
А
, используется обозначение пу- стой матрицы
[]
Полностью изменить размер матрицы можно с использованием функции
matrix
. Эта функция трансформирует исходную матрицу в матрицу другого размера, копируя элементы столбец за столбцом. В следующем примере мат- рица
А
размером
3х2=6
преобразуется в вектор-строку с
6
элементами.
В последнем примере (рис. 1.3.2-7) с использованием функции
grand
со- здана матрица
М
размером
(3х4)
, элементы которой распределены по экспонен-

81 циальному закону распределения с математическим ожиданием
5
. Размер мат- рицы изменен с использованием функции
resize_matrix.
Таким образом мат- рица
М(3х4)
стала матрицей
М1(2х2)
Функция
size
позволяет проверить размер матрицы и возвращает два параметра
n
и
m
, значения которых равны, соответственно, числу строк и столб- цов в данной матрице (рис. 1.3.2-8).
--> // Динамическое изменение размеров матриц
-->
--> А = [1 2 3; 4 5 6] // Исходная матрица
А =
1. 2. 3.
4. 5. 6.
--> А(3, 1) = 7 // Изменение размера матрицы путем дополнения элемента
А =
1. 2. 3.
4. 5. 6.
7. 0. 0.
-->
--> А(:, 3) = [] // Удаление 3-го столбца
А =
1. 2.
4. 5.
7. 0.
-->
-->
// Создание вектора заданного размера из матрицы А
--> В = matrix(А, 1, 6)
В =
1. 4. 7. 2. 5. 0.
-->
--> // Создание матрицы (3х4) по экспоненциальному закону распределения
--> M = grand(3, 4, 'exp', 5) // с математическим ожиданием 5
M =
3.1472369 0.7660456 0.472206 0.4688152 7.350552 4.6290769 4.0357003 3.3184658 0.4401028 13.20044 9.4667509 0.5462453
-->
--> M1 = resize_matrix(M, 2, 2)// Изменение размера матрицы М(3х4) на М1(2х2)
M1 =
3.1472369 0.7660456 7.350552 4.6290769
Рис. 1.3.2-7 Примеры динамического изменения размеров матриц
--> // Динамическое изменение размеров матриц
-->
--> А = [1 2 3; 4 5 6] // Исходная матрица
А =
1. 2. 3.
4. 5. 6.

82
--> А(3, 1) = 7 // Изменение размера матрицы путем дополнения элемента
А =
1. 2. 3.
4. 5. 6.
7. 0. 0.
-->
--> А(:, 3) = [] // Удаление 3-го столбца
А =
1. 2.
4. 5.
7. 0.
-->
-->
// Создание вектора заданного размера из матрицы А
--> В = matrix(А, 1, 6)
В =
1. 4. 7. 2. 5. 0.
-->
--> // Создание матрицы (3х4) по экспоненциальному закону распределения
--> M = grand(3, 4, 'exp', 5) // с математическим ожиданием 5
M =
3.1472369 0.7660456 0.472206 0.4688152 7.350552 4.6290769 4.0357003 3.3184658 0.4401028 13.20044 9.4667509 0.5462453
-->
--> M1 = resize_matrix(M, 2, 2)// Изменение размера матрицы М(3х4) на М1(2х2)
M1 =
3.1472369 0.7660456 7.350552 4.6290769
Рис. 1.3.2-7 Примеры динамического изменения размеров матриц
Кроме формата
size(А)
, функция
size
может имеет и другой формат:
nm
1   2   3   4   5   6   7   8   9   10   ...   21


написать администратору сайта