Учебное пособие для студентов высших учебных заведений
Скачать 5.41 Mb.
|
» cross(v1,v2) ans = -3 6 -3 На этом перечень допустимых математических операций с векторами ис- черпывается. 1.3. Операции с векторами и матрицами 38 Поэлементное преобразование векторов В языке MatLAB предусмотрен ряд операций, которые преобразуют задан- ный вектор в другой того же размера и типа, но не являются операциями с векто- ром как математическим объектом. К таким операциям относятся, например, все элементарные математические функции, приведенные в разделе 1.2.4 и которые зависят от одного аргумента. В языке MatLAB запись, например, вида Y = sin(X), где X - некоторый известный вектор, приводит к формированию нового вектора Y, имеющего тот же тип и размер, но элементы которого равняются синусам со- ответствующих элементов вектора-аргумента X. Например: » x = [ -2,-1,0,1,2]; » y = sin(x) y = -0. 9093 -0. 8415 0 0. 8415 0. 9093 » z = tan(x) z = 2. 1850 -1. 5574 0 1. 5574 -2. 1850 » v = exp(x) v = 0. 3679 1. 0000 2. 7183 7. 389 Кроме этих операций в МаtLAB предусмотрено несколько операций поэле- ментного преобразования, осуществляемых с помощью знаков обычных арифме- тических действий. Эти операции применяются к векторам одинакового типа и размера. Результатом их есть вектор того же типа и размера. Добавление (отнимание) числа к (из) каждому элемента вектора. Осу- ществляется с помощью знака ' + ' (' - '). Поэлементное умножение векторов. Проводится с помощью совокупно- сти знаков ' .* ', которая записывается между именами перемножаемых векторов. В результате получается вектор, каждый элемент которого является произведени- ем соответствующих элементов векторов - "сомножителей". Поэлементное деление векторов. Осуществляется с помощью совокупно- сти знаков './ '. Результат - вектор, каждый элемент которого является частным от деления соответствующего элемента первого вектора на соответствующий эле- мент второго вектора. Поэлементное деление векторов в обратном направлении. Осуществля- ется с помощью совокупности знаков '.\ '. В результате получают вектор, каждый элемент которого является частным от деления соответствующего элемента вто- рого вектора на соответствующий элемент первого вектора. Поэлементное возведение в степень. Осуществляется с помощью сово- купности знаков '.^ '. Результат - вектор, каждый элемент которого является соот- ветствующим элементом первого вектора, возведенным в степень, величина кото- рой равняется значению соответствующего элемента второго вектора. Примеры: » x = [1,2,3,4,5]; y = [-2,1,4,0,5]; » disp(x + 2) 3 4 5 6 7 » disp(y - 3) -5 -2 1 -3 2 » disp(x. *y) -2 2 12 0 25 » disp(x. /y) 1.3. Операции с векторами и матрицами 39 Warning: Divide by zero -0. 5000 2. 0000 0. 7500 Inf 1. 0000 » disp(x. \y) -2. 0000 0. 5000 1. 3333 0 1. 0000 » disp(x. ^y) 1 2 81 1 3125 Вышеуказанные операции позволяют очень просто вычислять (а затем - строить графики) сложные математические функции, не используя при этом опе- раторы цикла, т. е. осуществлять построение графиков в режиме калькулятора. Для этого достаточно задать значение аргумента как арифметическую прогрессию так, как это было показано в п. 1.3.1, а потом записать нужную функцию, исполь- зуя знаки поэлементного преобразования векторов. Например, пусть нужно вычислить значения функции: y a e x hx = ⋅ ⋅ − sin при значениях аргумента х от 0 до 10 с шагом 1. Вычисление массива значений этой функции в указанных условиях можно осуществить с помощью лишь двух простых операторов : » a = 3; h = 0.5; x = 0:10; » y = a * exp(-h*x) . * sin(x) y = Columns 1 through 7 0 1.5311 1.0035 0.0945 -0.3073 -0.2361 -0.0417 Columns 8 through 11 0. 0595 0. 0544 0. 0137 -0. 0110 1.3.5. Поэлементное преобразование матриц Для поэлементного преобразования матрицы пригодны все указанные ранее в п. 1.2.4 алгебраические функции. Каждая такая функция формирует матрицу то- го же размера, что и заданная, каждый элемент которой вычисляется как указан- ная функция от соответствующего элемента заданной матрицы.Кроме этого, в 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 » sin(A) ans = 0. 8415 0. 9093 0. 1411 -0. 7568 -0. 9589 -0. 9093 0. 1411 0. 8415 -0. 7568 0 1.3. Операции с векторами и матрицами 40 » A . * B ans = -1 6 15 -8 5 -2 24 -3 -4 0 » A . / B ans = -1. 0000 0. 6667 0. 6000 -2. 0000 5. 0000 -2. 0000 0. 3750 -0. 3333 -4. 0000 0 » A . \ B Warning: Divide by zero ans = -1. 0000 1. 5000 1. 6667 -0. 5000 0. 2000 -0. 5000 2. 6667 -3. 0000 -0. 2500 Inf » A . ^ B ans = 1. 0e+003 * 0. 0010 0. 0080 0. 2430 0. 0001 0. 0050 -0. 0020 6. 5610 0. 0010 0. 0002 0 Оригинальной в языке MatLAB является операция прибавления к матрице числа. Она записывается следующим образом: A + x, или х + A (А - матрица, а x - число). Такой операции нет в математике. В MatLAB она эквивалентна совокуп- ности операций А + х * Е, где Е - обозначение матрицы, которая состоит только из единиц, тех же размеров, что и матрица А. Например: » A = [ 1 2 3 4 5; 6 7 8 9 11 ] A = 1 2 3 4 5 6 7 8 9 11 » A + 2 ans = 3 4 5 6 7 8 9 10 11 13 » 2 + A ans = 3 4 5 6 7 8 9 10 11 13 1.3.6. Матричные действия над матрицами К матричным действиям над матрицами относят такие операции, которые используются в матричном исчислении в математике и не противоречат ему. Базовые действия с матрицами - сложение, вычитание, транспонирова- ние, умножение матрицы на число, умножение матрицы на матрицу, возве- дение матрицы в целую степень - осуществляются в языке MatLAB с помощью обычных знаков арифметических операций. При использовании этих операций важно помнить условия, при которых эти операции являются возможными: при сложении или вычитании матрицы должны иметь одинаковые разме- ры; при умножении матриц количество столбцов первой матрицы должно сов- падать с количеством строк второй матрицы. 1.3. Операции с векторами и матрицами 41 Невыполнение этих условий приведет к появлению в командном окне со- общения об ошибке. Приведем несколько примеров. Пример сложения и вычитания: » A = [ 1 2 3 4 5; 6 7 8 9 11 ] A = 1 2 3 4 5 6 7 8 9 11 » B = [ 0 -1 -2 -3 -4; 5 6 7 8 9 ] B = 0 -1 -2 -3 -4 5 6 7 8 9 » A + B ans = 1 1 1 1 1 11 13 15 17 20 » A - B ans = 1 3 5 7 9 1 1 1 1 2. Пример умножения на число: » 5*A ans = 5 10 15 20 25 30 35 40 45 55 » A*5 ans = 5 10 15 20 25 30 35 40 45 55. Пример транспонирования матрицы: » A' ans = 1 6 2 7 3 8 4 9 5 11. Пример умножения матрицы на матрицу: » A' * B ans = 30 35 40 45 50 35 40 45 50 55 40 45 50 55 60 45 50 55 60 65 55 61 67 73 79 » С = A * B' С = -40 115 -94 299. Функция обращения матрицы - inv(A) - вычисляет матрицу, обратную за- данной матрице А. Исходная матрица А должна быть квадратной, а ее определи- тель не должен равняться нулю. Приведем пример: » inv(C) ans = -2. 6000e-001 1. 0000e-001 1.3. Операции с векторами и матрицами 42 -8. 1739e-002 3. 4783e-002 Проверим правильность выполнения операции обращения, применяя ее еще раз к полученному результату: » inv(ans) ans = -4. 0000e+001 1. 1500e+002 -9. 4000e+001 2. 9900e+002 Как видим, мы получили исходную матрицу С, что является признаком пра- вильности выполнения обращения матрицы. Возведение матрицы в целую степень осуществляется в MatLAB с помо- щью знака "^": А^n. При этом матрица должна быть квадратной, а n - целым (по- ложительным или отрицательным) числом. Это матричное действие эквивалентно умножению матрицы А на себя n раз (если n - положительно) или умножению обратной матрицы на себя (при n отрицательно). Приведем пример: » A^2 ans = 8 -3 -10 -5 10 16 -2 4 9 » A^(-2) ans = 1.5385e-001 -7.6923e-002 3.0769e-001 7. 6923e-002 3. 0769e-001 -4. 6154e-001 2. 1328e-018 -1. 5385e-001 3. 8462e-001 Оригинальными в языке MatLAB являются две новые, неопределяемые в математике функции деления матриц. При этом вводятся понятие деления матриц слева направо и деление матриц справа налево. Первая операция записывается с помощью знака ' / ' , а вторая - ' \ '. Операция В / A эквивалентна последовательности действий B * inv(A), где функция inv осуществляет обращение матрицы. Ее удобно использовать для решения матричного уравнения: Х * А = В. Аналогично операция A\B равносильна совокупности операций inv(A)*B, которая представляет собой решение матричного уравнения: А * Х = В. Для примера рассмотрим задачу отыскания корней системы линейных ал- гебраических уравнений: x 1 + 2x 2 + 3x 3 = 14 2x 1 - x 2 - 5x 3 = -15 x 1 - x 2 - x 3 = -4 В среде MatLAB это можно сделать таким образом: » A = [ 1 2 3; 2 -1 -5; 1 -1 -1] A = 1 2 3 2 -1 -5 1 -1 -1 » B = [ 14;-15;-4] B = 1.3. Операции с векторами и матрицами 43 14 -15 -4 » x = A \ B x = 1 2 3 1.3.7. Матричные функции Вычисление матричной экспоненты (e А )осуществляется с помощью функций expm, expm1, expm2, expm3. Эти функции следует отличать от прежде рассмотренной функции exp(A), которая формирует матрицу, каждый элемент ко- торой равняется е в степени, которая равняется соответствующему элементу матрицы А. Функция expm является встроенной функцией MatLAB. Функция expm1(A) реализована как М-файл, который вычисляет матричную экспоненту путем ис- пользования разложения Паде матрицы А. Функция еxpm2(A) вычисляет матрич- ную экспоненту, используя разложение Тейлора матрицы А. Функция expm3(A) вычисляет матричную экспоненту на основе использования спектрального разло- жения А. Приведем примеры использования этих функций: » A = [1,2,3; 0, -1,5;7, -4,1] A = 1 2 3 0 -1 5 7 -4 1 » expm(A) ans = 131.3648 -9.5601 80.6685 97. 8030 -7. 1768 59. 9309 123. 0245 -8. 8236 75. 4773 » expm1(A) ans = 131.3648 -9.5601 80.6685 97. 8030 -7. 1768 59. 9309 123. 0245 -8. 8236 75. 4773 » expm2(A) ans = 131.3648 -9.5601 80.6685 97. 8030 -7. 1768 59. 9309 123. 0245 -8. 8236 75. 4773 » expm3(A) ans = 1.0e+002 * 1. 3136 + 0. 0000i -0. 0956 + 0. 0000i 0. 8067 - 0. 0000i 0. 9780 + 0. 0000i -0. 0718 - 0. 0000i 0. 5993 - 0. 0000i 1.2302 + 0. 0000i -0. 0882 - 0. 0000i 0. 7548 - 0. 0000i Функция logm(А) осуществляет обратную операцию - логарифмирование матрицы по натуральному основанию, например: A = 1 2 3 0 1 5 1.3. Операции с векторами и матрицами 44 7 4 1 » B = expm3(A) B = 1.0e+003 * 0.9378 0.7987 0.9547 1. 0643 0. 9074 1. 0844 1. 5182 1. 2932 1. 5459 » logm(B) ans = 1. 0000 2. 0000 3. 0000 0. 0000 1. 0000 5. 0000 7.0000 4. 0000 1. 0000 Функция sqrtm(А) вычисляет такую матрицу Y, что Y*Y = A: » Y = sqrtm(A) Y = 0.7884 + 0.8806i 0.6717 - 0.1795i 0.8029 - 0.4180i 0. 8953 + 0. 6508i 0. 7628 + 0. 8620i 0. 9118 - 1. 0066i 1.2765 - 1. 4092i 1. 0875 - 0. 5449i 1. 3000 + 1. 2525i » Y * Y ans = 1. 0000 + 0. 0000i 2. 0000 - 0. 0000i 3. 0000 + 0. 0000i 0. 0000 - 0. 0000i 1. 0000 - 0. 0000i 5. 0000 - 0. 0000i 7.0000 + 0. 0000i 4. 0000 + 0. 0000i 1. 0000 + 0. 0000i 1.3.8. Задания Задание 1.5. Вычислите значения функции f(x) на отрезке [a; b] с шагом h. Таблица 1.3 Вариант ( ) f x a b h 1 x x 2 1 0 25 + , 1,1 3,1 0,2 2 x x x 3 0 3 1 2 − + , 2,05 3,05 0,1 3 2 2 3 e x x − + π 0 1,6 0,16 4 cos π x x 2 1 3 − -1 0 0,1 5 1 4 + x x sin π 0,1 0,8 0,07 6 e x x 3 2 1 + 1,4 2,4 0,1 7 e x x − + − 2 2 1 0,25 2,25 0,2 8 ( ) ( ) e x x + − sin π 1 1,8 2,8 0,1 9 3 2 2 3 + ⋅ x tg x π 0,1 0,9 0,08 1.3. Операции с векторами и матрицами 45 10 ( ) 2 3 1 3 2 + ⋅ + x x ln -0,1 0,9 0,1 11 x x 2 3 3 2 + ⋅ cos π 1 2,5 0,15 12 ( ) ( ) 4 7 1 3 + + x x sin π 0 7 0,7 13 ( ) e x x − + − 2 1 3 2 x 0 2 0,2 14 x x x 3 2 3 8 1 − + + 0 1,7 0,17 15 sh x 2 π , sh x e e x x = − ⎛ ⎝ ⎜ ⎞ ⎠ ⎟ − 2 0 1,2 0,12 16 ch x 2 π , ch x e e x x = + ⎛ ⎝ ⎜ ⎞ ⎠ ⎟ − 2 0,5 1,5 0,1 17 x x e x 3 2 1 + + -0,2 0,8 0,1 18 1 2 3 2 2 + ⋅ x x sin 2 4 0,2 19 3 5 2 2 x x + ⋅ cos π 0,5 1,5 0,1 20 arccose x − 3 3 0,2 0,5 0,03 21 arcsin e x − 2 5 8 13 0,5 22 ( ) x x x + + + ln 1 2 -0,5 0,5 0,1 23 1 3 1 2 2 + + − e x x 3 5 0,2 24 3 1 3 2 2 x x e x + + − 1,2 2,2 0,1 25 x x x x 2 1 3 2 + + − 1 5 0,4 1.3.9. Вопросы 1. Как вводятся векторы в языке MatLAB? Какими функциями можно фор- мировать векторы в языке MatLAB? 2. Какие функции MatLAB разрешают преобразовывать вектор поэлемент- но? 3. С помощью каких средств в MatLAB осуществляются основные операции с векторами? 4. Как вводятся матрицы в системе MatLAB? 1.3. Операции с векторами и матрицами 46 5. Какие функции имеются в MatLAB для формирования матриц опреде- ленного вида? 6. Как сформировать матрицу: а) по заданным векторам ее строк? б) по заданным векторам ее столбцов? в) по заданным векторам ее диагоналей? 7. Какие функции поэлементного преобразования матрицы есть в MatLAB? 8. Как осуществляются в MatLAB обычные матричные операции? 9. Как решить в MatLAB систему линейных алгебраических уравнений? 1.4. Функции прикладной численной математики 47 1.4. Функции прикладной численной математики 1.4.1. Операции с полиномами В системе MatLAB предусмотрены некоторые дополнительные возможно- сти математического оперирования с полиномами. Полином (многочлен) как функция определяется выражением: 0 1 2 2 ) ( a x a x a x a x P n n + ⋅ + ⋅ + + ⋅ = В системе MatLAB полином задается и сохраняется в виде вектора, элемен- тами которого являются коэффициенты полинома от до в указанном по- рядке: n a 0 a ] [ 0 1 2 a a a a P n = Введение полинома в MatLAB осуществляется так же, как и ввод вектора длиной n+1, где n - порядок полинома. Умножение полиномов. Произведением двух полиномов степеней n и m соответственно, как известно, называют полином степени n+m, коэффициенты ко- торого определяют простым перемножением этих двух полиномов. Фактически операция умножения двух полиномов сводится к построению расширенного век- тора коэффициентов по заданным векторам коэффициентов полиномов- сомножителей. Эту операцию в математике называют сверткой векторов (а сам вектор, получаемый в результате такой процедуры - вектором-сверткой двух векторов). В MatLAB ее осуществляет функция |