Рефетека.ру / Информатика и програм-ие

Курсовая работа: Прямой метод вращения векового определителя

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное агентство по образованию

Государственное образовательное учреждение

Высшего профессионального образования

«Оренбургский государственный университет»

Факультет экономики и управления


Кафедра математического обеспечения информационных систем


КУРСОВАЯ РАБОТА


по дисциплине «Численные методы»


Прямой метод вращения векового определителя


ОГУ 061800.8006.18 ООО


Руководитель работы

____________________Ващук И.Н.

«_____» _______________ 2006 г.

Исполнитель студент гр. 04ММЭ

________________Широбоков П.Д.

«_____» ________________ 2006 г.


Оренбург 2006

Оглавление


Введение

Постановка задачи

Описание метода

Сходимость метода

Описание входных и выходных данных

Заключение

Список литературы

Приложение А

Приложение Б


Введение


Численные методы решения проблемы собственных значений до конца 40-х годов, сводились, в основном, к решению характеристического уравнения. При реализации такого подхода, основные усилия были направлены на разработку эффективных методов быстрого вычисления коэффициентов характеристического уравнения. Такие методы имеют названия прямых. Популярным методом этого типа является метод Данилевского. Он давал довольно большую погрешность, но в тоже время имел очень большую скорость получения результата.

Мы предпримем попытку анализа возможности использования этого метода в современных условиях. Попытаемся обозначить возможные границы применения этого метода, и так же найти области науки, где пользоваться методом Данилевского было бы очень удобно.

Постановка задачи


Большое число задач математики и физики требует отыскания собственных значений и собственных векторов матриц, т.е. отыскания таких значений +Прямой метод вращения векового определителя, для которых существуют нетривиальные решения однородной системы линейных алгебраических уравнений

Прямой метод вращения векового определителя , (1)

и отыскания этих нетривиальных решений.

Здесь Прямой метод вращения векового определителя -квадратная матрица порядка m , Прямой метод вращения векового определителя- неизвестный вектор - столбец.

Из курса алгебры известно, что нетривиальное решение системы (1) существует тогда и только тогда, когда

Прямой метод вращения векового определителя, (2)

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

Определитель Прямой метод вращения векового определителя называется характеристическим (или вековым ) определителем, а уравнение (2) называется характеристическим (или вековым ) уравнением.

Различают полную проблему собственных значений, когда необходимо отыскать все собственные значения матрицы А и соответствующие собственные векторы, и частичную проблему собственных значений, когда необходимо отыскать только некоторые собственные значения, например, максимальное по модулю собственное значение .


Описание метода


Идея метода Данилевского состоит в том, что матрица А приводится к “нормальной форме Фробениуса”, имеющей вид: Прямой метод вращения векового определителя .

Характеристическое уравнение для матрицы Р имеет простой вид

Прямой метод вращения векового определителя

т.е. коэффициенты при степенях Прямой метод вращения векового определителя характеристического полинома непосредственно выражаются через элементы первой строки матрицы Р.

Приведение матрицы А к нормальной форме Фробениуса Р осуществляется последовательно построкам, начиная с последней строки.

1. Приведем матрицу Прямой метод вращения векового определителя

к виду Прямой метод вращения векового определителя

Пусть Прямой метод вращения векового определителя Можно проверить,что такой вид имеет матрица Прямой метод вращения векового определителя, которая равна Прямой метод вращения векового определителя

где

Прямой метод вращения векового определителяПрямой метод вращения векового определителя

Следующий шаг - приведение Прямой метод вращения векового определителя подобным преобразованием к Прямой метод вращения векового определителя. Прямой метод вращения векового определителя

Таким образом Прямой метод вращения векового определителя

И так далее: Прямой метод вращения векового определителя

2. Рассмотрим нерегулярный случай, когда матрица, полученная в результате подобных преобразований приведена уже к виду

Прямой метод вращения векового определителя и элемент Прямой метод вращения векового определителя .

