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

Лаб_практикум_ОВИ_03_06_13

.pdf
Скачиваний:
66
Добавлен:
14.04.2015
Размер:
4 Мб
Скачать

Деление соответствующих элементов векторов одинаковой длины выполняется с использованием операции ./

» d = v1./v2

d =

0.2857 -0.6000 -0.6667 0.1111

Обратное поэлементное деление (деление элементов второго вектора на соответствующие элементы первого) осуществляется при помощи

операции .\

» dinv = vl.\v2

dinv =

3.5000 -1.6667 -1.5000 9.0000

Итак, точка в MATLAB используется не только для ввода десятичных дробей, но и для указания того, что деление или умножение массивов одинакового размера должно быть выполнено поэлементно.

К поэлементным относятся и операции с вектором и числом.

Сложение вектора и числа не приводит к сообщению об ошибке. MATLAB

прибавляет число к каждому элементу вектора. То же самое справедливо и для вычитания:

»v = [4 6 8 10];

»s = v + 1.2

s =

5.2000 6.2000 9.2000 11.2000

» r = 1.2 - v r =

-2.8000 -4.8000 -6.8000 -8.8000

31

» r1 = v - 1.2 r1 =

2.8000 4.8000 6.8000 8.8000

Умножать вектор на число можно как справа, так и слева:

»v = [4 6 8 10];

»p = v*2

р =.

 

 

 

8

12

16

20

» pi = 2*v

 

 

pi =

 

 

 

8

12

16

20

Делить при помощи знака / можно вектор на число:

» р = v/2 p =

2 3 4 5

Попытка деления числа на вектор приводит к сообщению об ошибке:

» р = 2/v

??? Error using ==> /

Matrix dimensions must agree.

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

» w = [4 2 6];

32

» d = 12./w

d = 3 6 2

Все вышеописанные операции применимы как к вектор-строкам, так и к вектор-столбцам.

Особенность MATLAB представлять все данные в виде массивов является очень удобной. Пусть, например, требуется вычислить значение функции sin сразу для всех элементов вектора с (который хранится в массиве с) и записать результат в вектор d. Для получения вектора d

достаточно использовать один оператор присваивания:

» d = sin(с)

d =

0.8546

0.5010

0.5712

Итак, встроенные в MATLAB элементарные функции приспосабливаются к виду аргументов; если аргумент является массивом,

то результат функции будет массивом того же размера, но с элементами,

равными значению функции от соответствующих элементов исходного массива. Убедитесь в этом еще на одном примере. Если необходимо найти квадратный корень из элементов вектора d со знаком минус, то достаточно записать:

» sqrt(-d) ans =

0 + 0.9244i

0 + 0.7078i

0 + 0.7558i

33

Оператор присваивания не использовался, поэтому пакет MATLAB

записал ответ в стандартную переменную ans.

Для определения длины вектор-столбцов или вектор-строк служит встроенная функция length:

» length(s1)

ans =

4

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

»v1 = [1; 2];

»v2 = [3; 4; 5];

»v = [v1; v2]

v =

1

2

3

4

5

Для сцепления вектор-строк также применяются квадратные скобки,

но сцепляемые вектор-строки отделяются пробелами или запятыми:

»v1 = [1 2];

»v2 = [3 4 5];

»v = [v1 v2]

v =

1 2 3 4 5

34

Работа с элементами векторов

Доступ к элементам вектор-столбца или вектор-строки осуществляется при помощи индекса, заключаемого в круглые скобки после имени массива, в котором хранится вектор. Если среди переменных рабочей среды есть массив v, определенный вектор-строкой

» v = [1.3 3.6 7.4 8.2 0.9];

то для вывода, например его четвертого элемента, используется

индексация:

» v(4)

ans =

8.2000

Появление элемента массива в левой части оператора присваивания приводит к изменению в массиве

» v(2) = 555 v =

1.3000 555.0000 7.4000 8.2000 0.9000

Из элементов массива можно формировать новые массивы, например

» u = [v(3); v(2); v(1)] u =

7.4000

555.0000

1.3000

35

Для помещения определенных элементов вектора в другой вектор в заданном порядке служит индексация при помощи вектора. Запись в массив w четвертого, второго и пятого элементов v производится следующим образом:

»ind = [4 2 5];

»w = v(ind)

w =

8.2000 555.0000 0.9000

