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

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

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

11

Унарная операция (имеет только один операнд)

~«НЕ»

Операция & возвращает истину T, когда истинны (не равны 0) оба её операнда. В остальных случаях она возвращает ложь F.

a

b

a & b

T

T

T

T

F

F

F

T

F

F

F

F

y = %T & %F y =

F

Операнды a и b могут быть выражениями любой сложности.

Например:

y = x>=0 & x<=5

Здесь y получает значение T, если x попадает в промежуток от 0 до 5.

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

5 & -6 // %T & %T ans =

T

Операция | возвращает ложь F, только в том случае, если ложны (равны 0) оба её операнда. В остальных случаях она возвращает истину T.

a

b

a | b

T

T

T

T

F

T

F

T

T

F

F

F

Операция ~ возвращает ложь F, если операнд истинен T (не равен 0), и возвращает истину T, если операнд ложен F (равен 0)

a

~a

T

F

F

T

Операции отношения >, <, >=, <= неприменимы к логическим операндам (то есть выражениям, значения которых равны T или F).

12

4.3. Приоритеты операций в SciLab

Операции в выражениях выполняются слева направо с учётом их приоритета (старшинства). Приоритеты операций в порядке убывания:

1.Круглые скобки (взятие функций от аргумента). 2.Операции возведения в степень.

3.Унарная операция . 4.Операции умножения и деления. 5.Операции сложения и вычитания. 6.Операции отношения. 7.Логическая операция ~ . 8.Логическая операция & . 9.Логическая операция | . 10.Операция присваивания.

4.4. Операции отношения и логические операции с массивами

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

A=[ 1 1 1 2 2 2 3 3 3];

B=[ 0 0 0 7 7 7 1 2 3];

C=A<=B

В результате образуется логический массив того же размера, что А и В

С =

F F F

T T T

F F T

Если один из операндов скаляр, то происходит сравнение каждого элемента массива с этим значением

M=[ -1 0 1 2];

M>=0

ans=

F T

T T

Пример логической операции ~ с вектором:

V=[1 9 9 9 0]; ~V

ans =

F F F F T

13

Функция and(М) возвращает T, если все элементы массива М не равны нулю (истины), и возвращает F, когда хотя бы один элемент массива нулевой (ложен). Функция or(M) возвращает T, если хотя бы один из элементов массива не равен нулю (истинен), и возвращает F, когда все элементы нулевые.

and(M,’r’) – возвращает строку результата применения функции and по каждому столбцу (аналогично or(M,’r’) ). and(M,’с’) – возвращает столбец результата применения функции and по каждой сттроке (аналогично or(M,’с’) ).

4.5. Логическая индексация массивов

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

X=[ -2 9 -3 4 -8 1]; Ind=X<0

Здесь в логический массив Ind значения T соответствуют отрицательным элементам массива X:

Ind =

T F T F T F

Указание логического массива Ind в качестве индекса массива позволяет выбрать отрицательные элементы.

F=X(Ind) F =

-2. -3. -8.

Тот же результат получим без вспомогательного массива Ind

F=X(X<0)

Если X – строка, то F тоже строка. Если X – столбец или матрица, то результат F – столбец.

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

X=[ -2 9 3 -4 -8 1];

X(X<0)=0 X =

0.9.

3.0.

0.1.

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

14

4.6. Функция find

Функция find в качестве аргумента принимает массив. Она возвращает номера истинных (не равных 0) элементов. Рассмотрим все варианты ее использования.

1. Для одномерных массивов она возвращает строку номеров элементов, удовлетворяющих условию.

V=[1 0 3 6 5 1];

Ind=find(V>1)

Ind=

3. 4. 5.

Массив индексов можно использовать для множественной индексации

V(Ind)=9 или V(find(V>1))=9

V=

1 0 9 9 9 1

2. Для двумерных массивов функция find массивов возвращает строку номеров с учётом их хранения в памяти по столбцам.

B =[ -2

3

-1

0

2

9

-4

3

5] ;

K=find(B<0)

 

K =

 

 

1

3

7

3. Вызов find с двумя выходными аргументами приводит к записи в них номеров строк и столбцов найденных элементов в порядке их просмотра по столбцам.

[ni,nj]=find(B<0) nj =

1. 1. 3. ni =

1. 3. 1.

4.7. Функции обработки данных в массивах

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

1. sum(X) – возвращает сумму элементов массива X.

sum(X,’r’) – возвращает строку сумм элементов каждого столбца массива X. sum(X,’c’) – возвращает столбец сумм элементов каждой строки массива X.

15

2. prod(X) – возвращает произведение элементов массива X . prod(X,’r’) – возвращает строку произведений элементов каждого столбца массива X.

prod(X,’c’) – возвращает столбец произведений элементов каждой строки X.

3. max(X) – возвращает максимальный элемент массива. [m,nom]=max(X) – возвращает максимальный элемент m массива X и его

номер nom (если X – вектор). Если X – матрица, то nom – строка, 1-й элемент которой есть номер строки, а 2-й элемент номер столбца максимального элемента.

max(A,’r’) – возвращает строку максимальных значений каждого столбца матрицы A.

max(A,’c’) – возвращает столбец максимальных значений каждой строки матрицы A.

[M,Nom]=max(A,’r’) – в строку M записываются максимумы каждого столбца матрицы A, а в строку Nom – номера их строк.

[M,Nom]=max(A,’c’) – в столбец M записываются максимумы каждой строки матрицы A, а в столбец Nom – номера их столбцов.

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

max(A1,A2, …) – возвращает массив, каждый элемент которого есть максимальный из соответствующих элементов массивов A1,A2, …. Эти массивы должны быть одинаковой размерности. Любой из аргументов может быть число, тогда в результирующую матрицу записывается максимум из этого числа и соответствующих элементов других матриц.

