{
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
{
for (int j = 0; j
{
TryStrToFloat (StringGrid1-> Cells [j] [i], A [I] [j]);
}
}
for (int i = 0; i
{
for (int j = 0; 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
{
Nig [i] [0] = A [i] [0];
Ver [0] [i] = A [0] [i]/Nig [0] [0];
}
for (int i = 0; i
{
for (int j = 0; j
{
if (i
{
Nig [i] [j] = 0;
}
if (i> j)
{
Ver [i] [j] = 0;
}
}
}
for (int i = 1; i
{
Ver [i] [i] = 1;
}
for (int i = 1; i
{
for (int j = i; j
{
for (int k = 0; k
{
p = p + Nig [j] [k] * Ver [k] [i];
}
Nig [j] [i] = A [j] [i]-p;
p = 0;
}
for (int j = i +1; j
{
for (int k = 0; 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
{
p = 0;
for (int j = 0; 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
{
s = "";
for (int j = 0; j
{
s + = FloatToStr (Nig [i] [j]) + "";
}
Memo1-> Lines-> Add (s);
}
Memo1-> Lines-> Add ("Верхня трикутна матриця: ");
for (int i = 0; i
{
s = "";
for (int j = 0; j
{
s + = FloatToStr (Ver [i] [j]) + "";
}
Memo1-> Lines-> Add (s);
}
Memo1-> Lines-> Add ("");
Memo1-> Lines-> Add ("Коріння СЛАР рівні: ");
for (int i = 0; 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