Файл: М.А. Тынкевич Система Matlab Справочное пособие к курсу Численные методы анализа.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 01.06.2024
Просмотров: 123
Скачиваний: 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 (m≥n) представляется в виде 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 +1− j . |
|
|
j =max( 1,k +1−n )
Деление полиномов можно реализовать командой [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 ) |
s−sk |
||||||
|
k =1 |
|
|||||
|
|
|
|
|
|
где sk - простые корни полинома Qn(s); если некоторый корень sj имеет кратность m, то соответствующее слагаемое представляется в виде
m |
r j+i−1 |
|
∑ |
||
( 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 |