Проблема собственных значений

Автор работы: Пользователь скрыл имя, 19 Января 2012 в 12:42, реферат

Краткое описание

Цель курсовой работы: Ознакомиться и изучить проблему собственных значений исследование эффективных методов ее решения проблемы собственных значений.

Задачами курсовой работы являются: Определение эффективности работы алгоритмов решения проблемы собственных значений.

Содержание работы

Введение
1 Классификация методов решения проблем собственных значений.
2 Эффективные методы решения проблем собственных значений.
2.1 Метод Якоби для действительных симметрических матриц.
2.2 Преобразование Хаусхолдера для приведения симметричной матрице к трехдиагональной форме.
2.3 QL-алгоритм с неявными сдвигами.
3 Программная реализация методов решения проблем собственных значений.
3.1 Метод Якоби для действительных симметрических матриц.
3.2 Преобразование Хаусхолдера для приведения симметричной матрице к трехдиагональной форме.

3.3 QL-алгоритм с неявными сдвигами.
4. Проведение численных экспериментов и анализ эффективности.

4.1 Метод Якоби для действительных симметрических матриц.

4.2 Преобразование Хаусхолдера для приведения симметричной матрице к трехдиагональной форме.

4.3 QL-алгоритм с неявными сдвигами.
Заключение
Список использованных источников

Содержимое работы - 1 файл

!Курсовая.doc

— 163.50 Кб (Скачать файл)

             for (e = d__; e <= i__2; ++e) {

                 if (e == *n) {

                     goto L5;

                 }

                 if ((r__1 = rab1[e], abs(r__1)) <= sys051 * ((r__2 = ev[e], abs(

                         r__2)) + (r__3 = ev[e + 1], abs(r__3)))) {

                     goto L5;

                 }

     /* L4: */

             }

     L5:

             m = ev[d__];

             if (e == d__) {

                 goto L9;

             }

            if (c__ == 30) {

                 goto L14;

             }

             ++c__;

             l = (ev[d__ + 1] - m) / (rab1[d__] * 2.f);

             if (abs(l) > 1.f) {

     /* Computing 2nd power */

                 r__1 = 1.f / l;

                 o = abs(l) * (real)sqrt(r__1 * r__1 + 1.f);

             }

             if (abs(l) <= 1.f) {

                 o = (real)sqrt(l * l + 1.f);

             }

             l = ev[e] - m + rab1[d__] / (l + (real)r_sign(&o, &l));

             p = 1.f;

             j = 1.f;

             m = 0.f;

             g = e - d__;

             i__2 = g;

             for (f = 1; f <= i__2; ++f) {

                 b = e - f;

                 k = p * rab1[b];

                 h__ = j * rab1[b];

                 if (abs(k) < abs(l)) {

                     goto L6;

                 }

                 j = l / k;

                 o = (real)sqrt(j * j + 1.f);

                rab1[b + 1] = k * o;

                 p = 1.f / o;

                 j *= p;

                 goto L7;

     L6:

                 p = k / l;

                 o = (real)sqrt(p * p + 1.f);

                 rab1[b + 1] = l * o;

                 j = 1.f / o;

                 p *= j;

     L7:

                 l = ev[b + 1] - m;

                 o = (ev[b] - l) * p + j * 2.f * h__;

                 m = p * o;

                 ev[b + 1] = l + m;

                 l = j * o - h__;

     /* L8: */

             }

             ev[d__] -= m;

             rab1[d__] = l;

             rab1[e] = 0.f;

             goto L3;

     L9:

             if (d__ == 1) {

                 goto L11;

             }

             i__2 = d__;

             for (f = 2; f <= i__2; ++f) {

                 b = d__ + 2 - f;

                 if (m >= ev[b - 1]) {

                     goto L12;

                 }

                 ev[b] = ev[b - 1];

     /* L10: */

             }

     L11:

             b = 1;

     L12:

             ev[b] = m;

     /* L13: */

         }

         goto L15;

     L14:

         *ierr = d__;

     L15:

         if (*ierr != 0) {

             utae10_c(ierr, n, &c__34);

         }

         return 0;

     } /* aee2r_c */

     #undef a_ref 

4. Проведение численных экспериментов и анализ эффективности. 

1.Метод  Якоби для действительных  симметрических матриц.

Дана матрица  A с элементами a [i,k] =max (i,k).  

