|
(******************************************************************************)
(**) ОТДЕЛ ПроССим+;
(******************************************************************************
* НАЗНАЧЕНИЕ: нахождение собственных значений симметричной матрицы
* рекуррентным методом Якоби
*
* ПРИМЕЧАНИЯ:
* В данном приложении метод применяется к матрице Гильберта. Известно, что
* матрица Гильберта является плохо обусловленной (отношение наименьшего
* собственного значения к наименьшему очень мало).
* Метод Якоби применяет к исходной матрице такие перевороты, чтобы
* получить диагональную матрицу. В итоге, на диагонали будут находиться
* собственные значения, а исходная матрица будет содержать собственные
* вектора.
* Переменная <точность> определяет в каких случаях недиагональный элемент
* преобразуемой матрицы будет рассматриваться как 0 (выраженный как
* дробь от суммы квадратов диагональных элементов).
******************************************************************************)
ИСПОЛЬЗУЕТ
Матем ИЗ "...\Отделы\Числа\",
Вект ИЗ "...\Отделы\Числа\",
Матр ИЗ "...\Отделы\Числа\",
Собств ИЗ "...\Отделы\Числа\",
МатрВВ ИЗ "...\Отделы\Числа\",
Вывод ИЗ "...\Отделы\Обмен\";
ПОСТ
порядок=6; (* порядок системы *)
проходов=500; (* наибольшее допустимое число проходов вычисления *)
(******************************************************************************)
ЗАДАЧА Гильберт(М+:Матр.Вид);
(* Построение матрицы Гильберта порядок-го порядка
( 1 1/2 1/3 1/4 ... 1/порядок )
( 1/2 1/3 1/4 1/5 ... 1/(порядок+1) )
М = ( 1/3 1/4 1/5 1/6 ... 1/(порядок+2) )
( ........................................... )
( 1/порядок 1/(порядок+1) 1/(порядок+2) 1/(порядок+3) ... 1/(2N-1) ) *)
ПЕР
i,j,посл:ЦЕЛ;
УКАЗ
посл:=РАЗМЕР(М)-1;
(* первая строка *)
М[0,0]:=1;
ОТ j:=1 ДО посл ВЫП
М[0,j]:=1/(j+1)
КОН;
(* оставшиеся строки *)
ОТ i:=1 ДО посл ВЫП
(* последний столбец *)
М[i,посл]:=1/(посл+i+1);
(* заполнить матрицу *)
ОТ j:=0 ДО посл-1 ВЫП
М[i,j]:=М[i-1,j+1]
КОН
КОН
КОН Гильберт;
(******************************************************************************)
ЗАДАЧА Голова;
ПЕР
М :Матр.Доступ; (* исходная матрица *)
СВ:Матр.Доступ; (* матрица с собственными векторами *)
сз:Вект.Доступ; (* собственные значения *)
точность:Матем.Вещ; (* точность вычислений *)
УКАЗ
точность:=Матем.квкор(Матем.МАШЕПС);
СОЗДАТЬ(М,порядок,порядок);
СОЗДАТЬ(СВ,порядок,порядок);
СОЗДАТЬ(сз,порядок);
Гильберт(М^);
ЕСЛИ Собств.Якоби(М^,проходов,точность,СВ^,сз^) = 0 ТО
Вывод.Цепь("^собственные значения:^");
МатрВВ.ВыводВект("%12.3e",сз^);
ЕСЛИ порядок < 7 ТО
Вывод.Цепь("^собственные вектора:^");
МатрВВ.ВыводМатр("%10.6f",СВ^)
КОН
ИНАЧЕ
Вывод.Цепь("^Нет схождения!^")
КОН
КОН Голова;
(******************************************************************************)
УКАЗ
Голова
КОН ПроССим.
▲ Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com или Издателю Глагола:
|
|