Министерство Образования Российской Федерации

Марийский Государственный Технический Университет

Кафедра Высшей математики

Расчетно-графическая работа
По дисциплине “Вычислительная математика”
на тему:
"Нахождение собственных значений и собственных векторов матриц"

Выполнил: студент гр. МИЭ 31
Веприков Д.О.

Проверил: доцент каф. ВМ
Пайзерова Ф. А.

Йошкар Ола, 2001г.

Содержание.
1	Собственные значения и собственные векторы.	3
1.1	Математическое обоснование метода.	3
1.2	Метод итераций.	5
1.3	Метод Леверрье-Фаддеева.	6
1.3.1	Основные пункты алгоритма метода Леверрье-Фаддеева.	7
1.4	Численное решение задачи нахождения собственных значений матриц методом Леверрье-Фаддеева.	7
2	Приложение	10
2.1	Структурная схема алгоритма метода Леверрье-Фаддеева.	10
2.2	Листинг программы на алгоритмическом языке "Pascal".	13

1	Собственные значения и собственные векторы.
Задачи нахождения собственных значений и соответствующих им собственных векторов возникают в самых различных научных задачах. Например, при анализе динамических систем собственные значения определяют частоты колебаний, а собственные векторы характеризуют их форму. В электро-радиотехнических устройствах собственные значения матриц определяют характеристические постоянные времени и режимы работы этих устройств.
1.1	Математическое обоснование метода.
Рассмотрим квадратную матрицу n-ого порядка:

Собственные значения i  квадратной матрицы A есть действительные или комплексные числа, удовлетворяющие условию:
,
E – единичная матрица,
 - собственный вектор матрицы A, соответствующий некоторому собственному значению .

Матрица  называется характеристической матрицей матрицы A. Т.к. в матрице  по главной диагонали стоят , а все остальные элементы равны нулю, то характеристическая матрица имеет вид:

Определитель этой матрицы называется характеристическим определителем и равен:

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

  и называется характеристическим многочленом. Корни  этого многочлена – собственные значения или характеристические числа матрицы A. Числа  называются коэффициентами характеристического многочлена. 
Ненулевой вектор  называется собственным вектором матрицы A, если эта матрица переводит вектор X в вектор 
,
т.е. произведение матрицы A на вектор X и произведение характеристического числа  на вектор X есть один и тот же вектор. Каждому собственному значению  матрицы соответствует свой собственный вектор .
Для определения координат собственного вектора составляется характеристическое уравнение: . Переписав его в векторном виде и выполнив умножение, получим систему линейных однородных уравнений:

Определитель этой системы равен нулю, т.к. из этого условия были определены собственные значения матрицы A. Следовательно, система имеет бесконечное множество решений. Ее можно решить с точностью до постоянного множителя (как систему однородных уравнений). Решив эту систему, мы найдем все координаты собственного вектора X. Подставляя в систему однородных уравнений поочередно , получаем n собственных векторов.
При определении собственных значений и принадлежащих им собственных векторов решается одна и двух задач:
1.	Определение все собственных значений и принадлежащих им собственных векторов матриц;
2.	Определение одного или нескольких собственных значений и принадлежащих им собственных векторов.
Первая задача состоит в развертывании характеристического определителя в многочлен n-й степени (т.е. в определении коэффициентов ) с последующим вычислением собственных значений  и, наконец, в определении координат собственного вектора .
Вторая задача заключается в определении собственных значений  итерационными методами без предварительного развертывания  характеристического определителя (метод итераций). Методы первой задачи (метод Данилевского, метод Леверрье-Фаддеева) относятся к точным, т.е. если их применить для матриц, элементы которых заданы точно (рациональными числами), и точно проводить вычисления (по правилам действий с обыкновенными дробями), то в результате будет получено точное значение коэффициентов характеристического многочлена, и координаты собственных векторов окажутся выраженными точными формулами через собственные значения. 
Обычно собственные векторы матрицы удается определить, используя промежуточные результаты вычислений, проведенных для определения коэффициентов характеристического многочлена. Для определения того или иного собственного вектора, принадлежащего собственному значению, это собственное значение должно быть уже вычислено.
Методы решения второй задачи – итерационные. Здесь собственные значения получаются как пределы некоторых числовых последовательностей, так же, как и координаты принадлежащих им собственных векторов. Т.к. эти методы не требуют вычисления коэффициентов характеристического многочлена, то он менее трудоемки.  
Некоторые свойства собственных значений векторов:
•	Все n собственных значений любой симметричной матрицы (aij=aji; i,j = 1,2,…,n) вещественны.
•	Собственные векторы, отвечающие различным собственным значениям симметричной матрицы, ортогональны:
, при ,
, при .
•	Собственный вектор матрицы, умноженный на произвольное число, также является собственным вектором.
•	Подобные матрицы
, где P – неособая матрица, имеют одинаковые собственные значения, их собственные вектора связаны соотношением:

