Автор работы: Пользователь скрыл имя, 04 Ноября 2014 в 13:47, курсовая работа
Задачи нахождения собственных значений и соответствующих им собственных векторов возникают в самых различных научных задачах. Например, при анализе динамических систем собственные значения определяют частоты колебаний, а собственные векторы характеризуют их форму. В электро-радиотехнических устройствах собственные значения матриц определяют характеристические постоянные времени и режимы работы этих устройств.
Введение……………………………………………………………………………...3
1. Собственные значения и собственные векторы…………………………………4
Математическое обоснование метода………………………………………….4
Метод итераций………………………………………………………………….8
Метод Леверрье-Фаддеева……………………………………………………...9
1.3.1 Основные пункты алгоритма метода Леверрье-Фаддеева…………………11
1.4 Численное решение задачи нахождения собственных значений матриц методом Леверрье-Фаддеева………………………………………………………….11
Приложение……………………………………………………………………..15
Структурная схема алгоритма метода Леверрье-Фаддеева…………………..15
Листинг программы на алгоритмическом языке "Pascal"………….................19
Литература…………………………………………………
При решении данной задачи использовались и некоторые вспомогательные процедуры, - например процедура возведения в степень.
Используя метод Леверрье-Фаддеева, найти собственные числа матрицы, а так же наибольший собственный вектор.
.
Решение.
Определяем коэффициенты характеристического уравнения посредством построения последовательности матриц.
,
,
Результаты дальнейших вычислений примут вид:
Получим характеристическое уравнение: Решая это уравнение методом хорд, предварительно уединив корни на некотором промежутке, получаем следующие значения собственных чисел:
Вычислим собственный вектор при наибольшем собственном числе матрицы методом итераций.
Итак, используя метод итераций, определить первое наибольшее собственное значение и первый собственный вектор матрицы
.
Решение.
Выбираем начально-свободный вектор
Вычисляем
Дальнейшие вычисления можно свести в Таблицу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.
Дальнейшие итерации можно прекратить. Собственное значение (наибольшее) . Нормированный собственный вектор .
Процедура Trace формирования "следа" матрицы AMatrix.
Процедура VInter формирования последовательности матриц Bmatrix.
Структурная схема процедуры AConsistance.
Структурная схема метода хорд для решения характеристического уравнения.
Процедура уединения коренй характристического уравнения.
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,
read(AMatrix[i,j]);
end;
end;
procedure PlotSameMatrix(var
CEquival:TMatrix;AMatrix:
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;
{Процедуры
форматированного вывода/
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,
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,
write(VMatrix[i,j]:4:2);
end;
end;
{Суммирование диагональных элементов (след матрицы)}
function Trace(Range:integer;AMatrix:
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,
Trace:=Diag_sum;
end;
end;
{Промежуточная матрица V}
procedure VInter(var
VMatrix:TMatrix;BMatrix,
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:
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]+
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;
var k:integer;
begin
k:=1;
if Range=4 then f:=pow(x,4)-PVec[k]*pow(x,3)-
-PVec[k+2]*x-PVec[k+3];
if Range=3 then f:=pow(x,3)-PVec[k]*pow(x,2)-
end;
{Derivative -вторая производная}
function F_deriv(x:real;i:integer;PVec:
var k:integer;
begin
k:=1;
if Range=4 then F_deriv:=12*pow(x,2)-6*PVec[k]
if Range=3 then F_deriv:=6*x-2*PVec[k];
end;
{Реализация
метода хорд для решения
procedure ChordMethood(var
X,Y:real;x1,x2,eps:real;i,
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,
k:=k+1;
LVec[k]:=X;
end
else
x1:=x2;
x2:=x1+step_h;
y1:=y2;
end;
RootNum:=k;{Число действительных корней характеристического уравнения}
end;
{===================Тело
программы=====================
var AMatrix,CEquival,BMatrix,
X_SelfVec,LVec,U_EMatrix:TVec;
P_CharacteristicParam,Pk,Pn,
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,
{Блок вычисления коэффицентов характеристического уравнения матрицы}
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,
AConsistance(AMatrix,CEquival,
GoToXY(39,1);
writeln('Матрица A',k+1,'.');
readln;
end;
Pn:=Trace(Range,AMatrix)/
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,
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,
ClrScr;
TextColor(MainTextColor);
write('Вектор собственных чисел');
for k:=1 to RootNum do
begin
GoToXY(OutPutI+ScaleI*k,
write(LVec[k]:8:4);
end;
readln;
end.
Литература.
Информация о работе Нахождение собственных значений методом Леверрье