Главная страница

Учебное пособие для студентов высших учебных заведений


Скачать 5.41 Mb.
НазваниеУчебное пособие для студентов высших учебных заведений
Дата10.03.2022
Размер5.41 Mb.
Формат файлаpdf
Имя файлаmatlab.pdf
ТипУчебное пособие
#390741
страница4 из 44
1   2   3   4   5   6   7   8   9   ...   44
Задание 1.4.
Найдите корни квадратного уравнения
a x
b x c

+ ⋅ + =
2 0
при заданных значениях коэффициентов a, b и c (см. таблицу 1.2).
Таблица 1.2
Вариант
а
b
c
1 0.56 1.2е-4 4.08 2
1 0.1 100

1. 2. Операции с числами
28
3 4. 2e-3 8. 03e-4 1.06 4
7. 1e3 9. 4e4 8. 3e10 5
5.09 4.32 256 6
8.3 5.34 693 7
27 27 1276 8
3.08 0.2 30 9
5.3 10.6 876 10 0.45 0. 034 121 11 4.3 10.7 3. 4e3 12 13 0.8 287 13 6. 035 5.2 875 14 2.3 7.9 324 15 1
0.02 16.57 16 1.3 0.56 18.8 17 0.13 0. 056 18.8 18 17 12 956 19 0. 085 1
1. 3e3 20 1.2 0.32 15 21 7.1 6.4 256 22 0.2 0. 002 2.9 23 1. 4e-3 3.9 2. 6e2 24 0.86 3.2 5. 4e2 25 7. 3e3 8. 2e2 3. 5e8
1.2.9. Вопросы
1. Как представляются действительные числа при вычислениях в системе
MatLAB?
2. Как изменить формат представления действительных чисел в командном окне?
3. Каким образом объявляются переменные в языке MatLAB?
4. Как сделать так, чтобы результат действий, записанных в очередной строке а) выводился в командное окно; б) не выводился на экран?
5. Какую роль играет системная переменная
ans
?
6. Как возвратить в командную строку ранее введенную команду?
7. Как ввести значения комплексного числа, и в каком виде оно выведется на экран?
8.
Как на языке MatLAB обеспечить сложение, вычитание, умножение, де- ление и возведение в степень комплексных чисел?
9.
Какие функции работы с комплексными числами предусмотрены в языке
MatLAB?

1.3. Операции с векторами и матрицами
29
1.3. Простейшие операции с векторами и матрицами
MatLAB - система, специально предназначенная для осуществления слож- ных вычислений с векторами, матрицами и полиномами. Под вектором в MatLAB понимается одномерный массив чисел, а под матрицей - двумерный массив. При этом по умолчанию предполагается, что любая заданная переменная является век- тором или матрицей. Например, отдельное заданное число система воспринимает как матрицу размером (1*1), а вектор-строку из N элементов - как матрицу разме- ром (1*N).
1.3.1. Ввод векторов и матриц
Начальные значения векторов можно задавать с клавиатуры путем поэле- ментного ввода. Для этого в строке следует сначала указать имя вектора, потом поставить знак присваивания ' = ', затем, - открывающую квадратную скобку, а за ней ввести заданные значения элементов вектора, отделяя их пробелами или за-
пятыми. Заканчивается строка записью закрывающей квадратной скобки.
Например, запись строки V = [ 1.2 -0.3 1.2e-5] задает вектор V, который со- держит три элемента со значениями 1.2, -0.3 и 1.2е-5 (рис. 1.14):
Рис. 1.14
После введения вектора система выводит его на экран. То, что в приведен- ном примере последний элемент выведен как 0, обусловлено установленным форматом short, в соответствии с которым выводятся данные на экран.
Длинный вектор можно вводить частями, которые потом объединять с по- мощью операции объединения векторов в строку : v = [ v1 v2 ]. Например:
Рис. 1.15
Язык MatLAB дает пользователю возможность сокращенного введения век-
тора, значения элементов которого составляют арифметическую прогрессию.
Если обозначить: nz - начальное значение этой прогрессии (значение первого эле-

1.3. Операции с векторами и матрицами
30
мента вектора); kz - конечное значение прогрессии (значение последнего элемен- та вектора); h - разность прогрессии (шаг), то вектор можно ввести с помо- щью короткой записи V = nz : h : kz . Например, введение строки V = - 0.1 : 0.3 :
1.4 приведет к такому результату:
Рис. 1.16
Если средний параметр (разность прогрессии) не указан, то он по умолча- нию принимается равным единице. Например, команда
>> -2.1 : 5
приводит к формированию такого вектора ans = -2.1000 -1.1000 -0.1000 0.9000 1.9000 2.9000 3.9000 4. 9000
Так вводятся векторы-строки. Вектор-столбец вводится аналогично, но
значения элементов отделяются знаком ";".
Ввод значений элементов матрицы осуществляется в MatLAB в квадратных скобках, по строкам. При этом элементы строки матрицы один от другого отде- ляются пробелом или запятой, а строки одна от другой отделяются знаком ";"
(рис. 1.17).
Рис. 1.17
1.3.2. Формирование векторов и матриц
MatLAB имеет несколько функций, которые позволяют формировать векто- ры и матрицы некоторого определенного вида. К таким функциям относятся:
zeros(М,N) - создает матрицу размером (М*N) с нулевыми элементами, на- пример:
» zeros(3,5)
ans =
0 0 0 0 0

