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

_3_учебн_пособ_SciLab

.pdf
Скачиваний:
42
Добавлен:
20.04.2015
Размер:
187.45 Кб
Скачать

2.РАБОТА С МАССИВАМИ В SCILAB

2.1.Одномерные массивы (векторы)

Для создания одномерного массива из набора чисел удобно использовать операцию конкатенции [] .

Создание массива-строки:

A=[10 20 30]

или A=[10,20,30]

Если не указать точки с запятой после создания массива,SciLab

выдаст:

 

 

A =

 

 

10.

20.

30.

Cоздание массива-столбца:

A=[10

или

A=[10; 20; 30]

20

 

 

30]

 

 

A=

 

 

10.

 

 

20.

 

 

30.

 

 

Можно создать пустой массив

P=[]

P =

[]

Для доступа к элементу массива нужно применить операцию индексации. Первый элемент массива обозначается как A(1), второй – A(2), третий – A(3).

Операцию индексации можно применять как слева, так и справа от знака присваивания. При этом осуществляется доступ к элементам массива по записи или по чтению.

Если создавать вектор поэлементным присваиванием, то создаётся столбец

D(1)=1; D(2)=2 D =

1.

2.

Пример записи во второй элемент массива среднеарифметического 1-го и 3-го:

A(2) = ( A(1) + A(3) ) / 2;

Помимо хранения элементов массива SciLab автоматически хранит информацию о размерности, количестве и типе элементов.

Количество элементов в одномерном массиве всегда можно узнать с помощью функции length :

length(А) ans =

3

Для пустого массива эта функция возвращает 0.

2

При чтении несуществующего элемента выдаётся ошибка:

A(4)

!--error 21 invalid index

Однако записать значение в несуществующий элемент можно:

A(4) = 40;

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

A А =

10.20. 30. 40.

2.2. Двумерные массивы (матрицы)

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

Создание двумерного массива:

A=[ 1 2 или A=[ 1 2; 3 4; 5 6]

3 4

5 6 ]

A=

1.2.

3.4.

5.6.

Здесь формируется массив A из 3 строк и 2 столбцов – всего 6 чисел. Для разделения строк используется переход на новую строку или точка с запятой.

Размеры двумерного массива определяются функцией size:

S=size(A) // получаем вектор из двух значений (число строк и столбцов)

S =

3.2.

[kstr,kcol]=size(A) // получаем два значения (число строк и столбцов) kcol =

2.

kstr =

3.

Можно использовать size для получения только числа строк или столбцов: kstr = size(A,'r')

kstr = 3

kcol = size(A,'c') kcol =

2

Функция size определяет и число элементов массива (можно использовать функцию length):

kol=size(A,'*') kol =

3

6.

kol=length(A) kol =

6.

В SciLab даже обычные переменные рассматриваются как двумерные массивы размерностью в 1 строку и 1 столбец.

x=1;

size(x) ans =

1.1.

Для доступа к элементу двумерного массива используются два индекса – номер строки и номер столбца.

Поэлементное создание двумерного массива

B(1,1)=10; B(1,2)=20; B(2,1)=100; B(2,2)=200

B=

10.20.

100. 200.

Возможно обращение к двумерному массиву, как к одномерному:

B(2)

ans=

100.

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

2.3. Функции SciLab для создания массивов

Можно сразу создать массив с нулевыми или единичными элементами,

используя функции zeros или ones:

 

C=zeros(2,3)

I=ones(2,2)

C =

 

 

I =

 

0

0

0

1

1

0

0

0

1

1

Эти функции создают одномерный массив, если один из их аргументов 1.

Функция eye создаёт диагональную единичную матрицу

eye(3,3)

 

 

ans =

 

 

1

0

0

0

1

0

0

0

1

Заполнение элементов матриц случайными числами с равномерным распределением в диапазоне [0 1] обеспечивает функция rand

rand(2,3) ans =

0.2113249 0.0002211 0.6653811

4

0.7560439 0.3303271 0.6283918

Если аргументом функций zeros, ones, eye и rand задан массив (число, вектор или матрица), они возвращают массив той же размерности:

T=[1 2 3 4 5]

T0=zeros(T) T0 =

0.0. 0. 0. 0.

2.4.Арифметические операции и функции с массивами

Вязыке системы SciLab допускаются групповые арифметические операции с массивами.

Над массивами одинаковой размерности допускаются операции: + поэлементное сложениепоэлементное вычитание

.* поэлементное умножение

./ поэлементное деление

.^ поэлементное возведение в степень

Пример

A=[ 1 2 3 4 ]; B=[10 20 30 40]; C=A+B

C=

11.22. 33. 44.

Если используются операнды разных размеров, выдаётся сообщение об ошибке. Исключением является случай, когда один из операндов не массив (скаляр).

C+5 ans =

16.27. 38. 49.

Здесь число 5 предварительно преобразуется в массив той же длины, что и С, с элементами, равными 5, и складывается поэлементно с массивом С.

