Компания ALT Linux
Опубликован: 12.03.2015 | Доступ: свободный | Студентов: 485 / 21 | Длительность: 20:55:00
Лекция 5:

Задачи линейной алгебры

5.2 Действия над векторами

Рассмотрим действия над векторами, предусмотренные в Octave.

Операция сложения определена только для векторов одного типа, то есть суммировать можно либо векторы–столбцы, либо векторы–строки одинаковой длины. Элементы вектора, являющегося суммой двух векторов, представляют собой сумму соответствующих элементов слагаемых. Для записи операции сложения векторов используют знак "+":

	
>>> a =[2 4 6 ]; b=[1 3 5 ]; c=a+b
c = 3  7  11

Вычитание векторов определено аналогично сложению: из элементов вектора-уменьшаемого вычитаются соответствующие элементы второго вектора. Запись операции вычитания выполняется с помощью знака "–":

	
>>> a =[2 4 6 ]; b=[1 3 5 ]; c=a-b
c = 1  1  1

Операция транспонирования вектора суть замена вектора-столбца вектором-строкой и наоборот. Знак апострофа "’" применяют для записи операции транспонирования вектора:

	
>>> a ’
ans =
	2
	4
	6
>>> b ’
ans =
	1
	3
	5
>>> t =(a+b ) ’
t =
	3
	7
	11

Умножение вектора на число есть умножение каждого элемента вектора на это число. Запись операции умножения вектора на число осуществляется с помощью знака "*":

	
>>> a =[2 4 6 ]; b=[1 3 5 ]; z=2*a +0.5*b
z = 4.5000 9.5000 14.5000

Деление вектора на число определяется аналогично умножению, как деление каждого элемента вектора на это число1Если делитель будет равен нулю, то в ответе будет Inf или NaN и предупреждение warning: division by zero. (Прим. редактора).. Знак деления "/" применяют для записи операции деления вектора на число:

	
>>> z=2_a+b/2
z = 4.5000 9.50001 4.5000

Умножение векторов определено только для векторов одинакового размера, причём один из них должен быть вектором-столбцом, а второй — вектором-строкой. Если вектор-строку умножать на вектор столбец, получится скалярное произведение векторов (число)2Напомним, что скалярное умножение векторов определено, как сумма произведений соответствующих элементов векторов., а если умножать вектор-столбец на вектор-строку, то получится матрица у которой каждая строка представляет собой исходный вектор-строку, умноженный на соответствующие элементы вектора столбца. Операция умножения вектора на вектор записывается с помощью знака "*", также как и операция умножения вектора на число. Примеры умножения векторов:

	
>>> a =[2 4 6 ]; b=[1 3 5 ];
% В результате умножения вектора–строки на вектор–столбец получится число
>>> a*b ’
ans = 44
% Результат умножения вектора–столбца на вектор–строку — матрица
>>> a ’ * b
ans =
	2 6 10
	4 12 20
	6 18 30
% Некорректное умножение векторов
>>> a*b
error: operator *: nonconformant arguments (op1 is 1x3, op2 is 1x3)
>>> a ’ * b ’
error: operator *: nonconformant arguments (op1 is 3x1, op2 is 3x1)

Все перечисленные действия над векторами определены в математике и относятся к так называемым векторным вычислениям. Но Octave допускает и поэлементное преобразование векторов. Существуют операции, которые работают с вектором не как с математическим объектом, а как с обычным одномерным массивом. Например, если к некоторому заданному вектору применить математическую функцию, то результатом будет новый вектор того же размера и структуры, но элементы его будут преобразованы в соответствии с заданной функцией:

	
>>> x=[-pi /2, -pi /3, -pi / 4, 0, pi /4, pi /3, pi / 2 ]
x = -1.5708 -1.0472 -0.7854 0.0000 0.7854 1.0472 1.5708
>>> y=sin (2 * x )+cos (2 * x )
y = -1.0000 -1.36603 -1.0000 1.0000 1.0000 0.36603 -1.0000
>>> y=2*exp ( x /5)
y = 1.4608 1.6221 1.7093 2.0000 2.3402 2.4660 2.7382

Рассмотрим ещё несколько операций поэлементного преобразования вектора. К каждому элементу вектора можно добавить (вычесть) число, используя арифметическую операцию "+" ("–")3Вдумчивый читатель сразу заметит, что это частный случай предыдущего примера — применение к вектору линейного преобразования. (Прим. редактора).:

	
>>> x=[-pi /2, -pi /3, -pi / 4, 0, pi /4, pi /3, pi / 2 ];
>>> x-1.2+e /3
ans =
-1.86470 -1.34110 -1.07930 -0.29391 0.49149 0.75329 1.27689

Поэлементное умножение векторов выполняется при помощи оператора ".*", результатом такого умножения является вектор, каждый элемент которого равен произведению соответствующих элементов заданных векторов.

	
>>> a =[2 4 6 ]; b=[1 3 5 ]; a . * b
ans = 2  12  30
>>> b . * a
ans = 2  12  30

Поэлементное деление одного вектора на другой осуществляется при помощи оператора "./". В результате получается вектор, каждый элемент которого — частное от деления соответствующего элемента первого вектора на соответствующий элемент второго.

Совокупность знаков ".\" применяют для деления векторов в обратном направлении (поэлементное деление второго вектора на первый). Примеры деления векторов:

	
>>> a =[2 4 6 ]; b=[1 3 5 ]; a . / b
ans = 2.0000 1.3333 1.2000
>>> a . \ b
ans = 0.50000 0.75000 0.83333

Поэлементное возведение в степень выполняет оператор ".^", результатом является вектор, каждый элемент которого это соответствующий элемент заданного вектора, возведённый в указанную степень:

	
>>> a =[2 4 6 ]; b=[1 3 5 ];
>>> a .^2 % Каждый элемент вектора возвести в квадрат
ans = 4 16 36
>>> b . ^ ( 1 / 2 ) % Извлечь корень квадратный из каждого элемента вектора
ans = 1.0000 1.7321 2.2361
>>> b .^ a % Каждый элемент вектора b возвести в степень a
ans = 1 81 15625
>>> a . ^ ( 1 . / b ) % Извлечь корень b-й степени из каждого элемента вектора a
ans = 2.0000 1.5874 1.4310
Алексей Игнатьев
Алексей Игнатьев

Возможна ли разработка приложения на Octave с GUI?

Евгений Ветчанин
Евгений Ветчанин

Добрый день. Я самостоятельно изучил курс "Введение в Octave" и хочу получить сертификат. Что нужно сднлать для этого? Нужно ли записаться на персональное обучение с тьютором или достаточно перевести деньги?

Иван Мельников
Иван Мельников
Россия
Ольга Замятина
Ольга Замятина
Россия, Калиниград, РГУ им. И. Канта, 2009