Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Глава 02.doc
Скачиваний:
0
Добавлен:
19.09.2019
Размер:
93.7 Кб
Скачать

Глава 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]