Автор работы: Пользователь скрыл имя, 12 Июня 2013 в 22:14, курсовая работа
Метод А. Н. Крылова нахождения собственных значений и векторов является в основном учебным методом, т.к. количество вычислений значительно больше других методов (Данилевского, неопределенных коэффициентов и др.) и соответственно по скорости метод Крылова уступает им. Но из - за своей простоты он остается достаточно популярным учебным методом и может использоваться при решении матриц небольших порядков.
Введение……………………………………………………………………….4
Часть 1 (теоретическая)……………………………………………………….5
Нахождение собственных значений…………………………………….5
Нахождение собственных векторов……………………………………..6
Список литературы………………
matrix[i][k] = StrToFloat(bufs); k++; bufs="";
}
}
//----------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
for (i=0;i<step;i++)
vektori[0][i]=StrToFloat(
Label5->Visible=false;
Label6->Visible=true;
Button2->Visible=false;
Button3->Visible=true;
for (k=1;k<step+1;k++)
for (i=0;i<step;i++)
{
vektori[k][i]=0;
for (j=0;j<step;j++)
vektori[k][i]+=matrix[i][j]*
}
for (j=0;j<step;j++)
for (i=0;i<step+1;i++)
vektorg[i][j]=vektori[i][j];
for (j=0;j<step;j++)
for (i=0;i<step+1;i++)
StringGrid2->Cells[j][i]=
}
//----------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
double a;
Label6->Visible=false;
Label7->Visible=true;
Button4->Visible=true;
Button3->Visible=false;
for (k=1;k<step;k++)
for (j=k+1;j<step+1;j++)
{
a=vektorg[step-k][j-1]/
for (i=k;i<step+1;i++)
vektorg[step-i][j-1]-=vektorg[
vektorg[step][j-1]-=vektorg[
}
for (i=0;i<step;i++)
koef[i]=0;
for (i=step-1;i>=0;i--)
{
buf=-vektorg[step][i];
for (j=0;j<step;j++)
buf-=koef[j]*vektorg[step-1-j]
koef[i]=RoundTo(buf/vektorg[
}
for (i=0;i<step;i++)
StringGrid3->Cells[i][0]=koef[
for (j=0;j<step;j++)
for (i=0;i<step+1;i++)
StringGrid2->Cells[j][i]=
}
//----------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
double c;
int vg,ng;
bool chnch;
Label7->Visible=false;
Label11->Visible=true;
Label8->Visible=false;
Label10->Visible=true;
StringGrid4->Visible=true;
Button6->Visible=true;
Button4->Visible=false;
for (i=0;i<step;i++)
L[i]=0;
for (j=0;;j++)
{
k=0;
q[0]=1;
for (i=1;i<=step;i++)
{
q[i]=koef[i-1]+q[i-1]*j;
if (q[i]>0) k++;
}
if (k==step) {vg=j; break; }
}
for (j=0;;j++)
{
k=0;
q[0]=1;
chnch=true;
for (i=1;i<=step;i++)
{
if (chnch) {q[i]=-koef[i-1]+q[i-1]*j; chnch=false; }
else { q[i]=koef[i-1]+q[i-1]*j; chnch=true; }
if (q[i]>0) k++;
}
if (k==step) {ng=-j; break; }
}
j=0;
for (c=ng;c<=vg;c+=0.001)
if (Polinom(c)*Polinom(c+0.001)<
Dix(c,c+0.001);
for (i=0;i<step;i++)
StringGrid4->Cells[i][0]=L[i];
}
//----------------------------
double __fastcall TForm1::Polinom(double x)
{
double stx;
stx=1;
buf=0;
buf+=koef[step-1];
for (i=1;i<step;i++)
{
stx=stx*x;
buf+=koef[step-i-1]*stx;
}
buf+=stx*x;
return buf;
}
void __fastcall TForm1::Dix(double a,double b)
{
if ((b-a>0.0000000000001)&(
if ((b-a>0.0000000000001)&(
if (b-a<0.0000000000001) {L[j]=(a+b)/2; j++; }
}
void __fastcall TForm1::CheckBox1Click(TObject *Sender)
{
if (CheckBox1->Checked)
{
Label8->Visible=true;
Label9->Visible=true;
StringGrid2->Visible=true;
StringGrid3->Visible=true;
} else
{
Label8->Visible=false;
Label9->Visible=false;
StringGrid2->Visible=false;
StringGrid3->Visible=false;
}
}
//----------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
Button1->Click();
Button2->Click();
Button3->Click();
Button4->Click();
Button6->Click();
}
//----------------------------
void __fastcall TForm1::Button6Click(TObject *Sender)
{
String bufs;
Memo2->Visible=true;
Memo2->Width=130*step+120;
Label11->Visible=false;
Button6->Visible=false;
Button1->Visible=true;
Button5->Visible=true;
for (k=0;k<step;k++)
{
q[0]=1;
vek[0][k]=0;
for (i=1;i<step;i++)
{
q[i]=L[k]*q[i-1]+koef[i-1];
vek[i][k]=0;
}
for (i=0;i<step;i++)
for (j=0;j<step;j++)
vek[j][k]+=q[i]*vektori[step-
}
bufs="";
for (i=0;i<step;i++)
bufs+=StringGrid4->Cells[i][0]
Memo2->Lines->Add(bufs+"-
Memo2->Lines->Add("Собственные вектора:");
for (j=0;j<step;j++)
{
bufs="";
for (i=0;i<step;i++)
bufs+=FloatToStr(vek[j][i])+"
Memo2->Lines->Add(bufs);
}
}
//----------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
Memo2->Lines->SaveToFile("
}
Приложение 2. Результаты работы программы.
Матрица:
1 2 3 4
2 1 2 3
3 2 1 2
4 3 2 1
-3,41421356237312 | -1,09901951359278 | -0,585786437626896 | 9,09901951359279 | -собственные значения
Собственные вектора:
-34,9705627484782 | 2,43529751065973 | -1,02943725152294 | 369,564702489341 |
-14,4852813742386 | -2,97058540778349 | 2,48528137423868 | 302,970585407784 |
14,485281374239 | -2,97058540778355 | -2,48528137423854 | 302,970585407784 |
34,9705627484778 | 2,43529751065972 | 1,02943725152286 | 369,564702489341 |
Матрица:
1 2 3 4 5
2 1 2 3 4
3 2 1 2 3
4 3 2 1 2
5 4 3 2 1
-5,23606797749978 | -1,63523773004179 | -0,763932022500214 | -0,55629491531239 | 13,1915326453542 | - собственные значения
Собственные вектора:
502,439613479969 | -10,7459767724548 | 1,56038652002362 | -0,441664995324075 | 13380,1876417679 |
310,524758424984 | 5,9790301978571 | -2,52475842498563 | 1,29343742571871 | 10948,7275323764 |
8,66862137627322E-13 | 15,391302037353 | -1,70530256582424E-13 | -1,62164619706542 | 10177,2303441597 |
-310,524758424983 | 5,97903019785804 | 2,52475842498507 | 1,29343742571916 | 10948,7275323765 |
-502,439613479972 | -10,7459767724548 | -1,560386520024 | -0,441664995324999 | 13380,1876417678 |
Информация о работе Нахождение собственных значений и векторов