1.3. Операции с векторами и матрицами
31
0 0 0 0 0 0 0 0 0 0
ones(М,N) - создает матрицу размером (М*N) с единичными элементами, например:
» ones(3,5)
ans =
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
eye(М,N) - создает единичную матрицу размером (М*N), т. е. с единицами по главной диагонали и остальными нулевыми элементами, например:
» eye(3,5)
ans =
1 0 0 0 0 0 1 0 0 0 0 0 1 0 0
rand(М,N) - создает матрицу размером (М*N) из случайных чисел, равно- мерно распределенных в диапазоне от 0 до 1, например:
» rand(3,5)
ans =
2.1896e-001 6.7930e-001 5.1942e-001 5.3462e-002 7.6982e-003 4. 7045e-002 9. 3469e-001 8. 3097e-001 5. 2970e-001 3. 8342e-001 6. 7886e-001 3. 8350e-001 3. 4572e-002 6. 7115e-001 6. 6842e-002
randn(М,N) - создает матрицу размером (М*N) из случайных чисел, рас- пределенных по нормальному (гауссовому) закону с нулевым математическим ожиданием и стандартным (среднеквадратичным) отклонением, равным единице, например:
» randn(3,5)
ans =
1.1650e+000 3.5161e-001 5.9060e-002 8.7167e-001 1.2460e+000 6. 2684e-001 -6. 9651e-001 1. 7971e+000
-1. 4462e+000 -6. 3898e-001 7. 5080e-002 1. 6961e+000 2. 6407e-001
-7. 0117e-001 5. 7735e-001
hadamard(N) - создает матрицу Адамара размером (N*N), например:
» hadamard(4)
ans =
1 1 1 1 1 -1 1 -1 1 1 -1 -1 1 -1 -1 1
hilb(N) - создает матрицу Гільберта размером (N*N), например:
» hilb(4)
ans =
1.0000e+000 5.0000e-001 3.3333e-001 2.5000e-001 5.0000e-001 3.3333e-001 2.5000e-001 2.0000e-001 3. 3333e-001 2. 5000e-001 2. 0000e-001 1. 6667e-001 2. 5000e-001 2. 0000e-001 1. 6667e-001 1. 4286e-001
invhilb(N) - создает обратную матрицу Гильберта размером (N*N), на- пример:
» invhilb(4)
ans =
16
-120 240 -140
-120 1200 -2700 1680 240 -2700 6480 -4200
-140 1680 -4200 2800

1.3. Операции с векторами и матрицами
32
pascal(N) - создает матрицу Паскаля размером (N*N), например:
» pascal(5)
ans =
1 1 1 1 1 1 2 3 4 5 1 3 6 10 15 1 4 10 20 35 1 5 15 35 70.
В языке MatLAB предусмотрено несколько функций, которые позволяют формировать матрицу на основе другой (заданной) или используя некоторый за- данный вектор. К таким функциям принадлежат:
fliplr(A) - формирует матрицу, переставляя столбцы известной матрицы А относительно вертикальной оси, например:
A =
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
» fliplr(A)
ans =
6 5 4 3 2 1 12 11 10 9 8 7 18 17 16 15 14 13
flipud(A) - переставляет строки заданной матрицы А относительно горизон- тальной оси, например:
» flipud(A)
ans =
13 14 15 16 17 18 7 8 9 10 11 12 1 2 3 4 5 6
rot90(A) - формирует матрицу путем "поворота" заданной матрицы А на
90 градусов против часовой стрелки:
» rot90(A)
ans =
6 12 18 5 11 17 4 10 16 3 9 15 2 8 14 1 7 13
reshape(A,m,n) - образует матрицу размером (m*n) путем выборки элемен- тов заданной матрицы А по столбцам и последующему распределению этих эле- ментов по 'n' столбцам, каждый из которых содержит 'm' элементов; при этом чис- ло элементов матрицы А должно равняться m*n, например:
» reshape(A,2,9)
ans =
1 13 8 3 15 10 5 17 12 7 2 14 9 4 16 11 6 18
tril(A) - образует нижнюю треугольную матрицу на основе матрицы А пу- тем обнуления ее элементов выше главной диагонали:
» tril(A)
ans =
1 0 0 0 0 0 7 8 0 0 0 0