Характеристическое уравнение 

решается ранее изложенными методами решения нелинейных уравнений. Однако задача осложняется тем, что среди собственных значений часто встречаются кратные. Кроме того, для произвольной матрицы непросто вычислить сами коэффициенты характеристического многочлена.
Ряд задач требует нахождения только наибольшего или наименьшего собственных значений. В общем случае ставится задача о нахождении всех собственных значений и собственных векторов, т.е. полная проблема собственных значений.
Предположим, что поставлена задача определения наибольшего собственного числа матрицы и наибольшего собственного вектора при нем. Наиболее подходящим методом для нахождения наибольшего собственного числа и собственного вектора является метод итераций.
1.2	Метод итераций.
Для решения частичной проблемы собственных значений (отыскания наибольших и наименьших собственных чисел), применяется метод простой итерации решения систем уравнений

С помощью итерационных методов можно определить наибольшее по модулю собственное число матрицы A без раскрытия определителя.
Итак, пусть 

-	характеристическое уравнение;  - его корни, являющиеся собственными значениями матрицы . Предположим, что 
,
т.е.  наибольшее по модулю собственное число. Тогда для нахождения приближенного значения корня используется следующая схема:
-	произвольно выбирают начальный вектор Y;
-	составляют последовательные итерации

-	выбирают из этой последовательности два последних значения, и принимают за наибольшее собственное число следующее соотношение:
,
где - соответствующие координаты векторов . 
Таким образом, взяв достаточно большой номер итерации m, можно с любой степенью точности вычислить наибольший по модулю корень  характеристического уравнения матрицы. Для нахождения этого корня может быть использована любая координата вектора , в частности можно взять среднее арифметическое соответствующих отношений для разных координат.
1.3	Метод Леверрье-Фаддеева.
Этот метод относится к группе тех, которые решаются методами развертывания определителей. Этот метод был предложен Леверрье и упрощен советским математиком Фаддеевым. Метод Леверрье основан на формулах Ньютона для сумм степеней корней алгебраического уравнения и заключается в следующем. Пусть 

-	характеристический многочлен матрицы , и - полная совокупность корней характеристического многочлена. Рассмотрим суммы:
 , ,
 иначе:

(каждая сумма  есть след матрицы ). Тогда при  справедливы формулы Ньютона:

откуда получаем:
при  
при  
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
при  
Следовательно, коэффициенты характеристического многочлена  можно легко определить, если известны суммы . 
Таким образом, схема раскрытия характеристического многочлена состоит в следующем:
1)	вычисляют степени 
2)	определяют  - суммы элементов главных диагоналей матриц ;
3)	по вышеприведенным формулам Ньютона находим коэффициенты .
Видоизмененный метод Леверрье, предложенный Фаддеевым, заключается в вычислении последовательности матриц  по следующей схеме:

