{
Close ();
}
// ---------------------------------------------------------------------------
void __fastcall TForm1:: RadioButton2Click (TObject *Sender)
{
ButtonGauss->Visible=false;
ButtonHolec->Visible=true;
}
// ---------------------------------------------------------------------------
void __fastcall TForm1:: RadioButton1Click (TObject *Sender)
{
ButtonGauss->Visible=true;
ButtonHolec->Visible=false;
}
// ---------------------------------------------------------------------------
void __fastcall TForm1:: ButtonHolecClick (TObject *Sender)
{
Memo1->Lines->Clear ();
for (int i=0; i<n; i++)
{
for (int j=0; j<n+1; j++)
{
TryStrToFloat (StringGrid1->Cells [j] [i],A [i] [j]);
}
}
for (int i=0; i<n; i++)
{
for (int j=0; j<n+1; j++)
{
if (A [i] [j] ==NULL)
{
ShowMessage ("Ошибка! Есть пустые ячейки!");
fl1=true;
i=n;
break;
}
}
}
Memo1->Lines->Add (" МЕТОД ХОЛЕЦКОГО: ");
Memo1->Lines->Add ("");
if (! fl1) {
Y=new float [n] ;
for (int i=0; i<n; i++)
{
Nig [i] [0] =A [i] [0] ;
Ver [0] [i] =A [0] [i] /Nig [0] [0] ;
}
for (int i=0; i<n; i++)
{
for (int j=0; j<n; j++)
{
if (i<j)
{
Nig [i] [j] =0;
}
if (i>j)
{
Ver [i] [j] =0;
}
}
}
for (int i=1; i<n; i++)
{
Ver [i] [i] =1;
}
for (int i=1; i<n; i++)
{
for (int j=i; j<n; j++)
{
for (int k=0; k<i; k++)
{
p=p+Nig [j] [k] *Ver [k] [i] ;
}
Nig [j] [i] =A [j] [i] -p;
p=0;
}
for (int j=i+1; j<n; j++)
{
for (int k=0; k<i; k++)
{
p=p+Nig [i] [k] *Ver [k] [j] ;
}
Ver [i] [j] =1/Nig [i] [i] * (A [i] [j] -p);
p=0;
}
}
for (int i=0; i<n; i++)
{
p=0;
for (int j=0; j<i; j++)
{
p=p+Nig [i] [j] *Y [j] ;
}
Y [i] = (A [i] [n] -p) /Nig [i] [i] ;
}
for (int i=n-1; i>=0; i--)
{
p=0;
for (int j=n-1; j>i; j--)
{
p=p+Ver [i] [j] *X [j] ;
}
X [i] = (Y [i] -p) /Ver [i] [i] ;
}
String s="";
Memo1->Lines->Add ("Нижняя треугольная матрица: ");
for (int i=0; i<n; i++)
{
s="";
for (int j=0; j<n+1; j++)
{
s+=FloatToStr (Nig [i] [j]) +" ";
}
Memo1->Lines->Add (s);
}
Memo1->Lines->Add ("Верхняя треугольная матрица: ");
for (int i=0; i<n; i++)
{
s="";
for (int j=0; j<n+1; j++)
{
s+=FloatToStr (Ver [i] [j]) +" ";
}
Memo1->Lines->Add (s);
}
Memo1->Lines->Add ("");
Memo1->Lines->Add ("Корни СЛАУ равны: ");
for (int i=0; i<n; i++)
{
if (X [i] ! =NULL)
{
Memo1->Lines->Add ("x"+IntToStr (i+1) +" = "+FloatToStr (X [i]));
}
else
{
Memo1->Lines->Add ("Нет корней!");
break;
}
}
}
}
// ---------------------------------------------------------------------------
Результаты расчета:
МЕТОД ГАУССА: | МЕТОД ХОЛЕЦКОГО: |
На первом этапе матрица приводится к ступенчатому виду: 1 - 2,25 0,5 0,5 0 1 6 4 0 0 1 0,625 На втором этапе вычисляются корни СЛАУ исходя из ступенчатой системы: x1 = 0,75 x2 = 0,25 x3 = 0,625 | Матрица разбивается на верхнюю и нижнюю треугольные матрицы. Нижняя треугольная матрица: 81 0 0 0 45 24,9999980926514 0 0 45 10,0000019073486 8,99999618530273 0 Верхняя треугольная матрица: 1 - 0,555555582046509 0,555555582046509 0 0 1 0,400000095367432 0 0 0 1 0 Корни СЛАУ равны: x1 = 6 x2 = - 5 x3 = - 4 |