Все математические функции системы SciLab могут принимать в качестве аргумента и возвращать массив любой размерности:

F=[ 4 9 16 25];

sqrt(F) ans =

2. 3.

4.5.

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

5

2.5.Матричные операции

ВSciLab допустимы операции, использующие матричную арифметику: det(Y) – вычисление определителя матрицы Y

inv(Z) – вычисление матрицы, обратной к Z (эквивалентно Z^(-1) ) X.’ – транспонирование матрицы X

A*B – матричное умножение матриц A и B

A^3 – возведение квадратной матрицы в степень ( A*A*A) A\B – аналог операции inv(A)*B

A/B – аналог операции A*inv(B)

2.6.Действия с векторами и матрицами

1. Склеивание массивов.

A=[1 2 3];

M=[10 20];

M=[M A]

M=

10.20. 1. 2. 3. [A 5 A 4]

ans =

1.2. 3. 5. 1. 2. 3. 4. A = [ 1 2

3 4 ]; B = [ 5 6

7 8 ];

C=[A B]

или

C=[A,B]

C =

 

 

1.2. 5. 6.

3.4. 7. 8.

C1=[ A

или C1=[ A; B ]

B ]

 

C1=

 

1.2.

3.4.

5.6.

7.8.

2.Взятие части массива.

X = [ 10 20 30 40 50] ;

X (2:4) // задаём диапазон индексов ans =

20. 30. 40.

Y = X(1:2:4) // задаём диапазон индексов с шагом

Y =

10. 30.

6

X(3:length(X)) // задаём дипазон с третьего до последнего ans =

30. 40. 50.

Z=X(length(X):-1:1) // шаг индекса может быть отрицательным

Z =

50. 40. 30. 20. 10.

C1(1:3,:) // здесь из С1 берётся подматрица с первой по третью строку ans =

1. 2.

3. 4.

5. 6.

Y=C(:,2:size(C,'c')) // в Y записывается подматрица со 2 // по последний столбец

Y =

2. 5. 6.

4. 7. 8.

Х=C(size(C,'r'),1:2:size(C,'c')) // В Х записываются элементы последней // строки стоящие на нечётных местах

Х =

3.7.

3.Удаление элементов массива

C=[0 0.5 1 1.5 2]; C(2)=[]

C =

0.1. 1.5 2.

C(2:3)=[]

C=

0.2.

D=[-1 -2 -3 -4 -5]; D(1:2:length(D)) = [ ] D =

-2. -4.

Z(1,:)= [ ]; // удаление первой строки

Z(:,2)= [ ]; // удаление второго столбца

Z(1:2,:)=[ ]; // удаление первых двух строк

1. Формирование одномерных массивов в виде арифметической прогрессии.

V=[1:5]

V=

1.2. 3. 4. 5.

Шаг изменения элементов можно задать произвольным (даже отрицатель-

ным):

W=[7:-2.5:1]

W=

7.4.5 2.

7

5. Задание значений группе элементов массива:

D=[1 2 3 4; 5 6 7 8]

D=

1.2. 3. 4.

5. 6. 7. 8. D(1:2,2:3)=10

D =

1.10. 10. 4.

5.10. 10. 8.

2.7.Множественная индексация массивов

На самом деле взятие части массива с помощью диапазона индексов – это есть частный случай множественной индексации.

1. Пусть нужно из вектора V1=[9 8 7 6 5 4 3 2 1] сформировать вектор V2, состоящий из 2-го, 4-го, 7-го элементов:

V2=V1([2 4 7]) или Ind=[2 4 7]; V2=V1(Ind)

V2=

8. 6. 3.

Здесь вместо скалярного индекса подставляется вектор, содержащий набор индексов.

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

С помощью множественной индексации можно продублировать некоторые элементы массива и даже переставить их местами.

V2=V1([8 8 8 2 2 6]) V2 =

2. 2. 2. 8. 8. 4.

Если V1 столбец, то и результат V2 будет столбцом.

2. В качестве индекса можно использовать матрицу:

V=[10 20] I=[ 1 1

22

22

1 1];

A=V(I)

Здесь A – матрица-строка, элементы которой берутся из V посредством индексирования сначала 1-го, а затем 2-го столбца индексов.

A =

10.20. 20. 10. 10. 20. 20. 10.

Если вместо строки V взять столбец, то после индексации его матрицей I получим A в виде столбца.

3. Если индексируется матрица (двумерный массив), то элементы исходной матрицы и матрицы-индекса берутся в порядке их расположения в памяти столбцам, а результат всегда выводится в виде столбца.

8

A =[ 10

20

30

40

50

60

70

80

90];

Ind =[ 4

5

6];

A(Ind)

 

 

ans =

 

 

20.

 

 

50.

 

 

80.

 

 

Ind =[ 1

2

3

7

8

9];

F=A(Ind) F =

10.

30.

40.

60.

70.

90.

4. Рассмотрим множественную индексацию двумя индексами.

