Автор работы: Пользователь скрыл имя, 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-алгоритм с неявными сдвигами.
Заключение
Список использованных источников
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 – последовательности, были вычислены с увеличенной точностью и округлены до последней значащей цифры, как указано в таблице.
Таким
образом, реализованный метод
2.Преобразование
Хаусхолдера для
приведения симметричной
матрице к трехдиагональной
форме.
Для проверки приведенных выше процедур были использованы матрицы:
A
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 будет различный, поскольку процедуры при кратных корнях неустойчивы.
[d1,…,d7] = [1; 102; 104; 106; 108; 1010; 1012] |
[e2,…,e7] = [10; 103; 105; 107; 109; 1011] |
[d1,…,d7] = [1012; 1010; 108; 106; 104; 102; 1] |
[e2,…,e7] = [1011; 109; 107; 105; 103; 10] |
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 |
Заключение
В ходе выполнения курсовой работы были изучены эффективные алгоритмы решения проблемы собственных значений, проведены численные эксперименты и проанализирована их эффективность.