- •Глава 2 работа с массивами
- •2.1 Создание векторов
- •2.2 Поэлементные операции над векторами и матрицами
- •2.3 Применение функций обработки данных к векторам и матрицам
- •2.4 Формирование массивов определенного вида
- •2.5 Создание новых массивов на основе существующих
- •2.6 Собственные числа и векторы матрицы. Матричные функции линейной алгебры
Глава 2 работа с массивами
Эта глава знакомит с другими способами создания векторов и матриц. В ней рассмотрены способы формирования массивов определенного вида, создания новых массивов на основе существующих. Мы узнаем, что представляют собой поэлементные операции над массивами и чем они отличаются от векторных и матричных операций, выполняемых в соответствии с правилами векторного и матричного исчисления в математике.
2.1 Создание векторов
Длинный вектор можно вводить частями, которые затем объединять с помощью операции сцепления строк:
>> V1=[1 2 3];V2=[4 5 6];
>> V=[V1 V2]
V =
1 2 3 4 5 6
Для создания нового вектора из определенных в заданном порядке элементов другого вектора применяется индексация при помощи вектора. Запись в массив W пятого, второго, первого и третьего элементов V производится следующим образом:
>> ind=[5 2 1 3];
>> W=V(ind)
W =
5 2 1 3
Пусть в массиве P, соответствующем вектору-строке из девяти элементов, требуется заменить нулями элементы с третьго по седьмой. Эту задачу легко решить индексацией с помощью двоеточия.
Например,
>> P=[-1 0.1 2.2 3.4 5.6 3.1 6.8 9.7 5.5];
>> P(3:7)=0
P =
-1.0000 0.1000 0 0 0 0 0 9.7000 5.5000
Индексация при помощи двоеточия удобна при выделении части из большого объема данных в новый массив. Пусть задан массив W
>> W=[0.1 2.2 3.4 5.6 3.1 6.8 9.7];
Составим массив P, состоящий из всех элементов массива W, кроме третьего, используя двоеточие и сцепление строк:
>> P=[W(1:2) W(4:7)]
P =
0.1000 2.2000 5.6000 3.1000 6.8000 9.7000
Указание номеров элементов вектора можно использовать и при вводе векторов, последовательно добавляя новые элементы (не обязательно в порядке возрастания их номеров). Команды:
>> h=10;
>> h(2)=20;
>> h(4)=40;
приводят к образованию вектора:
>> h
h =
10 20 0 40
Заметим, что для ввода первого элемента h не обязательно указывать его индекс, т.к. при выполнении оператора h=10 создается вектор (массив размера один на один). Следующие операторы присваивания приводят к автоматическому увеличению длины вектора h, а пропущенные элементы (в нашем случае h(3)) получают значение ноль.
2.2 Поэлементные операции над векторами и матрицами
Векторы могут использоваться как аргументы различных математических функций (таких как sin, cos, exp и т.д). В результате вычисления этих функций получается вектор того же размера и типа, элементы которого равны значениям функции от соответствующих элементов вектора, заданного в качестве аргумента. Пример:
>> a=1:4
a =
1 2 3 4
>> b=sin(a)
b =
0.8415 0.9093 0.1411 -0.7568
Кроме преобразования векторов с помощью математических функций, в MATLAB можно выполнять поэлементные преобразования векторов с помощью арифметических операторов. Такие операции не относятся к традиционным математическим операциям над векторами, они лишь преобразуют элементы вектора как элементы обычного одномерного массива.
Операции поэлементного преобразования векторов могут выполнятся только над векторами одинакового размера и типа. В результате получается вектор такого же размера и типа.
Поэлементное умножение векторов осуществляется следующим образом:
>> x=[1,2,3,4,5];y=[-2,1,4,0,5];
>> z=x.*y
z =
-2 2 12 0 25
Результатом поэлементного умножения векторов x и y являеся вектор z, каждый элемент которого представляет собой произведение соответствующих элементов векторов x и y. Оператор поэлементного умножения – совокупность знаков <.*> (без пробела между точкой и звездочкой).
Поэлементное деление векторов выполняется с помощью оператора <./>.
>> u=x./y
Warning: Divide by zero.
(Type "warning off MATLAB:divideByZero" to suppress this warning.)
u =
-0.5000 2.0000 0.7500 Inf 1.0000
Результат – вектор u, элементы которого являются частным от деления соответствующих элементов векторов x и y.
Обратное поэлементное деление векторов (т.е. деление элементов второго вектора на соответствующие элементы первого) выполняется с помощью оператора <.\>.
>> v=x.\y
v =
-2.0000 0.5000 1.3333 0 1.0000
Поэлементное возведение в степень выполняется с помощью оператора <.^>.
>> t=x.^y
t =
1 2 81 1 3125
При поэлементном возведении в степень каждый элемент вектора x возводится в степень, равную соответствующему элементу вектора y.
Оригинальной в MATLAB является операция прибавления к вектору числа. Она записывается таким образом: A+x или x+A (где A – вектор, а x – число). Такая операция не относится к традиционным математическим операциям над векторами. Например,
>> a=[1 2 3 4]
a =
1 2 3 4
>> disp(a+2)
3 4 5 6
>> disp(2-a)
1 0 -1 -2
В MATLAB поэлементные операции над матрицами аналогичны поэлементным операциям над векторами. То есть матрицы могут использоваться как аргументы различных математических функций. Пример:
>> A=[1 2 3 4 5;-2 3 1 4 0]
A =
1 2 3 4 5
-2 3 1 4 0
>> B=[-1 3 5 -2 1;1 8 -3 -1 2]
B =
-1 3 5 -2 1
1 8 -3 -1 2
>> disp(sin(A))
0.8415 0.9093 0.1411 -0.7568 -0.9589
-0.9093 0.1411 0.8415 -0.7568 0
Над матрицами одинакового размера и типа определены операции поэлементного умножения
>> disp(A.*B)
-1 6 15 -8 5
-2 24 -3 -4 0
поэлементного деления
>> disp(A./B)
-1.0000 0.6667 0.6000 -2.0000 5.0000
-2.0000 0.3750 -0.3333 -4.0000 0
>> disp(A.\B)
Warning: Divide by zero.
-1.0000 1.5000 1.6667 -0.5000 0.2000
-0.5000 2.6667 -3.0000 -0.2500 Inf
поэлементного возведения в степень
>> disp(A.^B)
1.0e+003 *
0.0010 0.0080 0.2430 0.0001 0.0050
-0.0020 6.5610 0.0010 0.0003 0
Обратим внимание на результат, полученный при выполнении операции A.^B. Система MATLAB выделила общий множитель 1.0e+003 * для всех элементов результирующей матрицы.
прибавления к матрице числа
>> disp(A+2)
3 4 5 6 7
0 5 3 6 2
>> disp(4-B)
5 1 -1 6 3
3 -4 7 5 2
В результате этих операций получается матрица такого же размера и типа.
При поэлементном возведении в степень показателем степени может быть не только матрица того же размера, что и исходная, но и число.
>> disp(A.^3)
1 8 27 64 125
-8 27 1 64 0