1.3. Операции с векторами и матрицами
33
13 14 15 0 0 0
triu(A) - образует верхнюю треугольную матрицу на основе матрицы А пу- тем обнуления ее элементов ниже главной диагонали:
» triu(A)
ans =
1 2 3 4 5 6 0 8 9 10 11 12 0 0 15 16 17 18
hankel(V) - образует квадратную матрицу Ганкеля, первый столбец которой совпадает с заданным вектором V, например:
>> V = [-5 6 7 4]
V = -5 6 7 4
» hankel(V)
ans =
-5 6 7 4 6 7 4 0 7 4 0 0 4 0 0 0
Процедура diag(х) - формирует или извлекает диагональ матрицы.
Если х - вектор, то функция diag(х) создает квадратную матрицу с вектором
х на главной диагонали:
»
diag(V)
ans =
-5 0 0 0 0 6 0 0 0 0 7 0 0 0 0 4
Чтобы установить заданный вектор на другую диагональ, при обращении к функции необходимо указать еще один параметр (целое число) - номер диагонали
(при этом диагонали отсчитываются от главной вверх), например:
» diag(V, -1) ans =
0 0 0 0 0
-5 0 0 0 0 0 6 0 0 0 0 0 7 0 0 0 0 0 4 0
Если х - матрица, то функция diag создает вектор-столбец, который состоит из элементов главной диагонали заданной матрицы х, например, для матрицы А, указанной перед примером применения процедуры fliplr:
» diag(A)
ans =
1 8
15
Если при этом указать дополнительно номер диагонали, то можно получить вектор-столбец из элементов любой диагонали матрицы х, например:
» diag(A,3)
ans =
4 11 18

1.3. Операции с векторами и матрицами
34
Функция zeros(1,N) формирует (создает) вектор-строку из N нулевых эле- ментов. Аналогично zeros(N,1) создает вектор-столбец из N нулей.
Векторы, значения элементов которых являются случайными равномерно распределенными, формируются таким образом: rand(1,n) - для вектора-строки и
rand(m,1) - для вектора-столбца.
1.3.3. Извлечение и вставка частей матриц
Прежде всего отметим, что обращение к любому элементу заданной матри-
цы в MatLAB осуществляется путем указания (в скобках, через запятую) после
имени матрицы двух целых положительных чисел, которые определяют соот-
ветственно номера строки и столбца матрицы, на пересечении которых распо-
ложен этот элемент.
Пусть имеем некоторую матрицу А:
>> A = [ 1 2 3 4; 5 6 7 8; 9 10 11 12]
A =
1 2 3 4 5 6 7 8 9 10 11 12
Тогда получить значение элемента этой матрицы, расположенного на пере- сечении второй строки с третьим столбиком, можно следующим образом:
>> A(2,3)
ans = 7
Если нужно, наоборот, установить на это место некоторое число, например,
π
, то это можно сделать так:
>> A(2, 3) = pi; A
A =
1.0000 2.0000 3.0000 4.0000 5. 0000 6. 0000 3. 1416 8. 0000 9. 0000 10. 0000 11. 0000 12. 0000
Иногда нужно создать меньшую матрицу из большей, формируя ее путем извлечения из последней матрицы элементов ее нескольких строк и столбцов, или, наоборот, вставить меньшую матрицу таким образом, чтобы она стала определен- ной частью матрицы большего размера. Это в MatLAB делается с помощью знака двоеточия (" : ").
Рассмотрим эти операции на примерах.
Пусть нужно создать вектор V1, состоящий из элементов третьего столбца последней матрицы А. Для этого произведем такие действия:
>> V1 = A(:, 3)
V1 =
3.0000 3. 1416 11. 0000
Чтобы создать вектор V2, состоящий из элементов второй строки матрицы
А, поступают так:
>> V2 = A(2, : )
V2 = 5. 0000 6. 0000 3. 1416 8. 0000