1.3.1	Основные пункты алгоритма метода Леверрье-Фаддеева.
1.	Ввод исходной матрицы , где n – размерность матрицы.
2.	Вычисление коэффициентов .
3.	Решение характеристического уравнения (определение ). В качестве метода решения характеристического уравнения выбран уединения корней уравнения и  метод хорд.
4.	Задание начальных единичных векторов .
5.	Вычисление собственного вектора , соответствующего .
6.	Нормировка вектора .
7.	Конец алгоритма.
При решении данной задачи использовались и некоторые вспомогательные процедуры, - например процедура возведения в степень.
  
1.4	Численное решение задачи нахождения собственных значений матриц методом Леверрье-Фаддеева.
Используя метод Леверрье-Фаддеева, найти собственные числа матрицы, а так же наибольший собственный вектор.

.
Решение.
Определяем коэффициенты характеристического уравнения  посредством построения последовательности матриц.
, 

, 

Результаты дальнейших вычислений примут вид:
 
Получим характеристическое уравнение: Решая это уравнение методом хорд, предварительно уединив корни на некотором промежутке, получаем следующие значения собственных чисел: 
Вычислим собственный вектор при наибольшем собственном числе матрицы методом итераций.

Итак, используя метод итераций, определить первое наибольшее собственное значение и первый собственный вектор матрицы

.
Решение.
Выбираем начально-свободный вектор 
Вычисляем 

Дальнейшие вычисления можно свести в Таблицу1.
A	2,6
1,2
-0,1	1,2
2,1
1,6	-0,1
1,6
0,8				
Y0	1.00	1.00	1.00				
Y1	3.70	4.90	2.30	4.13	3.76	4.05	
Y2	15.27	18.41	9.31	3.99	3.90	3.80	
Y3	60.86	71.88	35.38	3.96
	3.90	3.88	
Y4	240.96	280.59	137.22	3.94
	3.91	3.90	
Y5	949.49	1097.95	534.63	3.93	3.92	3.91	
Y6	3732.75	4300.49	2089.48	3.93
	3.92	3.91	
Y7	14656.79	16853.49	8179.09	3.92	3.92	3.92	

Дальнейшие итерации можно прекратить. Собственное значение (наибольшее) .  Нормированный собственный вектор . 

2	Приложение
2.1	Структурная схема алгоритма метода Леверрье-Фаддеева.

Блок вычисления собственных чисел матрицы

Ввод Range, AMatrix

Cnxn=Anxn

k=1,Range-1

Pk=Trace(Range,AMatrix)/k

Pvec[k]=Pk

Вывод Pk

VInter

AConsistance

Вывод последовательности матриц A

Pn=Trace(Range,AMatrix)/Range

Pvec[k+1]=Pn

Вывод коэффициента харвткристического уравнения

Ввод  alpha, beta, eps

RootLimit

Вывод вектора собственных чисел LVec

Начало

Начало

Процедура Trace формирования "следа" матрицы AMatrix.

Ввод i, N, diag_sum, AMatrix

Diag_Sum=0   Trace=0

i=1,N

Diag_Sum=fiag_sum+Amatrix[i,i]

N=Range

Trace=Diag_Sum

Trace

Конец

Процедура VInter формирования последовательности матриц Bmatrix.

i,j,Bmatrix,Range

Bmatrix[i,j]=
AMatrix[i,j]-Pk

Vmatrix[i,j]=BMatrix[i,j]

Bmatrix[i,j]=
AMatrix[i,j]

i=1,Range

i=1,Range

i=j

+

_

VInter

Конец

Структурная схема процедуры AConsistance.

i,j,k,AMatrix,V,CEquval,Range

AMatrix[i,j]=0

AMatrix[k,i]=
AMatrix[k,i]+Cequibal[k,j]*V[i,j]

i=1,Range

i=1,Range

k=1,Range

i=1,Range

j=1,Range

AMatrix[i,j]

AConsistance

VInter

Структурная схема метода хорд для решения характеристического уравнения.

ChordMethod

Ya,Yb,Xk,Xn,k

Ya=f(x1,i,PVec)

