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

MATLAB00 / Mironovskiy_Petrova1ML_ВЫЧ

.pdf
Скачиваний:
68
Добавлен:
09.04.2015
Размер:
706.17 Кб
Скачать

После того как график выведен на экран, его можно озаглавить, обозначить оси, сделать текстовую разметку, для чего использу ются команды title, xlabel, ylabel, text. Например, чтобы нанести обозначения осей на последний график, надо набрать xlabel('x'), ylabel('y').

В команде plot в одиночных кавычках можно использовать до полнительный аргумент, указывающий тип символов для постро ения графика. Так plot(X1,Y1,':',X2,Y2,'+') использует символ двоето чия для первой кривой и символ + для втоpой. Цвет линий также может задаваться пользователем. Например, команды plot(X,Y,'r') и plot(X,Y,'+g') используют красную линию для получения первого гра фика и зеленые метки + для второго. Справку о возможных вари антах типов линий, точек и цветов можно получить, набрав help plot.

Команда plot строит графики на плоскости. MATLAB позволяет также наглядно изображать линии и поверхности в трехмерном про странстве. Для изображения линий в пространстве используется ко манда plot3. Получим, например, график винтовой линии, которая задается уравнениями x=sint; y=cost; z=t. Возьмем диапазон измене ния параметра 0 1 t 1 102 с шагом 0,02 :

>>t = 0:pi/50:10*pi; plot3(sin(t),cos(t),t);

Результат показан на рис. 1.5.

Три стандартные поверхности – сфера, эллипсоид и цилиндр – стро ятся с помощью команд sphere, ellipsoid, cylinder соответственно. Ре зультат выполнения первой из них показан на рис. 1.6.

63

 

2

 

53

 

378

 

43

 

3

 

23

 

1378

 

3

 

12

 

2

 

2

 

 

2

 

2

3

3

3

3

 

 

12

12

12

12

Рис. 1.5

Рис. 1.6

11

Дополнительные сведения о графических возможностях MATLAB можно найти в подразд. 1.7 и 4.1.

1.4. Матричные операции

MATLAB имеет обширный арсенал матричных операций. К про стейшим из них относятся сложение и умножение, вычисление ранга и определителя, а также обращение матрицы.

Элементарные операции над матрицами перечислены ниже:

A±B

A'

trace

inv

A*B

det

rank

pinv

Для сложения и вычитания матриц одинакового размера ис пользуются знаки + и –, например, С=А+В. Умножение матриц обо значается звездочкой: C = A*B. Оно допускается, если число строк матрицы А равно числу столбцов матрицы В. При этом в общем случае A*B B*A.

Напомним, что матричное умножение вычисляется по известному правилу «строка на столбец». В частности, произведение матриц вто рого порядка находится по формуле

2a11

a12

3

4

2b11

b12

3

5

2a11b11

1 a12b21

a11b12

1 a12b22

3

6a

a

7

6b

b

7

6a b

1 a b

a b 1 a b

7.

8

21

22

9

 

8

21

22

9

 

8

21 11

22

21

22

12

22

22

9

Для MATLAB такое умножение – элементарная операция. Приве дем простой пример:

>>A=[1 2; 3 4]

>>B=[5 6; 7 8]

>>C=A*B

>>CT=B'*A'

1 2

5 6

19 22

19 43

3 4

7 8

43 50

22 50

Простейшейматричнойоперациейявляетсятранспонирование(стро кизаменяютсястолбцами).Например,результатомтранспонирования вектора строки будет вектор столбец. В MATLAB транспонирование обозначается штрихом. В последней колонке приведена транспониро ванная матрица С, она равна произведению транспонированных мат риц A и B, взятых в обратном порядке.

По команде trace(A) вычисляется след матрицы А, т. е. сумма ее диагональных элементов. Полезно помнить, что он равняется также сумме ее собственных чисел. По команде rank находится ранг матри цы. Он определяется максимальным размером ее минора с ненуле вым определителем и одновременно указывает на число линейно не зависимых строк (столбцов) матрицы.

12

Следующая матричная операция – вычисление определителя, осу ществляется командой det. Как известно, определитель матри

цы A 3

1a

b2

размера 2 2 равен det A 1 ad 2 bc .

4

5

 

6c

d7

 

Формула для определителя третьего порядка имеет вид

 

1a1 a2

a3

2

 

 

 

 

 

 

det

3b

b

b

4

5 a b c

6 a b c 6 a b c

7 a b c 7 a b c

7 a b c .

 

3

1

2

3

4

1 2 3

2 3 1

3 1 2

3 2 1

1 3 2

2 1 3

 

83c1

c2

c3

94

 

 

 

 

 

 

Обращение квадратной матрицы А производится по команде inv(A). Она является основной при решении системы линейных алгебраи ческих уравнений.

