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

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

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

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

Добавлен: 01.06.2024

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

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

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

20

[Q,R,P]=qr(A) отличается от предыдущего упорядочением по убыванию модулей диагональных элементов R и наличием соответствующей матрицы перестановок Р (A*P’=Q*R);

[Q,R]=qr(A,0) при m>n отличается тем, что вычисляются лишь n столбцов матрицы Q.

Если после выполнения QR-разложения выполнить команду [Q1,R1]=qrdelete(Q,R,k), то будет выполнен пересчет матриц для варианта, когда в матрице А удален k-й столбец. Если после QRразложения выполнить команду [Q1,R1]=qrdelete(Q,R,k,X), то будут пересчитаны матрицы для варианта, когда в матрице А перед столбцом k вставлен столбец Х.

X=nnis(A,B), X=nnis(A,B,t) позволяют искать решение систе-

мы АХ=В методом наименьших квадратов, где отыскиваются не-

отрицательные решения Х, минимизирующие norm(A*X-B) или га-

рантирующие точность ε при задании t=max(m,n)*norm(A,1)* ε. Особое место в библиотеке занимают средства для вычисления

собственных чисел и векторов.

В простейшем варианте отыскиваются ненулевые решения системы АХ=λX командами d=eig(A) или [X,d]=eig(A) (d- диагональная матрица собственных чисел, Х –матрица из нормированных собственных векторов):

a =

 

 

» d=eig(a)

» [R,d]=eig(a)

 

 

 

 

 

1

2

3

d =

R =

 

 

d =

 

 

 

1

4

9

0.2179

0.8484

0.7163 -0.1198

0.2179

0

0

1

8

27

1.8393

-0.5150

0.6563

-0.3295

0

1.8393

0

 

 

 

29.9428

0.1222

-0.2371

-0.9365

0

 

0 29.9428

Для проверки качества поиска (при значительных размерностях и многочисленных особых случаях такая проверка весьма желательна) достаточно проверить на близость к нулю значений A*X=R*D:

» a*R-R*d

ans = 1.0e-014 * 0.0583 0.0666 -0.7549 0.0166 -0.0444 -0.5329 0.0902 -0.3886 -0.7105

Функции d=eig(A,B) и [V,D]= eig(A,B) позволяют решать полную (обобщенную) проблему собственных значений АХ=λBX.

Решение задачи осуществляется на основе QR-алгоритма и его модификаций и при числе итераций, превышающем 30 n, может быть прервано с сообщением Solution will not converge (решение не сходится).

Проблему собственных значений можно решать и для матрич-


21

ного полинома (A0+λA1+λ2A2+...+λpAp)X=0 командой [R,d]=polyeig(A0,A1,.., Ap), где R- матрица размера n×(n×p) собственных векторов. При р=0 эта функция тождественна eig(A0) , при р=1 – eig(A0,-A1) и в случае матриц с n=1 (скаляров) – roots(Ap,...,A1,A0), то есть ищет корни уравнения Apλp+...+ A2λ2 +A1λ +A0=0.

Для решения ряда задач используется функция сингулярного разложения матрицы в формах s=svd(A), [U,S,V]=svd(A), [U,S,V]=svd(A,0) - матрица А размерности m×n (mn) представляется в виде A=U*S*V, где U*U=V*V=E, S=diag(s1,s2,...,sn). Здесь U со-

стоит из n собственных векторов для n наибольших собственных значений матрицы АА, а V – из ортонормированных собственных векторов матрицы АА; на диагонали матрицы S - значения квадратных корней из собственных чисел матрицы АА (сингулярные числа).

6. Операции над полиномами

Рассмотрим полином вида Pn(x)=p1xn+p2xn-1+...+pnx+an+1 . Соответственно будем обозначать Р – n+1-мерный вектор коэффициентов,

Х – массив значений аргумента.

При вычислении значений полинома для элементов массива можно использовать функцию polyval(P,X):

» polyval([1 2 5],[0 3 1])

 

 

» polyval([1 2 5],[0 3 1; 1 1 1])

ans =

 

 

 

 

 

ans = 5 20

8

5

20

8

 

 

 

8

8

8