Собственные значения. Реализованный метод Якоби. Обычной метод  Якоби. QD- алгоритм.
 λ1 639,62943444 639,62943587 639,62943444
 λ2 -0,25068702021 -0,25068702137 -0,26068702023
 λ3 -0,25276325141 -0,25276325202 -0,25276325151
 λ16 -0,50027349839 -0,50027350009 -0,50027349845
 λ29 -24,077530173 -24,077530237 -240,77530172
 λ30 -114,51117646 -114,51117674 -114,51117646
 

     В таблице 1 приведены некоторые из собственных значений матрицы порядка n=30; в первом столбце приведены результаты расчетов с помощью реализованного метода Якоби, после выполнения 2339 вращений; во втором столбце – результаты расчетов с помощью обычной процедуры Якоби, в которой не предусмотрено специальных мер по уменьшению ошибок округления; в третьем столбце – результат вычисления с помощью QD – алгоритма, причем учтено, что матрица (-A-1) есть трехдиагональная матрица, соответствующая qd – последовательности вида  

     qk=ek=1(k=1,2,…,n-1);

     qn=-1/n,  en=0. 

     Собственные значения, соответствующие qd – последовательности, были вычислены с увеличенной точностью и округлены до последней значащей цифры, как указано в таблице.

     Таким образом, реализованный метод предпочтительнее программы, реализующей обычный метод Якоби. Действительные ошибки существенно меньше данных выше оценок и для рассматриваемого случая ошибка E=9*10-5.

     2.Преобразование  Хаусхолдера для  приведения симметричной  матрице к трехдиагональной  форме. 

     Для  проверки приведенных выше процедур были использованы матрицы:

                 A                                                             B

10 1 2 3 4
1 9 -1 2 -3
2 -1 7 3 -5
3 2 3 12 -1
4 -3 -5 -1 15
5 1 -2 0 -2 5
1 6 -3 2 0 6
-2 -3 8 -5 -6 0
0 2 -5 5 1 -2
-2 0 -6 1 6 -3
5 6 0 -2 -3 8
 
 
 
 
Тип матрици Поддиагональный элемент Диагональные  элементы Квадраты под  диагональных элементов
Матрица A +0,00000000000

+7,4948467747*10-1

-4,49626820120*100

-2,15704099085*100

+7,14142842854*100

+9,29520221754*100

+1,16267115560*101

+1,09604392078*101

+6,11764705885*100

+1,50000000000*101

+0,00000000000

+5,61727282169*10-1

+2,02164277371*101

+4,65282583621*100

+5,10000000000*101

Матрица B +0,00000000000

-7,83768800584*10-1

-8,10502269777*100

-2,97985867006*10-11

-1,92466782539*100

+8,60232526704*100

+4,40021275393*100

+3,80347681618*100

+1,07963104302*101

+4,25675675677*100

+6,74324324323*100

+8,00000000000*100

+0,00000000000

+6,14293532768*10-1

+6,56913929312*101

+8,87955769356*10-22

+3,70434623811*100

+7,40000000000*101

 

     В таблице 2 приведены результаты вычисления под диагональных и диагональных элементов трехдиагональных матриц, здесь же указаны значения квадратов под диагональных элементов. Для матрицы A результат не будет зависеть от способа округления. А результат для трехдиагональной матрицы B будет различный, поскольку процедуры при кратных корнях неустойчивы.

     3. QL-алгоритм с неявными сдвигами.

     Программа  использовалась для вычисления собственных  значений и векторов матриц U и Ū вида:

     

     [d1,…,d7] = [1; 102; 104; 106; 108; 1010; 1012]

     [e2,…,e7] = [10; 103; 105; 107; 109; 1011]

             

             

     U=

     

     [d1,…,d7] = [1012; 1010; 108; 106; 104; 102; 1]

     [e2,…,e7] = [1011; 109; 107; 105; 103; 10]

           

           

     Ū=

     Собственные  значения матриц U и Ū, вычисленные с помощью программы.

     U

     Ū

     -9,46347415648*108

     -9,46347415707*108

     -9,46346919727*102

     -9,46346919876*102

     +9,99899020189*10-1

     +9,99899020157*10-1

     +1,04633721478*103

     +1,04633721466*103

     +1,00989903020*106

     +1,00989903020*106

     +1,04633771269*109

     +1,04633771265*109

     +1,01000000980*1012

     +1,01000000980*1012

     Все собственные значения вычислены  с высокой точностью, даже те, которые  малы по сравнению с ║U║2; собственные значения матрицы Ū(котороя имеет те же собственные значение значения, что и матрица U) в общем случае не так точно, но все они имеют по меньшей мере 10 точных десятичных знаков, несмотря на то,  что элементы матрицы Ū расположены в левом верхнем углу. Полученные результаты для матрицы Ū более точны, чем в случае применения обычного алгоритма.

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

     Заключение

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

Информация о работе Проблема собственных значений