Yb=f(x2,i,PVec)

Y=F_deriv(x1,i,Pvec)

Ya*Y>0

Xk=x1, Yk=Ya, Y=Yb

Xk=x2, Yk=Yb, Y=Ya

Xn=X

X=Xn-(Y/(Y-Yk))*(Xn-Xk)

Y=f(X,i,PVec)

(X-Xk)<eps

Root Lambda

_

+

Конец

ChordMethod

Ya,Yb,Xk,Xn,Y;
x1,x2,,y1,y2

Y1=f(x1,i,PVec)

x1=alpha;
x2=x1+step_h;

X2<beta

Y2=f(x1,i,PVec)

Ya*Y>0

+

Xk=x2, Yk=Yb, Y=Ya

Корень лежит в этих пределах:
[x1,x2]

ChordMethod

+

X1=x2;
X2=x1+step_h;
Y1=y2

Конец

- 

-

Процедура уединения коренй характристического уравнения.

2.2	Листинг программы на алгоритмическом языке "Pascal".

{Метод Лаверрье-Фаддеева }
                 {Метод нахождения собственных чисел матриц}
{$M 1024,0,0}{Освобождение памяти для потомка}
uses Dos,Crt;
const N=10;
      MainTextColor=15;
      DiagonColor=2;

      OutPutI=3;
      OutPutJ=7;
      ScaleI=10;
      ScaleJ=3;

type TMatrix=array[1..N,1..N] of real;
     TVec=array[1..N] of real;

{Процедура решает задачу ввода порядка исходной матрицы}
procedure Read_Range(var Range:integer);
begin
    writeln('Блок ввода данных');
    write('Введите порядок исходной матрицы A_Matrix=');
    read(Range);
end;

{Процедура считывания исходной матрицы}
procedure InputMatrix(var AMatrix:TMatrix;Range:integer);
var i,j,cols,rows:integer;
begin
    Rows:=Range;
    Cols:=Range;
    writeln('Введите исходную матрицу');
    for i:=1 to cols do
        for j:=1 to rows do
        begin
            GoToXY(OutPutI+ScaleI*i,OutPutJ+ScaleJ*j);
            read(AMatrix[i,j]);
         end;
end;

procedure PlotSameMatrix(var CEquival:TMatrix;AMatrix:TMatrix;Range:integer);
var i,j:integer;
begin
  for i:=1 to Range do
    for j:=1 to Range do
    begin
       CEquival[i,j]:=AMatrix[i,j];
    end;
    ClrScr;
end;

{Процедуры форматированного вывода/печати матриц AMatrix}
procedure Coord_AMatrix(var AMatrix:TMatrix;Range:integer);
var i,j,k:integer;
begin
     for i:=1 to Range do
        for j:=1 to range do
        begin
            GoToXY(OutPutI+ScaleI*i,OutPutJ+ScaleJ*j);
            if i=j then TextColor(DiagonColor) else TextColor(MainTextColor);
            write(AMatrix[i,j]:4:2);
         end;
end;
{==========================================================================}
procedure Coord_VMatrix(var VMatrix:TMatrix;Range:integer);
var i,j:integer;
begin
   for i:=1 to Range do
     for j:=1 to range do
     begin
       GoToXY(OutPutI+ScaleI*i,OutPutJ+ScaleJ*j);
       write(VMatrix[i,j]:4:2);
     end;
end;

{Суммирование диагональных элементов (след матрицы)}
function Trace(Range:integer;AMatrix:TMatrix):real;
var i,N:integer;
    diag_sum:real;
begin
     Diag_sum:=0;
     Trace:=0;
     N:=Range;
     for i:=1 to N do
     begin
       Diag_sum:=diag_sum+AMatrix[i,i];
       Trace:=Diag_sum;
     end;
end;

{Промежуточная матрица V}
procedure VInter(var VMatrix:TMatrix;BMatrix,AMatrix:TMatrix;Range:integer;
                     Pk:real);