С помощью функции polyvalm(P,X) можно вычислять значения

матричного полинома для квадратной матрицы Х :

 

 

» polyvalm([1 2 5],[0 3 1; 1 1 1; 0 0 2])

 

 

 

 

ans =

8

9

7

 

 

 

 

 

 

3

11

6

 

 

 

 

 

 

0

0

13

 

 

 

Умножение полиномов Сm+n(x)=Pm(x) × Qn(x)

выполняется ко-

мандой C=conv(P,Q) –

 

 

 

 

 

 

 

 

 

 

 

min( k ,m )

 

 

 

 

 

Ck =

Aj Bk +1j .

 

 

j =max( 1,k +1n )

Деление полиномов можно реализовать командой [C,R]=deconv(A,B) , где С –частное и R – остаток от деления А на В.

» conv([1 2 3],[5 6])

» [c,r]=deconv([1 2 3],[5 6])

ans =

c =

0.2000

0.1600

 

5 16 27 18

r =

0

0

2.0400


22

Вычисление производных от полинома, произведения и от-

ношения полиномов производится соответственно командами dp=polyder(P), dc=polyder(A,B) и [f,g]=polyder(A,B):

» polyder([1 -2 3 4 5])

» polyder([1 2 3],[5 6])

» [f,g]=polyder([1 2 3],[5 6])

ans =

ans =

f =

5

12

-3

4 -6 6 4

15 32 27

g =

25

60

36

Вычисление корней полинома реализуется функцией roots(P), а построение полинома по его корням – функцией poly(R).

» r=roots([1

3 5 7])

» poly(r)

r = -2.1795

 

ans =

-0.4102

+ 1.7445 i

1.0000 3.0000 5.0000 7.0000

-0.4102

- 1.7445 i

 

Функция poly(А)

обеспечивает построение характеристиче-

ского полинома |λE-A|=0 (см. проблему собственных значений):

» A= magic(3)

 

» P=poly(A)

A = 8

1

6

P =

3

5

7

1.0e+002 *

4

9

2

0.0100 -0.1500 -0.2400 3.6000

В приложениях, особенно связанных с преобразованием Лапласа при решении дифференциальных уравнений, оперируют с отношениями полиномов и представлениями их в виде простых дробей:

Pm( s )

 

 

n

rk

 

 

 

=

+ f ( s )

,

Qn( s )

ssk

 

k =1

 

 

 

 

 

 

 

где sk - простые корни полинома Qn(s); если некоторый корень sj имеет кратность m, то соответствующее слагаемое представляется в виде

m

r j+i1

( s s j )i

i =1

Команда [r,s,f] =residue(P,Q) дает разложение отношения по-

линомов на простые дроби (в случае близких корней возможна значительная погрешность). В случае кратного корня пользуются функцией rj=resi2(P,Q,sj,m,j), где j –номер вычисляемого коэффициента (по умолчанию j=m); по умолчанию m=1 (простой корень).

Команда [P,Q] =residue(r,s,f) выполняет обратное действие свертки разложения в отношение полиномов.

Выполнив действия

[r,s,f]=residue([1 -6

11 -6],[1 -5 4 0])

» [A,B]=residue([0.5 0 -1.5],[4 1 0],[1])

r =

0.5000

0 -1.5000

A = 1 -6 11 -6

s = 4

1 0

 

B = 1 -5 4 0

f =

1

 

 

 


23

видим, что

 

 

 

 

s3 6 s 2 +11s 6 =

0.5

 

+

0

 

1.5

+1

 

 

 

 

 

 

s3 5 s 2 +4 s

 

 

 

s 4

 

 

 

s 1

 

 

s

 

 

 

 

 

В случае кратного корня

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

» P=poly([1 2 3 ])

 

 

 

 

 

 

 

 

 

» r1=resi2(P,Q,0,3,1)

P =

1

-6

11

-6

 

 

 

 

 

 

 

 

r1

=

 

0.7222

 

 

 

 

» Q=poly([0 0 0 6])

 

 

 

 

 

 

 

» r2=resi2(P,Q,0,3,2)

Q =

1

-6

0

0 0

 

 

 

 

 

 

 

 

r2

= -1.6667

 

 

 

 

