Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Поэлементные и групповые операции над массивами.




Прежде всего, отметим, что над массивами одинаковых размеров допускаются операции сложения и вычитания, обозначаемые стандартными знаками + и –. Если A и B – массивы произвольной размерности, но одинаковых размеров, то допустимы выражения

>> A=[4 1; 0 5]

A =

4 1

0 5

>> B=[2 2; 1 7]

B =

2 2

1 7

>> C=A+B

C =

6 3

1 12

>> D=A-B

D =

2 -1

-1 -2

где элементы массивов C и D равны сумме и разности элементов массивов A и B соответственно. Иными словами, операции сложения и вычитания выполняются поэлементно и порождают массивы тех же размеров, что и исходные операнды. Если используются операнды разных размеров выдается сообщение об ошибке:

A =

4 1

0 5

>> S=[1 2 3; 0 4 2]

S =

1 2 3

0 4 2

>> A+S

Error using +

Matrix dimensions must agree.

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

>> A+7

ans =

11 8

7 12

В таких случаях скаляр предварительно расширяется до массива того же размера, что и матричный операнд. Так например, в приведенном примере из скаляра 7 сначала генерируется матрица [7 7; 7 7], которая и складывается далее поэлементно с матрицей A.

Для поэлементного умножения и поэлементного деления массивов одинаковых размеров применяются операции, обозначаемые комбинациями двух символов – «.*» для умножения и «./» для деления (поясним, что кавычки, разумеется, не входят в состав обозначений для указанных операций). Использование комбинаций символов можно объяснить тем фактом, что символами «*» и «/» обозначены специальные операции линейной алгебры над матрицами и векторами.

Заметим, что помимо операции «./», называемой также операцией правого поэлементного деления, в системе MATLAB имеется также операция левого поэлементного деления, обозначаемая «.\». Поясним, что выражение типа A./B приводит к матрице с элементами A(k,m)/B(k,m), где k и m – соответствующие индексы элементов матрицы. Выражение A.\B приводит, в свою очередь, к матрице с элементами B(k,m)/A(k,m).

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

>> X=[8 5 3 6; -2 4 -7 1]

X =

8 5 3 6

-2 4 -7 1

>> Y=[2 4 -7 9; 1 3 2 8]

Y =

2 4 -7 9

1 3 2 8

>> X.^3

ans =

512 125 27 216

-8 64 -343 1

>> X.^Y

ans =

1.0e+07 *

0.0000 0.0001 0.0000 1.0078

-0.0000 0.0000 0.0000 0.0000

Следует обратить внимание на результат, полученный при выполнении операции X.^Y. Как видно, система MATLAB выделила общий множитель 1.0e+07 для всех элементов результирующей матрицы. Кроме того, полученная матрица включает достаточно много нулевых элементов. Это объясняется тем, что по умолчанию в MATLAB установлен формат представления чисел short, при котором после десятичной точки отображается только четыре десятичные цифры. Более точный результат может быть получен, если задать формат short e:

>> format short e

>> X.^Y

ans =

6.4000e+01 6.2500e+02 4.5725e-04 1.0078e+07

-2.0000e+00 6.4000e+01 4.9000e+01 1.0000e+00

Знак «*» (кавычки, как и прежде, не входят в обозначение операции) закреплен за операцией умножения матрицы на матрицу (или матрицы на вектор) в смысле линейной алгебры. Отметим, что данная операция выполнима, лишь при условии, что количество столбцов в левом операнде равно количеству строк в правом операнде:

>> A=[4 -1 1; 1 5 1; 10 2 42]

A =

4 -1 1

1 5 1

10 2 42

>> x=[1; 2; 3]

x =

>> y=A*x

y =

Отметим, что простейшая в таком смысле операция умножения вектора на число может выполняться с помощью обычного оператора умножения («*»), причем умножать вектора на число можно как справа, так и слева:

>> q=[6 7 8 9]

q =

6 7 8 9

>> q*4

ans =

24 28 32 36

>> 4*q

ans =

24 28 32 36

Умножение матрицы на число подобно умножению вектора на число.

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

>> u=[1 5 7];

>> v=[2; 4; 6];

>> u*v

ans =

>> v*u

ans =

2 10 14

4 20 28

6 30 42

Как и следовало ожидать операция произведения векторов не является перестановочной.

Выполним теперь транспонирование матрицы (т.е. перемену мест ее строк и столбцов):

>> A=[1 2 3; 4 5 6]

A =

1 2 3

4 5 6

>> At=A'

At =

1 4

2 5

3 6

Приведем примеры умножения матрицы на матрицу:

>> A=[1 2 3; 4 5 6];

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

>> A*B'

ans =

-7 26

-10 56

>> A'*B

ans =

6 8 25

9 10 29

12 12 33

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

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

>> C=[5 1 4; 1 7 7; 2 9 6]

C =

5 1 4

1 7 7

2 9 6

>> C^3

ans =

320 829 778

433 1672 1465

488 1827 1599

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

>> C^-3

ans =

1.8900e-03 -5.9837e-02 5.3903e-02

-1.4081e-02 -8.2427e-02 8.2371e-02

1.5512e-02 1.1244e-01 -1.0994e-01

Деление вектора на число происходит с помощью обычного оператора деления («/»), однако деление числа на вектор невозможно:

>> q/4

ans =

1.5000 1.7500 2.0000 2.2500

>> 4/q

Error using /

Matrix dimensions must agree.

 





Поделиться с друзьями:


Дата добавления: 2016-12-06; Мы поможем в написании ваших работ!; просмотров: 781 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Лаской почти всегда добьешься больше, чем грубой силой. © Неизвестно
==> читать все изречения...

2419 - | 2289 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.