var i,j,m,i0:integer;
begin
    ClrScr;
    TextColor(MainTextColor);
    writeln( 'Промежуточная матрица Bn');
    readln;
    for i:=1 to Range do
      for j:=1 to Range do
      begin
          if i=j then BMatrix[i,j]:=AMatrix[i,j]-Pk
          else BMatrix[i,j]:=AMatrix[i,j];
          VMatrix[i,j]:=BMatrix[i,j];
          Coord_VMatrix(VMatrix,Range);
      end;
      readln;
end;

{Процедура формирования матрицы A (последовательности матриц)}
procedure AConsistance(var AMatrix:TMatrix;CEquival,V:TMatrix;Range:integer);
var i,j,k:integer;
begin
  ClrScr;
  for i:=1 to Range do
     for j:=1 to Range do
     begin
        AMatrix[i,j]:=0;
     end;
     for k:=1 to Range do
       for i:=1 to Range do
       begin
         for j:=1 to Range do
         begin
           AMatrix[k,i]:=AMatrix[k,i]+CEquival[k,j]*V[j,i];
         end;
         Coord_AMatrix(AMatrix,Range);
       end;
end;
{==========================================================================}
{Промежуточная функция возведения в степень}
function pow(x:real;y:integer):real;
begin
    if x=0 then pow:=0;
    if x>0 then pow:=exp(y*ln(x));
    if (x<0) and ((y mod 2)=0) then pow:=exp(y*ln(-x));
    if (x<0) and ((y mod 2)<>0) then pow:=-exp(y*ln(-x));
end;

{Окончательная функция}
function f(x:real;i:integer;PVec:TVec;Range:integer):real;
var k:integer;
begin
    k:=1;
    if Range=4 then f:=pow(x,4)-PVec[k]*pow(x,3)-PVec[k+1]*pow(x,2)
                      -PVec[k+2]*x-PVec[k+3];
    if Range=3 then f:=pow(x,3)-PVec[k]*pow(x,2)-PVec[k+1]*x-PVec[k+2];
end;

{Derivative -вторая производная}
function F_deriv(x:real;i:integer;PVec:TVec;Range:integer):real;
var k:integer;
begin
    k:=1;
    if Range=4 then F_deriv:=12*pow(x,2)-6*PVec[k]*x-PVec[k+1]*2;
    if Range=3 then F_deriv:=6*x-2*PVec[k];
end;

{Реализация метода хорд для решения характеристического уравнения}
procedure ChordMethood(var X,Y:real;x1,x2,eps:real;i,Range:integer;PVec:TVec);
var Ya,Yb,Yk:real;
    Xk,Xn:real;
    k:integer;
begin
       Ya:=f(x1,i,PVec,Range);
       Yb:=f(x2,i,PVec,Range);
       Y:=F_deriv(x1,i,PVec,Range);{Вторая производная}
       if Ya*Y>0 then
       begin
            Xk:=x1;Yk:=Ya;X:=x2; Y:=Yb;
       end
         else
       begin
            Xk:=x2;Yk:=Yb; X:=x1;Y:=Ya;
       end;
       repeat
            Xn:=X;X:=Xn-(Y/(Y-Yk))*(Xn-Xk);
            Y:=f(X,i,PVec,Range);
       until abs(X-Xk)>=eps;
       writeln('Lambda = ',X:5:4);
       writeln('root Y= ',Y);
       readln;
end;

{Реализация метода уединения и уточнения коренй посредством метода хорд}
procedure Root_limit(var alpha,beta:real;var LVec:TVec;var RootNum:integer;
                         i,Range:integer;PVec:TVec);
const step_h=0.09;
var
   x1,x2,y1,y2:real;
   Ya,Yb,Yk,Y:real;
   Xk,Xn,X:real;
   eps:real;
   k:integer;