Таким образом обычная процедура метода Данилевского не подходит из-за необходимости деления на ноль. В этой ситуации возможно два случая.

2.1 Предполагаем, что левее Прямой метод вращения векового определителя есть элемент Прямой метод вращения векового определителя Прямой метод вращения векового определителя Тогда домножая матрицу Прямой метод вращения векового определителя слева и справа на элементарную матрицу перестановок Прямой метод вращения векового определителя, получаем матрицу Прямой метод вращения векового определителя.

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

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

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

Обратим внимание на то, что матрица Прямой метод вращения векового определителя уже имеет нормальную форму Фробениуса, и поэтому сомножитель Прямой метод вращения векового определителя просто развертывается в виде многочлена с коэффициентами, равными элементам первой строки.

Сомножитель Прямой метод вращения векового определителя нужно преобразовывать. Для развертывания можно применять метод Данилевского, приводя матрицу Прямой метод вращения векового определителя подобными преобразованиями к нормальной форме Фробениуса.

Указанный подход становится неудовлетворительным при вычислении собственных значений матриц, имеющих порядок m в несколько десятков (и тем более сотен). В частности, одним из недостатков является так же то, что точность вычисления корней многочлена высокой степени данным методом чрезвычайно чувствительна к погрешности (накапливающейся со скоростью геометрической прогрессии) в коэффициентах, и на этапе вычисления последних может быть в значительной степени потеряна информация о собственных значениях матрицы.

Тесты метода и ПО см. В Приложении Б.

Сходимость метода


Определение. Квадратная матрица Р порядка m называется подобной матрице А , если она представлена в виде Прямой метод вращения векового определителя, где S - невыродженная квадратная матрица порядка m.

Теорема. Характеристический определитель исходной и подобной матрицы совпадают .

Доказательство.

Прямой метод вращения векового определителя

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

Прямой метод вращения векового определителя .

Теорема. Пусть Прямой метод вращения векового определителяє есть собственное значение , а Прямой метод вращения векового определителя есть соответствующий собственный вектор матрицы Р , которая подобна матрице А ,т.е. Прямой метод вращения векового определителя

Тогда Прямой метод вращения векового определителя есть собственный вектор матрицы А , соответствующий собственному значению Прямой метод вращения векового определителя

Доказательство.Тривиально следует из того, что Прямой метод вращения векового определителя

Домножая левую и правую часть этого равенства слева на S , имеем

Прямой метод вращения векового определителяА это и означает, что Прямой метод вращения векового определителя-собственный вектор матрицы А , отвечающий собственному значению Прямой метод вращения векового определителя


Описание входных и выходных данных


Входные параметры:

Квадратная матрица порядка n*n. Рекомендуется, чтобы она была хорошо обусловлена.

Выходные параметры:

Получаем коэффициенты при степенях Прямой метод вращения векового определителя характеристического полинома. Решая данное уравнение получаем собственные значения исходной матрицы. Следующим шагом является определение собственных векторов.

.

Заключение


Обозначим некоторые выводы по проделанной работе:

Во время освоения данного метода мы не могли пропустить некоторые минусы метода Данилевского:

- Погрешность накапливается со скоростью геометрической прогрессии.

- Приходится решать достаточно сложное уравнение порядка n (если решать с помощью приближенных метод, снова получаем некоторую погрешность)

- В программном варианте используются достаточно большие объемы оперативной памяти, к примеру, приходится хранить до 4 матриц порядка n*n.

Но так же нельзя не остановиться на очевидных плюсах метода:

- Метод удобен для нахождения собственных векторов практически любой матрицы. Рекомендуется рассматривать матрицы меньше порядка нескольких десятков.

- Данный метод очень удобен в программировании (на этапе разработки ПО проблем практически не возникало).

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


Список литературы


1. Основы численных методов: Учебник для вузов/ В.М. Вержбицкий. – М.: Высш. Шк., 2002. – 840 с.: ил.