A= [ 1 2 3 4 5 6];

B=A([1 3],1:2) B=

1. 2.

5. 6.

Mожно легко поменять местами строки или столбцы

F=[1 2 3 4 5 6 7 8 9];

F=F(:,[3 1 2])

Здесь последний столбец ставим на первое место, первый – на второе:

F=

3. 1. 2.

6. 4. 5.

9. 7. 8.

Размер результата определяется количеством индексов при индексировании

E=F([2 3 3 2], [2 1 3 2 1]) E=

4. 6. 5. 4. 6.

7. 9. 8. 7. 9.

7. 9. 8. 7. 9.

4. 6. 5. 4. 6.

9

Вопросы и задания к главе 2

1. Напишите, что и как будет выведено после выполнения в SciLab:

а) clear; X(4)=5 б) Z(2,3)=5 в) A(1)=10; A(3)=30 г) X=[]; length(X)

2.Поясните все варианты использования функции size.

3.Задан массив M=[10,20,30,40;1,2,3,4;5,6,7,8]. Чему равно значение K?

а) K=length(M)*size(M,'*') б) K=M(5)-M(3,2) в) K=M(1,3)+M(6)

4.С помощью функции создайте:

а) квадратную единичную матрицу; б) строку из пяти элементов, состоящую из нулей;

в) столбец из 10 элементов, состоящий из единиц; г) квадратную матрицу 7-го порядка, состоящую из случайных чисел в

диапазоне от 0 до 100 .

5.Напишите, что и как будет выведено после выпонения в SciLab: а) H=[12;53;92;25]; J=[3 4 2 1]; T=H(J)

б) Z=[11 22 33 44]; K=[1 2 4 3; 2 1 3 4]; G=Z(K)

в) S=[34,74,-23;82,12,30;45,-33,-72]; U=[7 3 8 5]; B=S(U) г) M=[ 2 -7 3 5;3 9 -3 4; -1 2 0 -2]; F=M([2 3 2 1],[3 1])

6.Сформируйте массив, состоящий из элементов: 30 26 22 18 14 10 6 2 -2 -6 .

7.Даны два одномерных массива A и B. Изменить массив A так, чтобы в нём сначала были элементы B, затем значение 0, а затем все элементы A.

8.Удалите из массива элементы, стоящие на местах, кратных трём.

9.Даны одномерные массивы A и B. Изменить массив A так, чтобы в нём был сначала последний элемент B, затем все элементы A, затем первый элемент B.

10.Задан одномерный массив. Замените элементы со 2-го по 5-й значениями 20

3040 50 .

11.Задан одномерный массив. Измените его так, чтобы он содержал только элементы, стоящие на чётных местах, но в обратном порядке.

12.Заданы одномерные массивы X и Y. Замените последние пять элементов массива Y на первые пять элементов массива X.

13.Удалить из матрицы R первую строку и последний столбец.

14.Даны две квадратные матрицы X и Y одинаковой размерности, содержащие чётное количество столбцов. Замените все чётные столбцы в X на все нечётные столбцы Y.

15.Дана квадратная матрица 5-го порядка. Удалить из неё все элементы, кроме квадратной подматрицы из элементов с третьей по пятую строку и одновременно с первого по третий столбец.

16.Дана матрица B. Создать матрицу, состоящий из двух строк: первая ее строка – последняя строка B, а вторая строка – первая строка B.

17.Даны матрицы M и N одинаковой размерности. Создать матрицу G такой же размерности, каждый элемент которой равен квадрату произведения соответствующих элементов M и N.

18.Даны матрицы A и B с одинаковым числом строк. Составить матрицу C, состоящую из двух столбцов, первый столбец которой есть последний столбец матрицы A, а второй – первый столбец матрицы B.

10

4.ОПЕРАЦИИ. ОБРАБОТКА МАССИВОВ

4.1.Операции отношения

Операции отношения предназначены для сравнения двух операндов.

>больше

>= больше или равно

<меньше

<= меньше или равно

==равно

<> не равно ( либо ~=)

Эти операции являются бинарными, т. е. используются с двумя операндами. Результатом операции отношения будет логическое значение T (true ис-

тина) или F (false ложь): a=1; b=2;

c=a<b // логическая переменная c получает значение T c =

T

Логические константы в выражении записываются со знаком процента: d1=%T // логическая переменная d1 получает значение T

d1 =

T

d2=%F; // логическая переменная d2 получает значение F d2 =

F

В арифметических выражениях истина T преобразуется в 1, а ложь F в 0:

%T+6 ans =

7

Арифметические операции имеют приоритет выше, чем операции отношения:

3<>1+2 // здесь сначала выполняется сложение, а затем сравнение ans =

F

Для изменения порядка выполнения операций используют круглые скобки. x=(-5<=0)+5 // 1 + 5

x =

6

4.2. Логические операции

Логические операции используются в условных операторах и циклах.

Бинарные операции (должны иметь два операнда)

&«И»

|«ИЛИ»