begin
     k:=0;
     x1:=alpha;
     x2:=x1+step_h;
     y1:=f(x1,i,PVec,Range);
     while x2<beta do
     begin
         y2:=f(x2,i,PVec,Range);
         if y1*y2<0 then
         begin
             TextColor(MainTextColor);
             writeln('Корень лежит в этих пределах:[',x1:5:4,';',x2:5:4,']');
         {Процедура уточнения корней характеристического уравнения}
             ChordMethood(X,Y,x1,x2,eps,i,Range,PVec);
             k:=k+1;
             LVec[k]:=X;
         end
           else
           x1:=x2;
           x2:=x1+step_h;
           y1:=y2;
     end;
     RootNum:=k;{Число действительных корней характеристического уравнения}
end;
{===================Тело программы=========================================}
var AMatrix,CEquival,BMatrix,VMatrix:TMatrix;
    X_SelfVec,LVec,U_EMatrix:TVec;
    P_CharacteristicParam,Pk,Pn,Lambda,Max:real;{Параметр p характеристического уравнения матрицы}
    Range,k,k1,i,j,num:integer;
    i0,m:integer;
    Cols,Rows:integer;
    PVec:TVec;
    {Параметры характеристического уравнения уравнения}
    Ya,Yb,Yk:real;
    Xk,Xn,x1,x2:real;
    X,Y:real;
    alpha,beta,eps:real;
    RootNum:integer;

begin
    ClrScr;
    TextColor(MainTextColor);
    Pn:=0;
    Pk:=0;
    Read_Range(Range);{Процедура считывает порядок матрицы}
    InputMatrix(AMatrix,Range);{Считываем исходную матрицу}
{==========================================================================}
    PlotSameMatrix(CEquival,AMatrix,Range);
{Блок вычисления коэффицентов характеристического уравнения матрицы}
    ClrScr;
    TextColor(MainTextColor);
    writeln('Коэффиценты характеристического уравнения');
    for k:=1 to Range-1 do
    begin
       Pk:=Trace(Range,AMatrix)/k; {Pk - коэффицент характкристич. уравнения}
       PVec[k]:=Pk;
       write('Pk_',k,'=',Pk:9:4);
       readln;

       VInter(VMatrix,BMatrix,AMatrix,Range,Pk);
       AConsistance(AMatrix,CEquival,VMatrix,Range);
       GoToXY(39,1);
       writeln('Матрица A',k+1,'.');
       readln;

     end;
     Pn:=Trace(Range,AMatrix)/Range;
     PVec[k+1]:=Pn; {Вектор параметров P}
     writeln('P_',Range,'=',Pn:9:2);
     readln;
         ClrScr;
         writeln('Вектор коэффицентов P');
         for k:=1 to Range do
         begin
           GoToXY(OutPutI+ScaleI*k,OutPutJ);
           TextColor(MainTextColor);
           write(PVec[k]:8:3);
         end;
         readln;
{==================Блок вычисления собственных чисел матрицы===============}
       ClrScr;
       TextColor(MainTextColor);
       writeln('**********************');
       writeln('Ведите пределы, в которых располагаются корни уравнения.');
           write('Enter alpha= ');
           readln(alpha);
           write('Enter beta= ');
           readln(beta);
           write('Enter eps=');
           readln(eps);
Root_limit(alpha,beta,LVec,RootNum,i,Range,PVec);
      ClrScr;
      TextColor(MainTextColor);
      write('Вектор собственных чисел');
      for k:=1 to RootNum do
      begin
       GoToXY(OutPutI+ScaleI*k,OutPutJ);
       write(LVec[k]:8:4);
      end;
      readln;
end.
Литература.
1.	Воробьева Г.Н., Данилова А.Н. Практикум по вычислительной математике: Учеб. Пособие для техникумов. - М.: Высш. Школа, 1990.
2.	Гловацкая А.П. Методы и алгоритмы вычислительной математики. Учеб. Пособие для вузов. - М.: Радио и связь, 1999.
3.	Численные методы. Учебник для техникумов и вузов. М.: Высшая школа, 1976.