Файл: М.А. Тынкевич Система Matlab Справочное пособие к курсу Численные методы анализа.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 01.06.2024

Просмотров: 102

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

16

Отметим также и некоторые полезные конструкции: cross(X,Y) – векторное произведение (X,Y-трехмерные векторы):

X×Y= [ (X2Y3-X3Y2), (X3Y1-X1Y3), (X1Y2-X2Y1)] ; kron(X,Y) – тензорное произведение (произведение Кронекера):

X11Y X12Y ... X1nY

X21Y X22Y ... X2nY... ... ... ...

Xm1Y Xm2Y ... XmnY

meshgrid(X,Y), meshgrid(X,Y,Z) формирование двумерной

(трехмерной) сетки (обычно используется при реализации графики): [x,y]=meshgrid(-2:0.1:2, -10:0.5:10)

Ряд других функций, связанных с обработкой массивов, рассмотрен ниже.

5. Решение основных задач линейной алгебры

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

det(A) – определитель квадратной матрицы; rank(A) – ранг матрицы;

trace(A) – след матрицы (сумма элементов главной диагонали);

» A=[1 2 3; 5 4 3; 3 4 3]

» det(A)

» rank(A)

» trace(A)

A =

1

2

3

ans =12

ans = 3

ans = 8

 

5

4

3

 

 

 

 

3

4

3

 

 

 

Выше среди операций системы мы уже упоминали операцию

транспонирования матрицы :

» A=[ 1 2 3 ; 23 11 0]

» B=A’

 

A =

 

 

B = 1

23

1

2

3

2

11

23

11

0

3

0

и возведения в степень (матричного умножения на себя или инверсии):

» A=[1 2 3; 5 4 3; 3 4 3]

» D=A^(-1)

» A^0

 

 

A =

 

 

D =

 

ans =

 

 

1

2

3

-0.0000

0.5000 -0.5000

1

0

0

5

4

3

-0.5000 -0.5000 1.0000

0

1

0

3

4

3

0.6667

0.1667 -0.5000

0

0

1


17

При решении многих задач (например, при оценке сходимости методов) используется понятие нормы вектора (матрицы). В рассматриваемой системе для поиска нормы предлагается функции norm(A) и norm(A, k) .

Если А – вектор, то норма определяется (по умолчанию k=2)

A = k k Ai k ; i=1

при k=inf и k=-inf соответственно ║A║= max(|Ai|) и ║A║= min(|Ai|);

» v=[3 4 -10]

» norm(v)

» norm(v,2)

» norm(v,inf)

» norm(v,-inf)

v = 3 4 -10

ans = 11.1803

ans = 11.1803

ans = 10

ans = 3

 

» norm(v,1)

» norm(v,-1)

» norm(v,3)

» norm(v,’fro’)

 

ans = 17

ans = 1.4634

ans = 10.2946

ans = 11.1803

Если А – матрица, то норма определяется только для k=1, 2, inf и fro (по умолчанию k=2):

 

 

 

 

 

 

 

 

 

m

k=1 -

 

 

 

A

 

 

 

= maxj

| Aij | ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i=1

k=2 - A =max(svd(A)) - максимальное из сингулярных чисел

матрицы (значений квадратных корней из собственных чисел матрицы АА);

 

 

A

 

 

 

 

= max n

| Aij |; k=’fro’ - A =

n

Bii , B=A’*A:

 

k=inf -

 

 

 

 

 

 

 

 

 

 

 

 

i

j=1

 

 

 

i =1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A = 1

2

3

 

 

 

 

 

» norm(A,1)

» norm(A)

» norm(A,inf)

» norm(A,’fro’)

5

4

3

 

 

 

 

 

 

ans =

 

 

ans =

ans =

 

 

ans =

3

4

3

 

 

10

 

 

9.6871

12

 

 

9.8995

Для задачи решения системы линейных алгебраических урав-

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

Так для решения системы AX=B (A –матрица коэффициентов размерности m×n, B- матрица правых частей размерности n×k, Х – матрица из k векторов-столбцов решений) можно использовать команду обратного деления “\”. Например, для решения системы

x1+2 x2+3 x3 = 3 (или 3) 5 x1+4 x2+3 x3 = 9 (или 9) 3 x1+4 x2+3 x3 = 6 (или 7)

задаем (построчно) матрицу коэффициентов и векторов правой части

» A=[1 2 3; 5 4 3; 3 4 3]

» B=[3 3; 9 9; 6 7]

A = 1

2

3

B = 3

3

5

4

3

9

9

3

4

3

6

7


 

18

 

 

и выполнить

 

 

 

» X=A\B

X =1.5000

1.0000

 

 

0.0000

1.0000

 

 

0.5000

0

 

При решении системы XA=B можно воспользоваться операцией

