Программная реализация численных методов нахождения собственных векторов и собственных значений

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

Описание

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

Содержание

1 Собственные значения и собственные векторы…………………………………..6

1.1 Математическое обоснование метода………………………………………6

1.2 Метод итераци..………………………………………………………………..8

1.3 Метод Леверрье-Фаддеева…………………………………………………...9

1.3.1 Основные пункты алгоритма метода Леверрье-Фаддеева.…….10

1.4 Численное решение задачи нахождения собственных значений матриц методом Леверрье-Фаддеева….…………………………………………….10

2 Приложение…………………………………………………………………………..13

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

2.2 Листинг программы…………………………………………………………16

Работа состоит из  1 файл

report.docx

— 220.48 Кб (Скачать документ)

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

 

    1. Численное решение задачи нахождения собственных значений матриц методом Леверрье-Фаддеева.

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

.

Решение.

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

,

,

Результаты  дальнейших вычислений примут вид:

 

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

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

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

.

Решение.

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

Вычисляем

 

 

 

Дальнейшие  вычисления можно свести в Таблицу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
 

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

 

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

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

    1. Листинг программы.
 
 

unit Unit2; 

interface 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, Grids, StdCtrls, Spin, ExtCtrls, Buttons; 

type

  TForm2 = class(TForm)

    Button1: TButton;

    RadioGroup1: TRadioGroup;

    Label1: TLabel;

    SpinEdit1: TSpinEdit;

    StringGrid1: TStringGrid;

    RadioGroup2: TRadioGroup;

    StringGrid2: TStringGrid;

    Button2: TButton;

    RadioGroup3: TRadioGroup;

    Memo1: TMemo;

    Edit1: TEdit;

    Edit2: TEdit;

    Label2: TLabel;

    Label3: TLabel;

    Button3: TButton;

    Button4: TButton;

    procedure Button1Click(Sender: TObject);

    procedure SpinEdit1Change(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure FormCreate(Sender: TObject);

    procedure Button3Click(Sender: TObject);

    procedure Button4Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end; 

var

  Form2: TForm2; 

implementation 

{$R *.dfm}

type TMatrix=array of array of real;

     TVec=array of real;

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;

    SpEdV:integer; 
 

{Процедура считывания  исходной матрицы}

procedure InputMatrix(var AMatrix:TMatrix;Range:integer);

var i,j,cols,rows:integer;

begin

    Rows:=Range;

    Cols:=Range;

    for i:=0 to cols-1 do

      for j:=0 to rows-1 do AMatrix[i,j]:=StrToFloat(Form2.StringGrid1.Cells[i,j]);

end; 

//строим эквивалентную матрицу

procedure PlotSameMatrix(CEquival:TMatrix;AMatrix:TMatrix;Range:integer);

var i,j:integer;

begin

  for i:=0 to Range-1 do

    for j:=0 to Range-1 do

    begin

       CEquival[i,j]:=AMatrix[i,j];

    end;

end; 
 

//Процедуры форматированного  вывода/печати матриц AMatrix в Memo

procedure Coord_AMatrix(var AMatrix:TMatrix;Range:integer);

var i,j,k:integer;

    str:string;

begin

Form2.Memo1.Lines.Add('Матрицa');

str:='';

     for i:=0 to Range-1 do

      begin

        for j:=0 to range-1 do str:=str + FloatToStr(AMatrix[i,j]) + ' ';

           Form2.Memo1.Lines.Add(str);

      end;

end;

//Процедуры форматированного  вывода/печати матриц VMatrix в Memo

procedure Coord_VMatrix(var VMatrix:TMatrix;Range:integer);

var i,j:integer;

    str:string;

begin

Form2.Memo1.Lines.Add('Ветора');

   for i:=0 to Range-1 do

   begin

     for j:=0 to range-1 do str:=str + FloatToStr(VMatrix[i,j]) + ' ';

       Form2.Memo1.Lines.Add(str);

     end;

end; 
 

//cуммирование  диагональных элементов (след  матрицы)

function Trace(Range:integer;AMatrix:TMatrix):real;

var i,N:integer;

    diag_sum:real;

begin

     Diag_sum:=0;

     Trace:=0;

     N:=Range;

     for i:=0 to N-1 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

    for i:=0 to Range-1 do

      for j:=0 to Range-1 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];

      end;

end; 

//Процедура формирования  матриц A (последовательности матриц)

procedure AConsistance(var AMatrix:TMatrix;CEquival,V:TMatrix;Range:integer);

var i,j,k:integer;

begin

  for i:=0 to Range-1 do

     for j:=0 to Range-1 do

     begin

        AMatrix[i,j]:=0;

     end;

     for k:=0 to Range-1 do

       for i:=0 to Range-1 do

       begin

         for j:=0 to Range-1 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-1]*pow(x,3)-PVec[k]*pow(x,2)

                      -PVec[k+1]*x-PVec[k+2];

    if Range=3 then f:=pow(x,3)-PVec[k-1]*pow(x,2)-PVec[k]*x-PVec[k+1];

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-1]*x-PVec[k]*2;

    if Range=3 then F_deriv:=6*x-2*PVec[k-1];

end; 

//Реализация метода  хорд для решения характеристического  уравнения

procedure ChordMethood(var X,Y:real;x1,x2,eps:real;i,Range:integer;PVec:TVec);

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