Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция2_Работа с массивами.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
664.79 Кб
Скачать

Поэлементные операции с векторами

Выше вектор использовался в качестве аргумента математических функций, результатом которых являлся вектор с элементами, равными значениям функции от соответствующих элементов исходного вектора. Таким образом, происходило поэлементное вычисление вызываемой функции. В этом разделе подробно описаны возможности поэлементной работы с векторами, которые понадобятся в дальнейшем для определения собственных (пользовательских) функций и построения их графиков.

Введите две вектор-строки :

» vl = [2 -3 4 1 ];

» v2 = [7 5 -6 9];

Операция .* (не вставляйте пробел между точкой и звездочкой!!!) приводит к поэлементному умножению векторов одинаковой длины. В результате получается вектор с элементами, равными произведению соответствующих элементов исходных векторов:

» u = vl.*v2

u =

14 -15 -24 9

При помощи .^ осуществляется поэлементное возведение в степень:

» р = vl.^2

p =

4 9 16 1

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

P = vl.^v2

P=

128.0000 -243.0000 0.0002 1.0000

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

> d = vl./v2

d=

0.2857 -0.6000 -0.6667 0.1111

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

К поэлементным относятся и операции с вектором и числом. Сложение вектора и числа не приводит к сообщению об ошибке. MatLab прибавляет число к каждому элементу вектора. То же самое справедливо и для вычитания:

> v = [4 6 8 10] ;

> s = v + 1.2

S=

5.2000 7.2000 9.2000 11.2000

> s1 = 1.2 + v

s1=

5.2000 7.2000 9.2000 11.2000

> г = 1.2 - v

R=

2.8000 4.8000 6.8000 8.8000

> rl = v 1.2

2.8000 4.8000 6.8000 8.8000

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

> v = [4 6 8 10];

р =v*2

p=

8 12 16 20

» p1 = 2*v

P1=

8 12 16 20

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

» р = v/2

Р =

2 3 4 5

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

» р = 2/v

??? Error using ==> /

Matrix dimensions must agree.

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

» w = [4 2 6] ;

» d = 12./w

d =

3 6 2

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

Построение таблицы значений функции

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

Y(x) =(sin(x)^2/(1+cos(x))+exp(-x)*ln(x)

точках 0.2, 0.3, 0.5, 0.8, 1.3, 1.7, 2.5. Задача решается в два этапа.

  1. Создайте вектор-строку х, содержащую координаты заданных точек.

  2. Вычислите функцию у(х) от каждого элемента вектора х и запишите полученные значения в вектор-строку у. Важно только сделать это правильно! Необходимо найти значения функции для каждого из элементов вектор-строки х, поэтому операции в выражении для функции должны выполняться поэлементно, как было описано выше.

>>х = [0.2 0.3 0.5 0.8 1.3 1.7 2.5]

X=

0.2000 0.3000 0.5000 0.8000 1.3000 1.7000 2.5000

у = sin(x).^2./(1+cos(х))+ехр(-х).*log(x)

y=

-1.2978 -0.8473 -0.2980 0.2030 0.8040 1.2258 1.8764

Обратите внимание, что при попытке использования операций возведения в степень, деления / и умножения * (которые не относятся к поэлементным) выводится сообщение об ошибке уже при возведении sin (х) в квадрат:

> у = sin(x)^2/(1+cos(х))+ехр(-х)*log(x)

??? Error using ==> ^

Matrix must be square.

Дело в том, что в MatLab операции * и ^ применяются для перемножения матриц соответствующих размеров и возведения квадратной матрицы в степень.

В MatLab предусмотрено простое создание векторов, каждый элемент которых отличается от предшествующего на постоянную величину, т. е. шаг. Для ввода таких векторов служит двоеточие (не путайте с индексацией при помощи двоеточия). Следующие два оператора приводят к формированию одинаковых вектор-строк :

» х = [1, 1.2, 1.4, 1.6, 1.8, 2.0]

х =

1.0000 1.2000 1.4000 1.6000 1.8000 2.0000

» х = [1:0.2:2]

х =

1.0000 1.2000 1.4000 1.6000 1.8000 2.0000

Условно можно записать

х = [начальное значение : шаг : конечное значение]

Необязательно заботиться о том, чтобы сумма предпоследнего значения и шага равнялась бы конечному значению, например, при выполнении следующего оператора присваивания

» х = [1:0.2:1.9]

х =

1.0000 1.2000 1.4000 1.6000 1.8000

вектор-строка заполнится до элемента, не превосходящего определенное нами конечное значение. Шаг может быть и отрицательным:

x= [1.9 :-0.2 :1]

x=

1.9000 1.7000 1.5000 1.3000 1.1000

В случае отрицательного шага для получения непустой вектор-строки начальное значение должно быть больше конечного.

Попробуйте заполнить вектор-столбец элементами, начинающимися с нуля и заканчивающимися 0.5 с шагом 0.1. Для этого следует задать вектор-строк у, а затем использовать операцию транспонирования:

x= [0 : 0.1 : 0.5] '

x=

0

0.1000

0.2000

0.3000

0.4000

0.5000

Обратите внимание, что элементы вектора, заполняемого при помощи двоеточия, могут быть только вещественные, поэтому для транспонирования можно использовать апостроф вместо точки с апострофом.

Шаг, равный единице, допускается не указывать при автоматическом заполнении:

> х = [1:5]

x=

1 2 3 4 5

Выведите теперь таблицу значений функции

на отрезке [0, 1] с шагом 0.05, произведя следующие действия:

  1. Сформируйте вектор-строку х при помощи двоеточия.

  2. Вычислите значения у(х)от элементов х (не забудьте использовать поэлементное умножение).

  3. Запишите результат в вектор-строк у у.

  4. Выведите х и у.

Результат, отображенный на экране, не очень напоминает таблицу:

> х = [0:0.05:1];

» у = ехр(-х).*sin(10*x) ;

» x

x =

Columns 1 through 7

0 0.0500 0.1000 0.1500 0.2000 0.2500 0.3000

Columns 8 through 14

0.3500 0.4000 0.4500 0.5000 0.5500 0.6000 0.6500 Columns 15 through 21

0.7000 0.7500 0.8000 0.8500 0.9000 0.9500 1.0000 » y

y=

Columns 1 through 7

0 0.4560 0.7614 0.8586 0.7445 0.4661 0.1045

Columns 8 through 14

-0.2472 -0.5073 -0.6233 -0.5816 -0.4071 -0.1533 -0.1123 Columns 15 through 21

0.3262 0.4431 0.4445 0.3413 0.1676 -0.0291 -0.2001

Вектор-строки х и у состоят из двадцати одного элемента, не помещаются на экране в одну строку и выводятся по частям. Так как х и у хранятся в двумерных массивах размерностью один на двадцать один, то выводятся по столбцам, каждый из которых состоит из одного элемента. Сначала выводятся столбцы с первого по седьмой (columns i through 7), затем — с восьмого по четырнадцатый (columns 8 through 14), и наконец — с пятнадцатого по двадцать первый (columns is through 21). Более наглядным и удобным является графическое представление функции.

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