Logo GenDocs.ru

Поиск по сайту:  

Загрузка...

Вычисление сингулярного разложения матрицы - файл 1.doc


Вычисление сингулярного разложения матрицы
скачать (98 kb.)

Доступные файлы (1):

1.doc98kb.04.12.2011 11:08скачать

содержание
Загрузка...

1.doc

Реклама MarketGid:
Загрузка...
Федеральное агентство по образованию и науке

Пензенский государственный педагогический университет им. В. Г. Белинского

ОТЧЕТ

к лабораторной работе №1

по дисциплине «Вычислительная математика»

"Численные методы линейной алгебры. Решение нелинейных уравнений и систем уравнений"


Автор:




Специальность:

Математическое обеспечение и администрирование информационных систем

Группа:

МП-41

Курс:

4

Руководитель:




Оценка:





ПЕНЗА 2009

Задание

Вариант №8

Найти сингулярное разложение матрицы



^ Анализ задания

Простейший способ вычисления сингулярного разложений матрицы А – вычислить собственные значения и векторы матриц ATA и AAT . Сингулярные числа – это корни квадратные из собственных чисел матрицы ATA или AAT. Левые сингулярные векторы являются собственными векторами матрицы AAT, правые сингулярные числа являются собственными векторам матрицы ATA. Так как матрицы ATA и AAT являются симметричными, то полная проблема собственных значений решается для них весьма эффективно.
^ Описание метода решения

Будем использовать метод вращений Якоби решения симметричной полной проблемы собственных значений [1].

При решении полной проблемы собственных значений мы будем использовать преобразование подобия. Матрицы A и B называются подобными, если существует невырожденная матрица подобия P , такая, что B = P-1AP .

В качестве матрицы подобия будем использовать матрицу плоских вращений (рис.1).



Рис.1

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

  1. Вычисляют , ,

  2. Если , то , , (если , то лучше ), если же , то .

  3. Вычисляют новые диагональные элементы:



  1. Полагают (или для контроля вычисляют );

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



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.)

Поиск по сайту:  

© gendocs.ru
При копировании укажите ссылку.
обратиться к администрации
Рейтинг@Mail.ru