MATLAB предоставляет удобный способ обращения к блокам последовательно расположенных элементов вектор-столбца или вектор-

строки. Для этого служит индексация при помощи знака двоеточия.

Предположим, что в массиве w, соответствующем вектор-строке из семи элементов, требуется заменить нулями элементы со второго по шестой.

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

»w = [0.1 2.9 3.3 5.1 2.6 7.1 9.8];

»w(2:6) = 0;

»w

w =

0.1000 0 0 0 0 0 9.8000

Присваивание w(2:6) = 0 эквивалентно последовательности команд w(2) = 0; w(3) = 0; w(4) = 0; w(5) = 0; w(6) = 0.

Индексация при помощи двоеточия оказывается удобной при выделении части из большого объема данных в новый массив:

» w - [0.1 2.9 3.3 5.1 2.6 7.1 9.8];

36

» wl = w(3:5)

wl =

3.3000 5.1000 2.6000

Составьте массив w2, содержащий элементы w, кроме четвертого. В

этом случае удобно использовать двоеточие и сцепление строк:

» w2 = [w(l:3) w(5:7)]

w2 =

0.1000 2.9000 3.3000 2.6000 7.1000 9.8000

Элементы массива могут входить в выражения. Нахождение,

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

» gm = (u(l)*u(2)*u(3))^(l/3)

gm =

17.4779

Конечно, этот способ не очень удобен для длинных массивов. Для того чтобы найти среднее геометрическое, необходимо набрать в формуле все элементы массива. В MATLAB существует достаточно много специальных функций, облегчающих подобные вычисления.

Применение функций обработки данных к векторам

Перемножение элементов вектор-столбца или вектор-строки осуществляется при помощи функции prod:

»z = [3; 2; 1; 4; 6; 5];

»р = prod(z)

37

p =

720

Функция sum предназначена для суммирования элементов вектора. С

ее помощью нетрудно вычислить среднее арифметическое элементов вектора z:

» sum(z)/length(z)

ans =

3.5000

В MATLAB имеется и специальная функция mean для вычисления среднего арифметического:

» mean(z)

ans =

3.5000

Для определения минимального и максимального из элементов вектора служат встроенные функции min и max:

» m1 = max(z) m1 =

6

» m2 = min(z) m2 =

1

Часто необходимо знать не только значение минимального или максимального элемента в массиве, но и его индекс (порядковый номер). В

38

этом случае встроенные функции min и max необходимо использовать с двумя выходными аргументами, например

» [m, k] = min(z) m =

1

k =

3

В результате переменной m будет присвоено значение минимального элемента массива z, а номер минимального элемента занесен в переменную k.

Для получения информации о различных способах использования функций следует набрать в командной строке help и имя функции.

MATLAB выведет в командное окно всевозможные способы обращения к функции с дополнительными пояснениями.

В число основных функций для работы с векторами входит функция упорядочения вектора по возрастанию его элементов sort

»r = [9.4 -2.3 -5.2 7.1 0.8 1.3];

»R = sort(r)

R =

-5.2000 -2.3000 0.8000 1.3000 7.1000 9.4000

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

функцию sort:

» R1 = -sort(-r)

R1 =

9.4000 7.1000 1.3000 0.8000 -2.3000 -5.2000

39

Упорядочение элементов в порядке возрастания их модулей

производится с привлечением функции abs:

» R2 = sort(abs(r))

R2 =

0.8000 1.3000 2.3000 5.2000 7.1000 9.4000

Вызов sort с двумя выходными аргументами приводит к образованию массива индексов соответствия элементов упорядоченного и исходного массивов:

» [rs, ind] = sort(r) rs =

-5.2000

-2.3000 0.8000 1.3000 7.1000 9.4000

ind =

 

 

 

 

 

3

2

5

6

4

1

2.2.Индивидуальные задания

1.Создайте журнал выполнения лабораторной работы.

2.Вычислите значения функции

y(x)

 

sin 2 x

e xln x

 

cos x

1

 

в точках 0.2, 0.3, 0.5, 0.8, 1.3, 1.7, 2.5, N, k, где N ваш номер по списку журнала группы; k численное значение выражения, заданного табл. 1.1 и

табл. 1.2 в соответствии с номером N по списку в журнале группы,

записанном в виде N = СМ, где С старшая цифра, М младшая цифра.

40

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