1.3. Операции с векторами и матрицами
35
Допустим, что необходимо из матрицы А образовать матрицу В размером
(2*2), которая состоит из элементов левого нижнего угла матрицы А. Тогда дела- ют так:
>> B = A(2:3, 1:2)
B =
5 6 9 10
Аналогично можно вставить матрицу В в верхнюю середину матрицы А:
>> A(1:2,2:3)=B
A =
1 5 6 4 5 9 10 8 9 10 11 12
Как видно, для этого вместо указания номеров элементов матрицы можно
указывать диапазон изменения этих номеров путем указания нижней и верхней
границ, разделяя их двоеточием.
Примечание. Если верхней границей изменения номеров элементов матри-
цы является ее размер в этом измерении, вместо него можно использовать слу-
жебное слово end. Например:
>> A(2:end,2:end)
ans =
9 10 8 10 11 12
Эти операции очень удобны для формирования матриц, большинство эле- ментов которых одинаковы, в частности, так называемых разреженных матриц, которые состоят, в основном, из нулей, за исключением отдельных элементов.
Для примера рассмотрим формирование разреженной матрицы размером (5*7) с единичными элементами в ее центре:
>> A = zeros(5,7);
>> B = ones(3,3);
>> A(2:4,3:5)=B
A =
0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0
"Растянуть" матрицу (А) в единый вектор (V) можно с помощью обычной записи "V = A(:)". При этом создается вектор-столбец с количеством элементов
(m*n), в котором столбцы заданной матрицы размещены сверху вниз в порядке самих столбцов:
» A = [1 2 3; 4 5 6]
A =
1 2 3 4 5 6
» v = A(:)
v =
1 4
2 5
3

1.3. Операции с векторами и матрицами
36
6
Наконец, "расширить" матрицу, составляя ее из отдельных заданных матриц
("блоков") можно тоже довольно просто. Если заданы несколько матриц-блоков
А1, А2,... АN с одинаковым количеством строк, то из них можно "слепить" еди- ную матрицу А, объединяя блоки в одну "строку" таким образом:
A = [A1, A2,... , AN].
Эту операцию называют горизонтальной конкатенацией (сцеплением) мат- риц. Вертикальная конкатенация матриц реализуется (при условии, что все со- ставные блоки-матрицы имеют одинаковое количество столбцов) аналогично, пу- тем применения для отделения блоков вместо запятой точки с запятой:
A = [A1; A2;... ; AN].
Приведем примеры. Пример горизонтальной конкатенации:
>> A1 = [1 2 3; 4 5 6; 7 8 9];
>> A2 = [10;11;12];
>> A3 = [14 15; 16 17; 18 19];
>> A = [A1, A2, A3]
A =
1 2 3 10 14 15 4 5 6 11 16 17 7 8 9 12 18 19
Пример вертикальной конкатенации:
>> B1 = [1 2 3 4 5];
>> B2 = [6 7 8 9 10; 11 12 13 14 15];
>> B3 = [17 18 19 20 21];
>> B = [B1; B2; B3]
B =
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 17 18 19 20 21
1.3.4. Действия над векторами
Будем различать две группы действий над векторами:
а) векторные действия - т. е. такие, которые предусмотрены векторным исчислением в математике; б) действия по преобразованию элементов - это действия, которые преобра- зуют элементы вектора, но не являются операциями, разрешенными математикой.
Векторные действия над векторами
Сложение векторов. Как известно, суммироваться могут только векторы одинакового типа (т. е. такие, которые являются или векторами-строками, или векторами-столбцами), имеющие одинаковую длину (т. е. одинаковое количество элементов). Если X и Y - именно такие векторы, то их сумму Z можно получить, введя команду Z = X + Y, например:
» x = [1 2 3]; y = [4 5 6];
» v = x + y
v = 5 7 9

1.3. Операции с векторами и матрицами
37
Аналогично с помощью арифметического знака ' - ' осуществляется вычи-
тание векторов, имеющих одинаковую структуру (Z = X - Y).
Например:
» v = x - y
v = -3
-3
-3
Транспонирование вектора осуществляется применением знака апостро-
фа, который записывается сразу за записью имени вектора, который нужно транспонировать. Например:
» x'
ans =
1 2
3
Умножение вектора на число осуществляется в MatLAB с помощью знака арифметического умножения ' * ' таким образом: Z = X*r или Z = r*X, где r - не- которое действительное число.
Пример:
» v = 2*x
v = 2 4 6
Умножение двух векторов определено в математике только для векторов одинакового размера (длины) и лишь тогда, когда один из векторов-множителей строка, а второй - столбец. Иначе говоря, если векторы X и Y являются строками, то математическое смысл имеют лишь две формы умножения этих векторов: U =
X' * Y и V = X * Y'. При этом в первом случае результатом будет квадратная мат- рица, а во втором - число. В МatLAB умножение векторов осуществляется приме- нением обычного знака умножения ' * ', который записывается между множите- лями-векторами.
Пример:
» x = [1 2 3] ; y = [ 4 5 6];
» v = x' * y
v =
4 5 6 8 10 12 12 15 18
» v = x * y'
v = 32
Для трехкомпонентных векторов в MatLAB существует функция cross, ко- торая позволяет найти векторное произведение двух векторов. Для этого, если заданы два трехкомпонентных вектора v1 и v2, достаточно ввести оператор
cross(v1, v2).
Пример:
» v1 = [1 2 3]; v2 = [4 5 6];
1   2   3   4   5   6   7   8   9   ...   44


написать администратору сайта