Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 2 Информационное обеспечение и компьютерные технологии в научной деятельности.docx
Скачиваний:
8
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆
      1. Вычисления с векторами и матрицами.

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

Для вычисления определителя (детерминанта) квадратной матрицы1 служит функция det(A), где А – матрица размерностью n×n:

>> A=[10 20 30;5 15 25;8 4 2]

A =

10 20 30

5 15 25

8 4 2

>> det(A)

ans =

100

Для вычисления ранга матрицы (количество сингулярных чисел матрицы, не являющихся пренебрежимо малыми) предусмотрена функция

>> rank(A)

ans =

3

Для вычисления нормы матрицы (скалярная оценка величины элементов матрицы) предусмотрен оператор

>> norm(A)

ans =

47.9607

Для определения суммы элементов главной диагонали матрицы – следа матрицы - предусмотрен оператор

>> trace(A)

ans =

27

Транспонирование матрицы реализуется с помощью символа ‘ :

>> B=A'

B =

10 5 8

20 15 4

30 25 2

Обратную матрицу Z = А-1 = I/A, где I – единичная матрица, получают с помощью функции

>> Z=inv(A)

Z =

-0.7000 0.8000 0.5000

1.9000 -2.2000 -1.0000

-1.0000 1.2000 0.5000

Для создания единичной матрицы используются следующие операторы:

>> eye(4)

ans =

1 0 0 0

0 1 0 0

0 0 1 0

0 0 0 1

>> eye(2,4)

ans =

1 0 0 0

0 1 0 0

>> eye(size(A))

ans =

1 0 0

0 1 0

0 0 1

Матрица с единичными элементами создается с помощью операторов

>> ones(4)

ans =

1 1 1 1

1 1 1 1

1 1 1 1

1 1 1 1

>> ones(2,4)

ans =

1 1 1 1

1 1 1 1

>> ones(size(A))

ans =

1 1 1

1 1 1

1 1 1

Образование матрицы с нулевыми элементами возможно с помощью оператора

>> zeros(4)

ans =

0 0 0 0

0 0 0 0

0 0 0 0

0 0 0 0

>> zeros(2,4)

ans =

0 0 0 0

0 0 0 0

>> zeros(size(A))

ans =

0 0 0

0 0 0

0 0 0

Матрицу с заданной диагональю из элементов вектора R можно создать с помощью оператора diag (R) :

>> R=[1 2 3 4]

R = 1 2 3 4

>> RB=diag(R)

RB =

1 0 0 0

0 2 0 0

0 0 3 0

0 0 0 4

Для вычисления собственных чисел матрицы необходимо использовать функцию eig( )

>> C=eig(A)

C =

34.1199

-6.6812

-0.4387

С помощью этого оператора можно получить матрицу собственных векторов F, если изменить формат вызова:

>> [F,C]=eig(A)

F =

-0.7893 -0.3733 0.2792

-0.5536 -0.6626 -0.8410

-0.2655 0.6493 0.4635

C =

34.1199 0 0

0 -6.6812 0

0 0 -0.4387

C помощью оператора svd( ) можно вычислить сингулярные числа матрицы:

>> S=svd(A)

S =

47.9607

7.6617

0.2721

С помощью этой же функции можно выполнить сингулярное разложение2 матрицы, применив формат вызова

>>[Q,S,T]=svd(A)

Q =

-0.7799 0.1186 -0.6145

-0.6145 -0.3318 0.7158

-0.1190 0.9359 0.3316

S =

47.9607 0 0

0 7.6617 0

0 0 0.2721

T =

-0.2465 0.9155 0.3180

-0.5273 0.1486 -0.8366

-0.8131 -0.3739 0.4461

Проверим:

>> Q*Q'

ans =

1.0000 0.0000 0.0000

0.0000 1.0000 0.0000

0.0000 0.0000 1.0000

>> T*T'

ans =

1.0000 -0.0000 0.0000

-0.0000 1.0000 0

0.0000 0 1.0000

Элементами матриц Q и T являются ортонормированные собственные векторы, соответствующие собственным значениям матриц А*А’ и А’* A, соответственно.

В MATLAB предусмотрены поэлементные операции над матрицами, которые рассмотрим на примерах:

>> A=[10 20 30;5 15 25;8 4 2]

A =

10 20 30

5 15 25

8 4 2

>> B=[8 4 2;5 15 25;10 20 30]

B =

8 4 2

5 15 25

10 20 30

вычитание

>> A-B

ans =

2 16 28

0 0 0

-2 -16 -28

>> minus(A,B)

ans =

2 16 28

0 0 0

-2 -16 -28

сложение

>> A+B

ans =

18 24 32

10 30 50

18 24 32

>> plus(A,B)

ans =

18 24 32

10 30 50

18 24 32

умножение

>> A.*B

ans =

80 80 60

25 225 625

80 80 60

>> times(A,B)

ans =

80 80 60

25 225 625

80 80 60

возведение в степень

>> A.^2

ans =

100 400 900

25 225 625

64 16 4

>> power(A,2)

ans =

100 400 900

25 225 625

64 16 4

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

>> A./B

ans =

1.2500 5.0000 15.0000

1.0000 1.0000 1.0000

0.8000 0.2000 0.0667

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

>> A.\B

ans =

0.8000 0.2000 0.0667

1.0000 1.0000 1.0000

1.2500 5.0000 15.0000

В MATLAB предусмотрены и матричные функции:

матричное умножение

>> A*B

ans =

480 940 1420

365 745 1135

104 132 176

>> mtimes(A,B)

ans =

480 940 1420

365 745 1135

104 132 176

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

> A/B

ans =

0 0 1

0 1 0

1 0 0

>> mrdivide(A,B)

ans =

0 0 1

0 1 0

1 0 0

обратное деление матриц

>> A\B

ans =

3.4000 19.2000 33.6000

-5.8000 -45.4000 -81.2000

3.0000 24.0000 43.0000

>> mldivide(A,B)

ans =

3.4000 19.2000 33.6000

-5.8000 -45.4000 -81.2000

3.0000 24.0000 43.0000

возведение матрицы в степень

>> A^2

ans =

440 620 860

325 425 575

116 228 344

>> mpower(A,2)

ans =

440 620 860

325 425 575

116 228 344

матричная экспонента ехр(А)

>> A=[2 7 4;1 6 2;5 3 1]

A =

2 7 4

1 6 2

5 3 1

>> Q=expm(A)

Q =

1.0e+004 *

0.5315 1.3965 0.5555

0.3558 0.9361 0.3721

0.4209 1.1051 0.4398

логарифмирование матрицы

>> A=logm(Q)

A =

2.0000 7.0000 4.0000

1.0000 6.0000 2.0000

5.0000 3.0000 1.0000

извлечение квадратного корня

>> sqrtm(A)

ans =

1.2192 + 0.7445i 1.6531 - 0.3939i 1.0267 - 0.6072i

0.1833 + 0.1900i 2.2970 - 0.1005i 0.4814 - 0.1550i

1.3760 - 1.1901i 0.5370 + 0.6296i 0.9466 + 0.9707i