2. Высшая математика для экономистов: Учебник для вузов/ Н.Ш. Кремер, Б.А. Путко, И.М. Тришин, М.Н. Фридман; Под ред. проф. Н.Ш. Кремера. – 2-е изд., перераб. и доп. – М.: ЮНИТИ, 2004. – 471 с.

3. Интернет.

4. Библия Delphi/ М.Е. Фленов – СПб.: БХВ-Петербург, 2005. – 880 с.: ил.

Приложение А

unit MainUnit;

interface

uses

Windows, …, Buttons;

type

Matrix = array of array of real;

TForm1 = class(TForm)

private

{ Private declarations }

// Процедура "перестановки" матрицы, возвращает true если все хорошо

function Remove(Var rez: Matrix; i: integer): boolean;

// Умножение 2-х матриц

procedure Multiple(a,b:Matrix; Var rez: Matrix);

// Возвращение решений

function FindDet(Var a:Matrix):string;

// Обнуление матриц

procedure Zero(Var a:Matrix);

public

{ Public declarations }

end;

var Form1: TForm1;


implementation

{$R *.dfm}

function TForm1.FindDet(Var a: Matrix):string;

Var i,j : integer;

M,Mob,bac : Matrix;

flag : boolean;

begin

SetLength(M,Length(a[1]),Length(a[1]));

SetLength(Mob,Length(a[1]),Length(a[1]));

SetLength(bac,Length(a[1]),Length(a[1]));

flag:=true;

for i:=Length(a[1])-2 downto 0 do

// Построение матриц

BEGIN

// Обработка случая 2.1

if (a[i+1,i]=0) and (not Remove(a,i)) then

begin

// Если ничего не помогло

flag:=false;

Break;

end;

// Обнуление всех матриц

Zero(M); Zero(Mob); Zero(bac);

// Построение матриц М

for j:=0 to Length(a[i])-1 do

begin

Mob[j,j]:=1;

Mob[i,j]:=a[i+1,j];

M[j,j]:=1;

M[i,j]:=-Mob[i,j]/a[i+1,i];

if i=j then M[i,j]:=1/a[i+1,i];

end;

// Умножение матрицы А на М

Multiple(a,M,bac); // A*M

Multiple(Mob,bac,a); // M^(-1)*(A*M)

END;

// Обработка случая 2.2, если надо

if not flag then

begin

M:=nil;

Mob:=nil;

// Находим матрицу С и выводим ее коэффициенты

SetLength(bac,1,length(a)-i-1);

for j:=i+1 to length(a)-1 do bac[0,j-i-1]:=a[i,j]; // Матрица C

Result:='('+FloatToStrF(bac[0,0],ffFixed,10,3);

for i:=1 to Length(bac)-1 do

Result:=Result+','+FloatToStrF(bac[0,i],ffFixed,10,3);

Result:=Result+'),';

// "Урезаем" матрицу А до состояния B, см. 2.2 пункт алгоритма

SetLength(a,i+1,i+1);

// Вызываем рекурсивно процедуру

Result:=Result+FindDet(a);

end

else begin

Result:='('+FloatToStrF(a[0,0],ffFixed,10,3);

for i:=1 to Length(a)-1 do

Result:=Result+','+FloatToStrF(a[0,i],ffFixed,10,3);

Result:=Result+')';

end;

bac:=nil;

end;

procedure TForm1.bbPlusClick(Sender: TObject);

begin

sgInData.ColCount:=sgInData.ColCount+1;

sgInData.RowCount:=sgInData.RowCount+1;

if sgInData.ColCount=11 then ShowMessage('Attention!!! Полученные результаты имеют малую точность');

end;

procedure TForm1.bbMinusClick(Sender: TObject);

begin

if sgInData.ColCount<3 then Exit;

sgInData.ColCount:=sgInData.ColCount-1;

