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

Базовые средства матпакета Scilab

.pdf
Скачиваний:
55
Добавлен:
04.04.2023
Размер:
6.29 Mб
Скачать

В каких же случаях для описания функции пользователя целесообразно использовать deff, а в каких function?

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

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

Рассмотрим несколько простейших задач по ТЭЦ.

Заданы: катушка с резистивным сопротивлением R=10 Ом, индуктивностью L=0.05 Гн подключена к источнику ЭДС E=120 В с частотой f=50 Гц. Определить комплексный ток Iв данной последовательной RL-цепи (рис. 1.2.6-3).

//Определение комплексного тока в

//последовательной RL-цепи

//Исходные данные

R=10;// Сопротивление в Ом

L=0.05; // Индуктивность в Гн

E=120;// ЭДС в В

F=50;// Частота, Гц

W=2*%pi*f;// Угловая частота в рад/с XL=w*L;// Индуктивное сопротивление в Ом Z=R+%i*XL;// Комплексная сопротивление в Ом I=E./Z; // ТоК в RL=цепи в А

Imod=abs(I);// Модуль тока в А

// Фазатокавградус arg_I=atan(imag(I),real(I))*180/%pi;

51

Рис. 1.2.6-3.

mprintf(

I=3.4608053 - 5.4362202i Imod=6.4443513 arg_I=-57.518363

Рис. 1.2.6-3. Определение комплексного токапоследовательнойRL-цепи

Резистивное сопротивление R=10 Ом и катушка с индуктивностью L=0,05 Гн параллельно подключены к источнику ЭДС E=120 В с частотой f=50 Гц. Определение комплексного токав RL-цепи (рис. 1.2.6-4).

//Определение комплексного тока в

//параллельнойRL-цепи

//Исходные данные

R=10; // Сопротивление, Ом

L=0.05; // Индуктивность, Гн

E=120; // ЭДС, В f=50; // Частота, Гц

w=2*%pi*f; // Угловая частота, рад/с XL=w*L;// Индуктивное сопротивление, Ом BL=1/XL; // Проводимость катушки, См G=1/R; // Проводимость резистора, См

Y=G-%i*BL; // Общая комплексная проводимость, См I=E*Y//То в RL=цепи, А

Imod=abs(I)// Модультока, А // Фазатока, градус

arg_I=atan(imag(I),real(I))*180/%pi mprintf(

I =12. -7.6394373i Imod = 14.225365 arg_I=-32.481637

Рис. 1.2.6-4. Определение комплексного токав параллельнойRL-цепи

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

1)Какие объекты Scilab Вам известны?

2)Как называются символы ., : ; () [] {} // % $ ' " ~= и в каково их назначение в Scilab?

3)Что означает в Scilab «определить данные»?

4)Какой символ служит для переноса части командной строки на следующую строку?

5)Для чего используются системные встроенные функции: whos, who,

who_user, typeof, typeи clear?

6)Как в Scilab представлены комплексные числа?

7)Какие системные константы Вам известны?

52

8)Из каких элементов строятся числовые арифметические выражения?

9)Каков приоритет действий в арифметических выражениях?

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

11)Какие типы переменных используются в Scilab?

12)Чем характеризуются матрицы?

13)Как создать вектор-строку?

14)Как создать вектор-столбец?

15)Какая функция служит для определения длины вектора?

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

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

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

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

20)Формат команд выбора минимального и максимального значения элемента матрицы.

21)Как записать выражение для решения матричных уравнений?

22)Какие поэлементные матричные операции Вам известны?

23)Как происходит преобразование данных к арифметическому типу?

24)Из каких элементов состоят логические выражения?

25)Как представлены в Scilab строки символов?

26)Что такое форматированный вывод данных?

27)Для чего используется функция mprintf и каков ее формат?

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

29)Что такое списки, структуры и ячейки в Scilab?

30)Какие типы функций пользователя используются в Scilab?

31)Как описываются и вызываются функции, описанные с использованием операторов deffиfunction?

53

1.3 Матричные операции создания, доступа, извлечения и модификации.

Векторизация и индексирование

1.3.1. Представление данных в Scilab

Из предыдущих разделов известно, что математический пакет Scilab построен как программная система, ориентированная на работу с матрицами. Двумерная структура данных способна хранить данные различного типа. Это могут быть числа, символы, логические значения, полиномы, рациональные дроби и другие объекты. Scilab размещает матрицы всех типов данных в Рабочей области – оперативной памяти компьютера, по столбцам и отображает информацию об активных объектах текущей сессии в окне

Обозревателя переменных.

Из рис. 1.3.1-1, иллюстрирующем матричную структуру представления данных в Scilab, следует, что матрицы могут быть пустыми []; скалярными; векторными, состоящими из одной строки или одного столбца, называемыми соответственно вектор-строкой или вектор-столбцом; квадратными и прямоугольными, а их элементы могут быть объектами практически любыхтипов данных, допустимыхвсистеме Scilab.

Рис. 1.3.1-1 Представление данных в Scilab

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

54

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.

55

5. -->

--> // Пример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), то ввод очередной строки матрицы можно перенести в следующую строку экрана, нажав после символа точки с запятой клавишу <Enter>.

В Примере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 =

56

1.4444

2.78888

3.565555

-4.36789

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.

57

-->

--> 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.367.01 9.44 // Пустая матрица не влияет на формированияmd

Рис. 1.2.3-4 Примеры создания новых матриц путем объединения уже существующих

В Примере1 создается новая матрица mc из матриц ma и mb в вертикальном направлении, а в Примере2 создается новая матрица md из матриц ma и mb в горизонтальном направлении.

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

58

образуется путем сцепления двух или нескольких матриц, перечисленных в параметрах. Эта функция являются альтернативой операции [] для объединения матриц. С помощью этой функции можно построить новые матрицы вдоль заданного измерения (рис. 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 =

59

-2.5

-1.5 -0.5 0.5 1.5 2.5

 

-->

 

 

 

 

 

 

 

--> // Пример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).

60