» [r,s,f]=residue(P,Q)

 

 

 

 

 

 

 

» r3=resi2(P,Q,0,3,3)

r =

0.2778

0.7222 -1.6667

1.0000

 

 

 

 

r3

=

 

1

 

 

 

 

 

 

s =

6

0

0

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

f =

[]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

видим разложение:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

s3 6 s 2 +11s 6 =

0.2778

+

 

0.7222

 

1.667

+ 1

 

 

 

 

s 4 6 s3

 

 

s 6

 

 

 

 

s

 

 

 

 

 

s 2

 

 

s 3

 

7. Коллекция тестовых матриц

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

hadamard (n) – матрица Адамара (ортогональная матрица из 1 и –1); n должно быть целым и n, n/12 или n/20 должны быть степенью 2:

» hadamard (4)

ans =1

1

1

1

1

-1

1

-1

1

1

-1

-1

1

-1

-1

1

hilb (n), invhilb(n) – матрица Гильберта hij=1/(i+j-1) и ей обратная (пример матрицы, плохо обусловленной :к обращению):

»A=hilb(3)

 

 

» B=invhilb(3)

 

» det(A)

A = 1.0000

0.5000

0.3333

B = 9

-36

30

ans =

0.5000

0.3333

0.2500

-36

192 -180

4.6296e-004

0.3333

0.2500

0.2000

30 -180

180

 

magic(n) – магический квадрат (квадратная матрица с элементами от 1 до n2 с равными суммами элементов по строкам и столбцам):

» magic(2)

 

» magic(3)

 

 

ans = 1

3

ans = 8

1

6

4

2

3

5

7

 

 

4

9

2


24

pascal(n) – матрица Паскаля - симметрическая матрица из коэффициентов разложения бинома (1+х)j (треугольника Паскаля)

1

 

 

 

 

1

 

1

 

 

 

 

 

 

 

 

1

2

1

 

 

 

 

 

 

 

 

1

3

 

3

1

 

 

 

 

 

 

1

4

6

4

1

 

 

 

 

» pascal(3)

 

 

 

 

 

» pascal(5)

 

 

 

 

ans = 1

1

1

 

 

 

ans = 1

1

1

1

1

1

2

3

 

 

 

 

1

2

3

4

5

1

3

6

 

 

 

 

1

3

6

10

15

 

 

 

 

 

 

 

1

4

10

20

35

 

 

 

 

 

 

 

1

5

15

35

70

rosser - матрица Рессера (матрица 8-го порядка, служащая тестом для алгоритмов решения симметричной проблемы собственных значений ):

611

196

-192 407 -8 -52

-49

29

196

899

113 -192 -71 -43

-8

-44

192

113

899

196

61

49

 

8

52

407

-192

196

611

8

44

 

59

-23

8

-71

61

8

411

-599

 

208

208

52

-43

49

44 -599

411

 

208

208

49

-8

8

59

208

208

 

99 -911

29

-44

52

-23

208

208

-911

99

имеет два кратных значения, три близких, нулевое и малое ненулевое):

1000 1000 1020.049 1020.000 1019.902 0.098 0 -1020.049 toepliz(Х) – симметрическая матрица Теплица, определяющая

перестановки элементов вектора Х ;

toepliz(Х,Y) – несимметрическая матрица Теплица, первый столбец которой совпадает с вектором X и первая строка с вектором Y (если х1у1, возникает конфликт на главной диагонали с предпочтением для X):

» x=[1 3 5 7];

 

 

» x=[1 3 5 7];

 

 

» x=[1 3 5 7];

 

 

» toeplitz(x)

 

 

» y=[1 11 21 31];

 

» y=[-1 -11 -21 -31];

 

ans = 1

3

5

7

» toeplitz(x,y)

 

 

» toeplitz(x,y)

 

 

3

1

3

5

ans = 1

11

21

31

Column wins diagonal conflict.

5

3

1

3

3

1

11

21

ans = 1

-11

-21

-31

7

5

3

1

5

3

1

11

3

1

-11 -21

 

 

 

 

7

5

3

1

5

3

1

-11

 

 

 

 

 

 

 

 

7

5

3

1