sgInData.RowCount:=sgInData.RowCount-1;

end;

procedure TForm1.bbOpenClick(Sender: TObject);

Var k : real;

f : textfile;

a,i,j : integer;

begin

OpenDialog1.Filter:='Все файлы (*.*)|*.*| Файлы .txt (*.txt)|*.TXT';

OpenDialog1.Title:='Выбор файла для этой проги';

OpenDialog1.FilterIndex:=2;

if OpenDialog1.Execute then

begin

AssignFile(f,OpenDialog1.FileName);

Reset(f);

end

else Exit;

ReadLn(f,a);

sgInData.ColCount:=a;

sgIndata.RowCount:=a;

for i:=0 to a-1 do

begin

for j:=0 to a-1 do

begin

Read(f,k);

sgIndata.Cells[j,i]:=FloattoStr(k);

end;

ReadLn(f);

end;

CloseFile(f);

end;

procedure TForm1.bbFindClick(Sender: TObject);

Var a :matrix;

i,j :integer;

begin

try

SetLength(a,sgInData.ColCount,sgInData.RowCount);

for i:=0 to sgInData.RowCount-1 do

for j:=0 to sgInData.RowCount-1 do a[i,j]:=StrToFloat(sgInData.Cells[j,i]);

except

begin

a:=nil;

ShowMessage('STOP! Неправильный ввод, проверьте входные данные');

Exit;

end;

end;

OutData.Clear;

OutData.Lines.Add('Коэффициенты характеристического уравнения');

OutData.Lines.Add(FindDet(a));

a:=nil;

end;

procedure TForm1.Multiple(a, b: Matrix; var rez: Matrix);

var i,k,j : word;

Begin

for i:=0 to Length(a[1])-1 do

for k:=0 to Length(a[1])-1 do

begin

// Обновление занятых матриц

rez[i,k]:=0;

for j:=0 to Length(a[1])-1 do rez[i,k]:=rez[i,k]+a[i,j]*b[j,k];

end;

end;

function TForm1.Remove(var rez: Matrix; i: integer): boolean;

Var j,k : integer;

E,bac : Matrix;

begin

Result:=false;

for k:=0 to i-1 do // Ищем ненулевой элемент слева

if rez[i+1,k]<>0 then

begin

Result:=true;

Break;

end;

if not Result then Exit;

SetLength(E,Length(rez[1]),Length(rez[1]));

SetLength(bac,Length(rez[1]),Length(rez[1]));

for j:=0 to Length(rez[1])-1 do E[j,j]:=1;

for j:=0 to Length(rez[1])-1 do

begin

// Меняем две строки местами в матрице E

E[i,j]:=-E[i,j]-E[k,j];

E[k,j]:=-E[i,j]-E[k,j];

E[i,j]:=-E[i,j]-E[k,j];

end;

Multiple(rez,E,bac); // A*M

Multiple(E,bac,rez); // M^(-1)*(A*M)

E:=nil;

bac:=nil;

end;

procedure TForm1.Zero(var a: Matrix);

Var i,j: integer;

begin

for i:=0 to Length(a)-1 do

for j:=0 to Length(a[0])-1 do a[i,j]:=0;

end;

end.

Приложение Б

Прямой метод вращения векового определителя

Результаты работы программы с теми же входными данными:

Рис 1.

Прямой метод вращения векового определителя

Приложение Б

(продолжение)

Прямой метод вращения векового определителяПрямой метод вращения векового определителя Прямой метод вращения векового определителя Прямой метод вращения векового определителя


Прямой метод вращения векового определителя

Прямой метод вращения векового определителя Прямой метод вращения векового определителя

Прямой метод вращения векового определителя

Прямой метод вращения векового определителя Прямой метод вращения векового определителя

Прямой метод вращения векового определителя

Результаты работы программы с теми же входными данными:

Рис 2.

Прямой метод вращения векового определителя

Рефетека ру refoteka@gmail.com