Вычисление сингулярного разложения матрицы
скачать (98 kb.)
Доступные файлы (1):
1.doc | 98kb. | 04.12.2011 11:08 | ![]() |
содержание
- Смотрите также:
- Задачи. Матрицы. Вычисление определителей [ лабораторная работа ]
- по математике [ лекция ]
- Учебники - Вычисление определителя матрицы [ лекция ]
- Научная математика (19-9) [ документ ]
- Каждого уравнения системы равен нулю. Однородная система всегда совместна и всегда имеет тривиальное решение. Ослу имеет только тривиальное решение, если ранг матри [ документ ]
- Матрицы [ документ ]
- Алгебра матриц в MathCad [ документ ]
- Фотохимические процессы в стратосфере [ документ ]
- Задачи. Матрицы. Действия над матрицами [ лабораторная работа ]
- Курс высшей математики [ документ ]
- Азимут, Румб, Дирекционный угол и их вычисление [ лабораторная работа ]
- Приближенное вычисление интеграла [ документ ]
1.doc
Федеральное агентство по образованию и наукеПензенский государственный педагогический университет им. В. Г. Белинского
ОТЧЕТ
к лабораторной работе №1
по дисциплине «Вычислительная математика»
"Численные методы линейной алгебры. Решение нелинейных уравнений и систем уравнений"
-
Автор:
Специальность:
Математическое обеспечение и администрирование информационных систем
Группа:
МП-41
Курс:
4
Руководитель:
Оценка:
ПЕНЗА 2009
Задание
Вариант №8
Найти сингулярное разложение матрицы

^
Простейший способ вычисления сингулярного разложений матрицы А – вычислить собственные значения и векторы матриц ATA и AAT . Сингулярные числа – это корни квадратные из собственных чисел матрицы ATA или AAT. Левые сингулярные векторы являются собственными векторами матрицы AAT, правые сингулярные числа являются собственными векторам матрицы ATA. Так как матрицы ATA и AAT являются симметричными, то полная проблема собственных значений решается для них весьма эффективно.
^
Будем использовать метод вращений Якоби решения симметричной полной проблемы собственных значений [1].
При решении полной проблемы собственных значений мы будем использовать преобразование подобия. Матрицы A и B называются подобными, если существует невырожденная матрица подобия P , такая, что B = P-1AP .
В качестве матрицы подобия будем использовать матрицу плоских вращений (рис.1).

Рис.1
Пусть aij – ключевой элемент преобразуемой матрицы А. Матрица В, подобная А, формируется следующим образом:
Вычисляют,
,
Если, то
,
,
(если
, то лучше
), если же
, то
.
Вычисляют новые диагональные элементы:

Полагают(или для контроля вычисляют
);
Притаких, что
, вычисляют изменяющиеся внедиагональные элементы:

6) Для всех остальных пар индексов