[M,Nom]=max(A1,A2, …) – возвращает массив M максимальных элементов массивов A1,A2, …. и массив Nom номеров аргументов, для которых на данном месте находится максимальный элемент.

4.Функция min находит минимальный элемент массива и работает аналогично max (см. п. 3).

5.mean(A) – возвращает среднее арифметическое значение элементов массива A.

mean(A,'r') –возвращает строку средних значений каждого столбца матрицы A. mean(A,'c') – возвращает столбец средних значений каждой строки матрицы A.

6.Функция geomean – возвращает среднее геометрическое значение элементов массива и работает аналогично mean (см. п. 5).

7.Функция tril(M) возвращает нижнюю треугольную матрицу от M, в которой все элементы выше главной диагонали заменяются нулями. Функция

16

triu(M) возвращает верхнюю треугольную матрицу, в которой все элементы ниже главной диагонали заменяются нулями.

8. sort(A) – сортирует в убывающем порядке. Если A – матрица, то она сортируется как одномерный массив, началом которого является первый столбец, затем второй и т. д. до последнего столбца..

[An,Nom]=sort(A) – в An записывается отсортированный массив, в Nom номера элементов массива An, когда они находились в массиве A.

sort(A,'c') – сортирует каждую строку A в убывающем порядке. [An,Nom]=sort(A,'c')– в An записывается отсортированный по каждой

строке массив, а в Nom – номера столбцов элементов массива An, когда они находились в массиве A.

sort(A,'r') – сортирует каждый столбец A в убывающем порядке. [An,Nom]=sort(A,'r')– в An записывается отсортированный по каждому

столбцу массив, а в Nom – номера строк элементов массива An, когда они находились в массиве A.

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

9. diag(V) возвращает квадратную диагональную матрицу, если V век-

тор; возвращает столбец из диагональных элементов, если V квадратная матрица.

Если A квадратная матрица, то diag(diag(A)) диагональная матрица с диагональными элементами из A.

10. Если требуется создать матрицу, состоящую из m n копий матрицы A, то используется функция ones и специальная операция .*. :

ones(m,n).*.M

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

1.Как воспринимается значение %T в арифметических операциях?

2.Как интерпретируется отрицательное число в логической операции?

3.Может ли значение %F использоваться в операциях отношения?

4.Перечислите операции в порядке убывания их приоритетов.

5.Приведите таблицу истинности логической операции «и», «или», «не».

6.Какие операции имеют меньший приоритет по сравнению с операцией *?

7.Какие операции имеют больший приоритет по сравнению с операцией +?

8.Задайте произвольные значения переменным и распишите порядок и результат выполнения каждой операции в выражении:

а) ~ x <> y * 2 & z <= 1 б) a * b | c > d - b - 1

в) ~ x | y * z < x - y г) a <= b * y & c <> b

17

д) a == b / y | c > - b е) x & y * z == y + 3 ж) a / b | c <> d * 2 з) x > y - 1.5 | z == 0

9.Что является результатом операции отношения с массивами?

10.Опишите назначение и особенности функий and и or.

11.Чем отличается логическая индексация массивов от множественной?

12.Исследуйте экспериментально все ньюансы использования функции find.

13.Охарактеризуйте отличие и сходство логической индексации и функции find.

14.Что и как будет выведено в результате выполнения инструкций?

а) Y=[-15 0 3; 0 12 -1];

H=[1 -6 -1; 0

-31 -2];

 

Q= ~(Y==0&H<>0)

 

 

 

б) A=[1 0 -3; 8 2 -4; -1 8 0]; B=[21 -10

4; 11 9 -4; -1 -7

0];

C= -6 & A == B

 

 

 

в) X=[10 -4 2; -8 12 4; -1 21 10]; Y=[1 -6 14; -1 1 15; 8

-31 10];

Z= 0 | X<=Y

 

 

 

г) N=[-15 -4; 0 12; -1 21]; M=[1 -6; -1

0; 0 -31];

 

P= N >0 | M<0

 

 

 

д) J=[9;3;-7;5]; J1=[2;-4;6;0]; J2=[-2; 7; 4; 1;];

 

A=J(J1>J2)

 

 

 

е) S=[9,3;-7,5]; S1=[0,-4;6,0];

 

 

A=S(S1<>0)

 

 

 

ж) T=[29 -13 7 15]; T1=[10; -4; 6; 0];

 

 

G=T1>=5; T(G)

 

 

 

з) U=[29 -13 5; 7 3 15];

I=[10 -2 0 4 5 ];

 

U(I<5)=-10

 

 

 

и) M=[ 2 -3 0 4 -3 9 3];

M1=[2 6 1 7 4 3 22 ];

 

M1(find(M>0&M<10))=length(M)

к) K=[ 2 -3 0; 4 -3 9]; H=[2 -6 1; 17 4 32]; K(find(H<0|H>10))=H(5)

л) L=[ 0 8 -3; 0 0 4]; [d1,d2]=find(L<>0); V=L(d1,d2)

м) P=[ 22 -31 0 48 -3 29 3]; W=[2 61 -1 77 -4 -43 22 ]; P(length(find(W>0)))=P(1)

15.Приведите примеры и варианты использования функции max.

16.Опишите возможности функции сортировки элементов массива.

17.Исследуйте возможности функции для подсчёта суммы и произведения элементов массива.

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

19.Как создать матрицу, состоящую из заданного числа копий другой матрицы.

20.Для чего предназначены функции tril и triu?

21.Как определить среднеарифметическое и среднегеометрическое значение элементов массива?