Автор работы: Пользователь скрыл имя, 12 Июня 2013 в 22:14, курсовая работа
Метод А. Н. Крылова нахождения собственных значений и векторов является в основном учебным методом, т.к. количество вычислений значительно больше других методов (Данилевского, неопределенных коэффициентов и др.) и соответственно по скорости метод Крылова уступает им. Но из - за своей простоты он остается достаточно популярным учебным методом и может использоваться при решении матриц небольших порядков.
Введение……………………………………………………………………….4
Часть 1 (теоретическая)……………………………………………………….5
Нахождение собственных значений…………………………………….5
Нахождение собственных векторов……………………………………..6
Список литературы………………
Министерство образования Российской Федерации
Тульский государственный университет
Кафедра прикладной математики и информатики
Утверждаю
Зав. кафедрой ПМиИ
___________________ В.И. Иванов
«___» _____________ 2008 г.
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовому проекту по курсу
«ЧИСЛЕННЫЕ МЕТОДЫ»
на тему
______________________________
______________________________
______________________________
Автор работы __________________ студент гр. _________ _____________________
Руководитель работы __________________ _____________ ____________________
Работа защищена ___________________ с оценкой ____________________________
Члены комиссии __________________ _______________ ____________________
__________________ _______________ ____________________
__________________ _______________ ____________________
Тула, 2008
Утверждаю
Зав. кафедрой ПМиИ
___________________ В.И. Иванов
«___» _____________ 20___ г.
ЗАДАНИЕ
на курсовой проект по курсу
«ЧИСЛЕННЫЕ МЕТОДЫ»
студенту гр.
____________ ______________________________
Тема работы
______________________________
______________________________
______________________________
Входные данные
______________________________
______________________________
______________________________
______________________________
______________________________
Задание получил __________________ _____________________
График выполнения
работы ______________________________
______________________________
______________________________
______________________________
______________________________
______________________________
______________________________
______________________________
Замечания консультанта
______________________________
______________________________
______________________________
______________________________
К защите. Консультант работы __________________ _____________________
Министерство образования Российской Федерации
Тульский государственный университет
Кафедра прикладной математики и информатики
РЕЦЕНЗИЯ
на курсовой проект по курсу
«ЧИСЛЕННЫЕ МЕТОДЫ»
студента гр. ____________
______________________________
на тему
______________________________
______________________________
______________________________
Краткая характеристика теоретической части
______________________________
______________________________
______________________________
______________________________
______________________________
______________________________
Краткая характеристика программной реализации
______________________________
______________________________
______________________________
______________________________
______________________________
______________________________
Работа с литературой
______________________________
______________________________
______________________________
Рекомендуемая оценка ____________________________
Рецензент __________________ _______________ ____________________
Содержание
Введение…………………………………………………………
Часть 1 (теоретическая)………………………………………
Список литературы…………………………………
Приложение 1. Программа……………………………………………………8
Приложение 2. Результаты работы программы…………………………….16
Введение.
Метод А. Н. Крылова нахождения собственных значений и векторов является в основном учебным методом, т.к. количество вычислений значительно больше других методов (Данилевского, неопределенных коэффициентов и др.) и соответственно по скорости метод Крылова уступает им. Но из - за своей простоты он остается достаточно популярным учебным методом и может использоваться при решении матриц небольших порядков.
Нахождение собственных значений.
Метод Крылова основан на свойстве квадратной матрицы обращать в нуль свой характеристический многочлен.
Согласно тождеству Гамильтона-Кели, всякая квадратная матрица является корнем своего характеристического многочлена и, следовательно, обращает его в нуль.
Пусть
(1)
характеристический многочлен.
Заменяя в выражении (1) величину на , получим
(2)
Возьмем произвольный ненулевой вектор
(3)
Умножим обе части выражения (2) на :
Положим
(5)
т.е.
(6)
Учитывая (5), выражение (4) запишем в виде
(7)
или в виде
Решаем систему (7). Если эта система имеет единственное решение, то ее корни являются коэффициентами характеристического многочлена (1).
Нахождение собственных векторов.
Если известны коэффициенты и корни характеристического многочлена, то метод Крылова дает возможность найти соответствующие собственные векторы по следующей формуле:
(8)
Здесь – векторы, использованные при нахождении коэффициентов методом Крылова, а коэффициенты определяются по схеме Горнера:
(9)
Список литературы:
Приложение 1. Программа.
Unit1.h
#ifndef Unit1H
#define Unit1H
//----------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Grids.hpp>
#include "math.hpp"
#include <ExtCtrls.hpp>
//----------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TMemo *Memo1;
TButton *Button1;
TStringGrid *StringGrid1;
TGroupBox *GroupBox1;
TLabel *Label1;
TLabel *Label2;
TGroupBox *GroupBox2;
TButton *Button2;
TStringGrid *StringGrid2;
TStringGrid *StringGrid3;
TButton *Button3;
TButton *Button4;
TLabel *Label3;
TEdit *Edit1;
TLabel *Label4;
TLabel *Label5;
TLabel *Label6;
TLabel *Label7;
TStringGrid *StringGrid4;
TCheckBox *CheckBox1;
TLabel *Label8;
TLabel *Label9;
TLabel *Label10;
TButton *Button5;
TButton *Button6;
TLabel *Label11;
TMemo *Memo2;
TLabel *Label12;
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
void __fastcall Button3Click(TObject *Sender);
void __fastcall Button4Click(TObject *Sender);
double __fastcall Polinom(double x);
void __fastcall Dix(double a,double b);
void __fastcall CheckBox1Click(TObject *Sender);
void __fastcall Button5Click(TObject *Sender);
void __fastcall Button6Click(TObject *Sender);
void __fastcall FormDestroy(TObject *Sender);
private:
public:
double * *matrix;
double * *vektori;
double * *vektorg;
double * *vek;
double *L,*koef,*q;
double buf;
int i,j,k,dlstr,step;
__fastcall TForm1(TComponent* Owner);
};
//----------------------------
extern PACKAGE TForm1 *Form1;
//----------------------------
#endif
Unit1.cpp
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//----------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//----------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//----------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char bufb;
String bufs;
Memo1->Lines->LoadFromFile(
Label4->Visible=false;
Label5->Visible=true;
Button2->Visible=true;
Button5->Visible=false;
Button1->Visible=false;
Memo2->Visible=false;
Memo2->Text="";
step=Memo1->Lines->Count;
matrix = new double *[step];
for (i=0;i<step;i++)
matrix[i] = new double[step];
vektori = new double *[step+1];
for (i=0;i<step+1;i++)
vektori[i] = new double[step];
vektorg = new double *[step+1];
for (i=0;i<step+1;i++)
vektorg[i] = new double[step];
vek = new double *[step];
for (i=0;i<step+1;i++)
vek[i] = new double[step];
q = new double [step+1];
koef = new double [step];
L = new double [step];
StringGrid2->ColCount=step;
StringGrid2->RowCount=step+1;
StringGrid2->Width=step*121+
StringGrid3->ColCount=step;
StringGrid3->Width=step*121+3;
StringGrid4->ColCount=step;
StringGrid4->Width=step*101+3;
StringGrid1->ColCount=step;
StringGrid1->Width=step*51+3;
StringGrid1->Visible=true;
StringGrid1->Cells[0][0]="1";
for (i=1;i<step;i++)
StringGrid1->Cells[i][0]="0";
for (i=0;i<step;i++)
{
dlstr=Memo1->Lines->Strings[i]
k=0;
bufs="";
for (j=0;j<dlstr;j++)
{
bufb=Memo1->Lines->Strings[i][
if (bufb!=' ') bufs+=bufb;
if (bufb==' ') { matrix[i][k] = StrToFloat(bufs); k++; bufs="";}
}
Информация о работе Нахождение собственных значений и векторов