^
Программа состоит из файла lab1.m, содержащего исполняемый код, а также файлов mySVD.m и vs.m, содержащих функции вычисления сингулярного разложения и собственных чисел и векторов соответственно.
Функция вычисления собственных чисел и векторов:
function[V,S] = vs(A)
A – исходная матрица; V – матрица, столбцами которой являются собственные векторы матрицы А, S – вектор, компонентами которого являются собственные числа матрицы А.
Функция вычисления сингулярного разложения:
function[U,S,V]=mySVD(A)
A – исходная матрица; S – диагональная матрица с диагональю из невозрастающих сингулярных чисел, U и V – ортогональные матрицы.
Описание применения
Запустить файл lab1.m, вычисляющий сингулярное разложение тестовой матрицы.
^
Результаты решения задачи идентичны с решением задачи с использованием стандартных функций.
Собственные векторы, полученные в результате решения задачи, коллинеарны векторам, полученным стандартной функцией MATLAB.
Заключение
В соответствии с заданием была написана программа для вычисления сингулярного разложения матриц. Программа была протестирована на тестовом примере, приведенном в задании.
Список использованных источников
1. Вержбицкий, В. М. Основы численных методов: Учебник для вузов. – М.: Высш. Шк., 2002. – 840 с.: ил.
Приложения
Результаты работы
A =
9.0000 1.3000 0.5000 0.2000
-0.6000 14.0000 1.1000 0.7000
0.4000 1.2000 13.0000 0.7000
1.1000 1.1000 1.9000 18.0000
сингулярное разложение:
U =
0.0790 0.0905 0.0279 0.9924
0.2407 0.8330 -0.4915 -0.0813
0.2520 0.4286 0.8636 -0.0834
0.9340 -0.3380 -0.1087 -0.0405
S =
18.6948 0 0 0
0 14.2728 0 0
0 0 12.1948 0
0 0 0 8.9574
V =
0.0906 0.0080 0.0633 0.9938
0.2569 0.8353 -0.4861 0.0008
0.2864 0.4127 0.8605 -0.0843
0.9186 -0.3631 -0.1387 -0.0720
сингулярное разложение с помощью функции svd:
U1 =
0.0790 -0.0905 -0.0279 -0.9924
0.2407 -0.8330 0.4915 0.0813
0.2520 -0.4286 -0.8636 0.0834
0.9340 0.3380 0.1087 0.0405
S1 =
18.6948 0 0 0
0 14.2728 0 0
0 0 12.1948 0
0 0 0 8.9574
V1 =
0.0906 -0.0080 -0.0633 -0.9938
0.2569 -0.8353 0.4861 -0.0008
0.2864 -0.4127 -0.8605 0.0843
0.9186 0.3631 0.1387 0.0720
>>
Текст программы
lab1.m
%сингулярное разложение матрицы
clc;
%тестовая матрица
A = [9.0 1.3 0.5 0.2
-0.6 14.0 1.1 0.7
0.4 1.2 13.0 0.7
1.1 1.1 1.9 18.0]
%вывод результатов
disp('сингулярное разложение:');
[U,S,V] = mySVD(A)
%результаты, полученные с помощью стандартной фуекции MatLab
disp('сингулярное разложение с помощью функции svd:');
[U1,S1,V1] = svd(A)
mySVD.m
function[U,S,V]=mySVD(A)
%вычисление сингулярного разложения
[N,N] = size(A);
%функция вычисления собственных векторов и чисел матрицы
[U,S] = vs(A*A');
[V,S] = vs(A'*A);
%собственные числа на главной диагонали расположены по убыванию
for i=1:N-1
[Z,index] = max(S(i:N));
index = index+i-1;
if index~=i
sbuf = S(i);
S(i)=S(index);
S(index) = sbuf;
%---
buf = U(:,i);
U(:,i)= U(:,index);
U(:,index) = buf;
%---
buf = V(:,i);
V(:,i)= V(:,index);
V(:,index) = buf;
end;
end;
S = diag(S);
vs.m
function[V,S] = vs(A)
%вычисление собственных значений и векторов матрицы
[N,N] = size(A);
T = eye(N);
%критерий окончания итерационного процесса
fin=100;
%количество итераций
count=0;
while (fin>0.001&&count<100)
count = count+1;
%поиск максимального(обреченного) элемента
Al = zeros(N,N);
for i=1:N-1
Al(i,i+1:N) = A(i,i+1:N);
end;
[Y,i] = max(abs(Al));
[Y,j] = max(Y);
i=i(j);
%проверка окончания итерационного процесса
fin = sum(sum(abs(Al)));
%вычисление коэффициентов для преобразования матрицы
p = 2*A(i,j);
q = A(i,i)-A(j,j);
d = sqrt(p*p+q*q);
if(q~=0)
r=abs(q)/(2*d);
c=sqrt(0.5+r);
s=sqrt(0.5-r)*sign(p*q);
else
c=sqrt(2)/2;
s=c;
end;
%получение матрицы поворота
Tk = eye(N);
Tk(i,i) = c;
Tk(j,j)=c;
Tk(i,j)=-s;
Tk(j,i) = s;
T = T*Tk;
%получение подобной матрицы
B = A;
B(:,i) = c*A(:,i)+s*A(:,j);
B(i,:)=B(:,i)';
B(:,j) = -s*A(:,i)+c*A(:,j);
B(j,:)=B(:,j)';
B(i,i) = c*c*A(i,i)+s*s*A(j,j)+2*c*s*A(i,j);
B(j,j) = s*s*A(i,i)+c*c*A(j,j)-2*c*s*A(i,j);
B(i,j)=0;
B(j,i)=0;
A = B;
end;
%собственные числа
S = diag(sqrt(B));
%собственные векторы
V = T;
Скачать файл (98 kb.)