Напомним формулу для вычисления обратной матрицы

A 1 1 1 A*, detA

где А* – присоединенная матрица, составленная из алгебраических дополнений Aij матрицы A. В соответствии с этой формулой процеду ра вычисления обратной матрицы содержит 2 шага.

Шаг 1. Каждый элемент aij матрицы A заменяется его алгебраичес ким дополнением Aij, т. е. определителем матрицы, получаемой вы черкиванием соответствующей строки и столбца. Если сумма индек сов i+j нечетна, определитель берется с минусом.

Шаг 2. Полученная матрица транспонируется и делится на опре делитель исходной матрицы.

В частности, для матрицы второго порядка получаем

2a b3

1

1

2 d 1b3

5

6

4

 

5

6.

 

7c d8

 

ad 1 bc 7

1c a 8

Пример 1. Ниже приведены результаты выполнения упомянутых операций для матрицы A третьего порядка.

>> A=[1 2 3; 0 1 4; 0 0 1]

>> A'

>> det(A)

>> inv(A)

>> inv(A')

1 2 3

1 0 0

1

1 –2

5

1

0

0

0 1 4

2 1 0

 

0

1 –4

–2

1

0

0 0 1

3 4 1

 

0

0

1

5 –4

1

В первой строке приведены команды, набираемые в рабочем окне, во второй – ответы, которые даст MATLAB. В частности, видим, что при транспонировании матрицы обратная матрица тоже транспони руется.

13

Типичная задача линейной алгебры – решение системы линейных уравнений. На матричном языке она сводится к тому, чтобы найти вектор X, удовлетворяющий равенству AX 1 B , где матрица A и век тор столбец B заданы. Решение этого уравнения имеет вид X 1 A 1B .

ДляполучениятакогорешениявпакетеMATLABдостаточнонабрать

>>X=inv(A)*B либо >>X=(A^ 1)*B.

Разумеется, для выполнения этих операций матрица A должна быть невырожденной. В случае, если система уравнений AX = B недо определена или переопределена, решение получают с помощью ко манды pinv, выполняющей псевдообращение матрицы А. Можно так же использовать знак деления – косую черту (slash и backslash).

Пример 2. Требуется решить систему трех уравнений с тремя не известными:

x 1 y 1 z 2 2, 2x 1 2y 1 z 2 2, x 1 2y 1 2z 2 5.

В данном случае матрицы А и В имеют вид

 

11

1

12

 

122

A 5

32

2

14

, B 5

324.

 

3

 

4

 

3

4

 

631

2

274

 

63574

Вводя их в MATLAB и набирая >>X=inv(A)*B, получим:

>>A=[1 1 1; 2 2 1; 1 2 2]

>>B=[2; 2; 5]

>>X=inv(A)*B

A=1 1 1

B= 2

X= 1

2 2 1

2

1

1 2 2

5

2

Следовательно, решение системы имеет вид x=–1, y=1, z=2.

1.5.Работа с полиномами

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

строкой своих коэффициентов в порядке от старшего к младшему. Так, полином x3 12x 2 5 будет представлен вектором [1 0 –2 5].

Перечень основных команд MATLAB для работы с полиномами приведен ниже:

14

roots

conv

polyval

poly

deconv

residue

Дадим краткие пояснения к ним.

Команда roots предназначена для отыскания корней полинома. На пример, чтобы решить квадратное уравнение x2 1 5x 1 6 2 0 , следует набрать r=roots([1 5 6]), результатом будут значения корней r=[ 2; 3].

Функция poly выполняет обратную операцию – строит полином по заданным корням. Так, p=poly([ 2 3]) даст p=[1 5 6]. Если в каче стве входного аргумента функции poly фигурирует квадратная мат рица, то результатом будет ее характеристический полином.

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

Пример 1 (демонстрация ошибок при вычислении корней). Все корни полинома (x 11)8 вещественны и равны –1. Сформируем этот полином командой poly и найдем его корни командой roots.

>>p=poly( ones(1, 8)), r=roots(p), p = 1 8 28 56 70 56 28 8 1

r = 1.0203; 1.0142±0.0144i; 0.9998±0.0201i; 0.9858±0.0140i; –0.9801

Врезультате получили комплексные числа, причем их модуль от личается от единицы на 2%. Если учесть, что MATLAB работает с 32 разрядной сеткой, это очень большая погрешность.

Внагляднойформеошибкивычислениякорнейпоказанынарис.1.7.

 

 

1 1

 

 

32359

 

 

 

 

3235

 

 

 

 

32319

 

 

 

 

3231

 

 

 

 

32339

 

 

 

 

3

 

 

 

 

132339

 

 

 

 

13231

 

 

 

 

132319

 

 

 

 

13235

 

 

 

 

132359

11235

11

13267

13268

11234

 

 

Рис. 1.7

 

 

15

вале 15 2 x 2 5

Он получен путем пятикратного применения пары команд roots/poly, когда по корням восстанавливался полином, снова искались его кор ни и т. д. Кружок в центре рис. 1.7 соответствует истинным корням полинома (x 11)8 , а звездочками помечены значения корней, вычис ленные в процессе итераций.

% Корневой тест

n=8; r= ones(1,n); clg, hold on for i=1:5,

p=poly(r), r=roots(p), plot(r,'*','LineWidth',2)

end

plot( 1,0,'o','LineWidth',2),grid on; hold off

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

>> r=–ones(1,8); p=poly(r)

% численное представление

 

% полинома

p = 1 8 28 56 70 56 28 8 1

 

>> P=poly2sym(p),

% символьное представление

 

% полинома

P =x^8+8*x^7+28*x^6+56*x^5+70*x^4+56*x^3+28*x^2+8*x+1

>>R=solve(P); R'

% решение уравнения P(x) 1 0.

R'=[ 1, 1, 1, 1, 1, 1, 1, 1]

% найденные корни

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

Для того чтобы построить график полинома, надо предваритель но вычислить его значения в точках заданного интервала. Для этой цели служит функция polyval (сокращение от polynomial value). На пример, чтобы построить график полинома y 1 x2 2 5x 2 6 на интер

следует набрать

>> x= 5:0.1:5; p=[1 5 6]; y=polyval(p, x); plot(x, y), grid.

В результате будет получен график, который пересекает ось абс цисс в точках х1= 3, х2= 2 (это найденные выше корни полинома).

Для умножения полиномов предназначена функция conv (сокра щение от convolution). Рассмотрим произведение двух квадратных трехчленов:

P1 1 x2 2 3x 2 2; P2 1 4x2 2 5x 2 1;

P 1 P1 3 P2 1 4x4 2 17x3 2 24x2 2 13x 2 2.

16

Вычислим коэффициенты результирующего полинома четвертой степени в MATLAB:

>> Р1=[1 3 2]; Р2=[4 5 1]; Р= conv(P1,P2).

Получим ответ: Р= 4 17 24 13 2.

Обратная операция – деление полиномов – выполняется по ко манде deconv. Результат операции деления полиномов представляет собой частное и остаток.

Пример 2. Найдем целую часть и остаток неправильной рацио нальной дроби

4x4 117x3 1 24x2 114x 1 4

2 4x2

1 5x 111

x 1 2

 

.

x2 1

3x 1

2

x2 1 3x 1

2

 

 

 

Выполним это деление в MATLAB:

>> num=[4 17 24 14 4]; den=[1 3 2]; [q,r]=deconv(num,den),

Результат будет иметь вид

q = 4 5 1, r = 0 0 0 1 2.

Здесь вектор q характеризует целую часть деления, а вектор r – остаток.

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

В MATLAB обе эти операции могут быть выполнены с помощью команды residue.

Пример 3. Пусть требуется разложить на элементарные дроби ра циональную функцию

x 1 5

 

2

k1

1

k2

.

 

 

 

 

x2 1 3x 1

2 x 3 r1 x 3 r2

При «ручном» счете сначала находят числа r1, r2 – это корни зна менателя: r1= –2, r2= –1. Затем для определения неизвестных коэф фициентов k1, k2 приравнивают числители правой и левой час тей: x 1 5 2 k1(x 11) 1 k2 (x 1 2).

Отсюда k1 1 k2 21, k1 1 2k2 2 5. Решая эту систему, находим

k1 1 23, k2 1 4.

Выполним указанное разложение с помощью команды residue. Ее входными аргументами являются числитель num и знаменатель den

17

исходной дроби, выходными аргументами – векторы R, K, содержа щие коэффициенты знаменателей и числителей элементарных дро бей (полюсы и вычеты исходной функции). Набрав

>>num=[1 5]; den=[1 3 2]; [K, R]=residue(num, den),

получим результат K=[ 3 4], R=[ 2 1]. Следовательно, искомое разложение имеет вид

x 1 5

 

2

4

 

3

3

.

x2 1 3x 1

 

 

 

 

2 x 1

1 x 1 2

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

При вызове с синтаксисом [num, den]=residue(R, K, P) команда выполняет обратное действие – находит сумму элементарных дро бей, характеризуемых параметрами R, K и полиномом Р, заданным вектором своих коэффициентов. Одно из применений этого вари анта команды – сложение комплексно сопряженных пар дробей для получения вещественных элементарных дробей второго поряд ка.

1.6.Собственные числа и векторы

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

Напомним, что собственными числами или собственными значе ниями квадратной матрицы А называются корни ее характеристи ческого полинома. Характеристический полином находим, раскры вая определитель

det1A 3 4E2 5 4n 6 an 14n 1 61 6a14 6 a0,

где Е – единичная матрица, n – размерность матрицы А. Приравнивая его нулю, получим характеристическое уравнение

матрицы А.

Найдем характеристический полином при n=2:

18

5a11 3 4

 

a12

6

7 1a11 3 421a22

3 42 3 a12a21

7

det8

a

a

 

3 49

 

21

22

 

 

 

 

 

7 42 3 1a11 a22 24 1a11a22 3 a12a21 2.

Заметим, что коэффициент при 1 равен следу матрицы А, взятому с минусом, а свободный член равен ее определителю. Поэтому харак теристическое уравнение можно записать в виде

12 2 1trA 3 detA 4 0.

Корни 11, 12 этого уравнения и будут собственными числами мат рицы А.

В MATLAB для получения характеристического полинома матри цы А можно воспользоваться командой poly(A). Ее результатом будет вектор коэффициентов характеристического полинома. Корни этого полинома находим командой roots.

11

22

:

Найдем, например, собственные числа матрицы 3

4

50

36

 

>>A=[1 2; 0 3]; p=poly(A); L=roots(p)

В результате выполнения этих команд на экран будут выведены собственные числа 1 и 3.

Более короткий путь получения собственных чисел состоит в при менении команды eig (от немецкого «eigen» – собственный). Для на шего примера, вводя код L=eig(A), получаем вектор столбец собствен ных чисел с элементами 1; 3. Отметим, что матрица А в примере была треугольной, поэтому собственные числа равны ее диагональным эле ментам.

Перейдем к определению собственных векторов квадратной матри цы. Вектор H называется собственным вектором матрицы А, если в ре зультате его умножения на матрицу он не изменяет своего направле ния, а лишь удлиняется или укорачивается.

Алгебраическая запись этого условия имеет вид

AH = 1 H или (A– 1 E)H = 0, (*)

гдекоэффициент показывает,восколькоразизменяетсядлинавекто ра. Для того чтобы однородная система (*) имела ненулевое решение H, необходимо, чтобы определитель системы равнялся нулю: det1A 3 4E2 5 0. Последнее равенство представляет собой харак теристическое уравнение матрицы A. Следовательно, его кор ни 11, 1, 1n, т. е. собственные числа, надо поочередно подставлять в уравнение (*), чтобы найти собственные векторы, причем каждому соб ственному числу 1i будет отвечать свой собственный вектор Hi.

19

Замечание 1. Если все собственные числа 11, 1, 1n различны, то у матрицы A будет n линейно независимых собственных векторов H1,

…, Hn.

Замечание 2. Поскольку определитель системы (A1 iE)Hi = 0 равен нулю,тоодноизуравненийэтойсистемыбудетлинейнойкомбинацией других, т. е. «лишним» и его следует отбросить. Решение оставшейся системыбудетопределеносточностьюдопроизвольнойконстанты.Гео метрически это означает, что если H1 – собственный вектор матрицыA, то и k H1, где k – любое число, также собственный вектор. В пакете MATLAB при вычислении собственных векторов константа k обычно выбирается так, чтобы собственные векторы имели единичную длину (чтобы сумма квадратов их компонент равнялась единице).

Замечание 3. Если матрица A – симметрична, то ее собственные числа вещественны, а собственные векторы – ортогональны. У не симметричных матриц все или часть собственных чисел и векторов могут оказаться комплексными.

Чтобы найти собственные векторы матрицы в пакете MATLAB, надо использовать команду eig с двумя выходными параметрами [H,L]=eig(A). При этом столбцами матрицы H будут служить собствен ные векторы матрицы A, а диагональными элементами матрицы L

соответствующие им собственные числа.

 

 

 

Пример 1. Дана матрица второго порядка A 3

11

22

. Чтобы най

4

5

 

63

27

 

ти ее собственные числа, выписываем характеристический полином

det1A 3 4E2 7

513 4

2

6

7 113 4212 3 42 3 6 7 4

2

3 34 3 4.

8

3

2 3 4

9

 

 

 

 

 

 

 

Его корни вещественны 11 2 31, 12 2 4.

Матричное уравнение для определения первого собственного век

тора имеет вид

 

 

 

 

 

 

 

 

 

AH 3 4 H ,

11

22

1h1

2

3 5

1h1

2.

1 1 1

63

27

6h

7

 

6h

7

 

8

9

8

2

9

 

8

2

9

Ему соответствует система двух скалярных уравнений:

4h 1 2h 2 3h ,

5

42h 1 2h 2 0,

6

1

2

1

6

1

2

73h1 1 2h2 2 3h2,

 

73h1 1 3h2 2 0.

Они отличаются только постоянным множителем и эквивалент ны уравнению h1 1 h2 2 0. Принимая, например, h1 1 1, получаем

20

Соседние файлы в папке MATLAB00