обычного деления. Так решение той же системы

 

»X=B’/A’

X = 1.5000

-0.0000

0.5000

 

1.0000

1.0000

0

(обратите внимание на строчное представление решений).

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

Для прямоугольной матрицы А (mn) решение строится по минимуму квадрата ошибки (используется QR-разложение на основе преобразований Хаусхолдера) и не сопровождается сообщениями о множественности решений или переопределенности системы:

одно уравнение с 3 неизвестными :

три уравнения с 2 неизвестными:

» a=[1 2 3];

» c=[1 2; 3 7; 2 5];

» b=6;

» d=[3; 10 ; 9];

» x=a\b

» x=c\d

x = 0

x = -5.00000000000002

0

3.66666666666667

2

 

Естественно, что квадратная матрица коэффициентов должна быть невырожденной (определитель отличен от нуля) и в противном случае выдается сообщение Matrix is singular to working precision и

элементы решения принимают значения inf (не определено). Особого упоминания заслуживает обращение (инверсия)

матрицы, для которого предусмотрена операция возведения в степень –1 и функция inv(A):

» A=[1 2 3; 5 4 3; 3 4 3]

» C=inv(A)

» D=A^(-1)

A =

 

 

C =

 

D =

 

1

2

3

-0.0000

0.5000 -0.5000

-0.0000

0.5000 -0.5000

5

4

3

-0.5000 -0.5000 1.0000

-0.5000 -0.5000 1.0000

3

4

3

0.6667

0.1667 -0.5000

0.6667

0.1667 -0.5000

Напомним, что обращение матрицы может оказаться полезным при решении системы AX=B в виде X=A-1B:

» B=[3 3; 9 9; 6 7]

» X=inv(A)*B

 

B = 3

3

X = 1.5000

1.0000

9

9

0

1.0000

6

7

0.5000

0.0000


19

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

[L,U]=lu(A) – дает т.н. LU-разложение произвольной квадрат-

ной матицы в виде произведения нижней и верхней треугольных мат-

риц A=LU (в матрице L возможны перестановки); такое представление позволяет, в частности, решение системы АХ=В свести к двум простым системам LZ=B, UX=Z .

[L,U,P]=lu(A) – дает LU-разложение c выводом матрицы перестановок Р такой, что PA=LU.

A =

 

 

» [L,U]=lu(A)

 

 

 

 

 

 

 

 

 

 

 

 

1

2

3

L =

 

 

 

U =

 

 

 

 

 

 

 

 

 

5

4

3

0.2000

0.7500

1.0000

 

5.0000

4.0000

3.0000

 

 

 

 

3

4

3

1.0000

0

0

 

 

0

1.6000

1.2000

 

 

 

 

 

 

 

0.6000

1.0000

0

 

 

0

 

0

1.5000

 

 

 

 

 

 

 

» [L,U,P]=lu(A)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

L =

 

 

U =

 

 

 

 

 

P =

 

 

 

 

 

1.0000

0

0

5.0000 4.0000

3.0000

 

0

1

0

 

 

 

0.6000

1.0000

0

0

1.6000

1.2000

 

0

0

1

 

 

 

0.2000

0.7500

1.0000

0

 

0

1.5000

 

1

0

0

R=chol(A), [R,p] =chol(A) - дает разложение Холецкого для положительно определенной симметрической матрицы A=RR, где R – верхняя треугольная матрица. Если матрица А не является положительно определенной, то в первом варианте возникает сообщение об ошибке и во втором R – матрица порядка q=p-1:

C =

 

 

» R=chol(С)

» [R,p]=chol(С)

1

2

3

??? Error using ==> chol

R =

1

2

2

5

5

Matrix must be positive definite

 

0

1

3

5

7

 

p =

3

 

В приведенном примере лишь первые два главных минора положительны (det(С)= -3) и, соответственно, q=2 и RR дает второй главный минор матрицы С.

[Q,R]=qr(A), [Q,R,P]=qr(A), [Q,R]=qr(A,0) находит QR-

разложение для прямоугольной матрицы размерности m×n: [Q,R]=qr(A) – в виде A=QR произведения унитарной матрицы Q

(Q*Q'=E) и верхней треугольной матрицы R :

C =

 

 

» [Q,R]=qr(С)

 

 

 

1

2

3

Q = -0.2672 -0.0514 -0.9622

R = -3.7416 -7.2160 -9.0868

2

5

5

-0.5345 -0.8229 0.1924

0 -1.3887 -0.3086

3

5

7

-0.8017 0.5657 0.1924

0

0 -0.5773

t =

 

 

» [Q,R]=qr(t)

 

R =

 

1

3

5

Q = -0.1961

-0.9805

-5.0990 -3.5301 -1.9611

5

3

1

-0.9805

0.1961

0 -2.3534

-4.7068