program QuadraticFit;
uses
SysUtils;
const
N = 25; // Количество точек данных
type
TMatrix = array[1..6, 1..7] of Double;
TVector = array[1..6] of Double;
procedure SolveLinearSystem(var Matrix: TMatrix; var Solution: TVector);
var
i, j, k, m: Integer;
Temp: Double;
begin
// Метод Гаусса с выбором главного элемента
for k := 1 to 6 do
begin
// Выбор главного элемента
m := k;
for i := k + 1 to 6 do
if Abs(Matrix[i,k]) > Abs(Matrix[m,k]) then
m := i;
// Перестановка строк
if m <> k then
for j := k to 7 do
begin
Temp := Matrix[k,j];
Matrix[k,j] := Matrix[m,j];
Matrix[m,j] := Temp;
end;
// Исключение переменной
for i := k + 1 to 6 do
begin
if Matrix[k,k] <> 0 then // Проверка на деление на ноль
begin
Temp := Matrix[i,k] / Matrix[k,k];
for j := k to 7 do
Matrix[i,j] := Matrix[i,j] - Temp * Matrix[k,j];
end else
begin
Writeln('Ошибка: Деление на ноль при исключении переменной.');
Exit; // Завершение программы при ошибке деления на ноль.
end;
end;
end;
// Обратный ход
for i := 6 downto 1 do
begin
Solution[i] := Matrix[i,7];
for j := i + 1 to 6 do
Solution[i] := Solution[i] - Matrix[i,j] * Solution[j];
if Matrix[i,i] <> 0 then // Проверка на деление на ноль при обратном ходе.
Solution[i] := Solution[i] / Matrix[i,i]
else
begin
Writeln('Ошибка: Деление на ноль при обратном ходе.');
Exit; // Завершение программы при ошибке деления на ноль.
end;
end;
end;
var
x, y, z: array[1..N] of Double;
Sx, Sy, Sz, Sx2, Sy2, Sxy, Sxz, Syz: Double;
Sx3, Sy3, Sx2y, Sxy2, Sx4: Double;
A,B,C: Double;
Matrix: TMatrix;
Solution: TVector;
i: Integer;
begin
// Инициализация данных (пример значений)
for i := 1 to N do
begin
x[i] := (i - 1) div 5; // Пример значений для x (0-4)
y[i] := (i - 1) mod 5 + 1; // Пример значений для y (1-5)
z[i] := (8 + x[i] * (x[i] + y[i])); // Пример значений для z (можно изменить)
end;
// Обнуление всех сумм
Sx:=0; Sy:=0; Sz:=0; Sx2:=0; Sy2:=0; Sxy:=0; Sxz:=0; Syz:=0;
Sx3:=0; Sy3:=0; Sx2y:=0; Sxy2:=0; Sx4:=0;
// Вычисление всех необходимых сумм
for i:=1 to N do
begin
Sx += x[i];
Sy += y[i];
Sz += z[i];
Sx2 += x[i]*x[i];
Sy2 += y[i]*y[i];
Sxy += x[i]*y[i];
Sxz += x[i]*z[i];
Syz += y[i]*z[I];
Sx3 += x[I]*x[I]*x[I];
Sy3 += y[I]*y[I]*y[I];
Sx2y += x[I]*x[I]*y[I];
Sxy2 += x[I]*y[I]*y[I];
Sx4 += x[I]*x[I]*x[I]*x[I];
end;
// Формирование системы уравнений
Matrix[1][1]:=N ; Matrix[1][2]:=Sx ; Matrix[1][3]:=Sy ; Matrix[1][4]:=Sx2 ; Matrix[1][5]:=Sxy ; Matrix[1][6]:=Sy2 ; Matrix[1][7]:=Sz ;
Matrix[2][1]:=Sx ; Matrix[2][2]:=Sx2 ; Matrix[2][3]:=Sxy ; Matrix[2][4]:=Sx3 ; Matrix[2][5]:=Sx2y ; Matrix[2][6]:=Sxy2 ; Matrix[2][7]:=Sxz ;
Matrix[3][1]:=Sy ; Matrix[3][2]:=Sxy ; Matrix[3][3]:=Sy2 ; Matrix[3][4]:=Sxy2 ; Matrix[3][5]:=Sy3 ; Matrix[3][6]:=Sxz ; Matrix[3][7]:=Syz ;
// Решение системы
SolveLinearSystem(Matrix,Solution);
// Присвоение коэффициентов
A:=Solution[1];
B:=Solution[2];
C:=Solution[3];
// Вывод результатов с большей точностью
Writeln('Коэффициенты квадратичной модели:');
Writeln('A = ', A:0:6);
Writeln('B = ', B:0:6);
Writeln('C = ', C:0:6);
end.
cHJvZ3JhbSBRdWFkcmF0aWNGaXQ7Cgp1c2VzCiAgU3lzVXRpbHM7Cgpjb25zdAogIE4gPSAyNTsgLy8g0JrQvtC70LjRh9C10YHRgtCy0L4g0YLQvtGH0LXQuiDQtNCw0L3QvdGL0YUKCnR5cGUKICBUTWF0cml4ID0gYXJyYXlbMS4uNiwgMS4uN10gb2YgRG91YmxlOwogIFRWZWN0b3IgPSBhcnJheVsxLi42XSBvZiBEb3VibGU7Cgpwcm9jZWR1cmUgU29sdmVMaW5lYXJTeXN0ZW0odmFyIE1hdHJpeDogVE1hdHJpeDsgdmFyIFNvbHV0aW9uOiBUVmVjdG9yKTsKdmFyCiAgaSwgaiwgaywgbTogSW50ZWdlcjsKICBUZW1wOiBEb3VibGU7CmJlZ2luCiAgLy8g0JzQtdGC0L7QtCDQk9Cw0YPRgdGB0LAg0YEg0LLRi9Cx0L7RgNC+0Lwg0LPQu9Cw0LLQvdC+0LPQviDRjdC70LXQvNC10L3RgtCwCiAgZm9yIGsgOj0gMSB0byA2IGRvCiAgYmVnaW4KICAgIC8vINCS0YvQsdC+0YAg0LPQu9Cw0LLQvdC+0LPQviDRjdC70LXQvNC10L3RgtCwCiAgICBtIDo9IGs7CiAgICBmb3IgaSA6PSBrICsgMSB0byA2IGRvCiAgICAgIGlmIEFicyhNYXRyaXhbaSxrXSkgPiBBYnMoTWF0cml4W20sa10pIHRoZW4KICAgICAgICBtIDo9IGk7CgogICAgLy8g0J/QtdGA0LXRgdGC0LDQvdC+0LLQutCwINGB0YLRgNC+0LoKICAgIGlmIG0gPD4gayB0aGVuCiAgICAgIGZvciBqIDo9IGsgdG8gNyBkbwogICAgICBiZWdpbgogICAgICAgIFRlbXAgOj0gTWF0cml4W2ssal07CiAgICAgICAgTWF0cml4W2ssal0gOj0gTWF0cml4W20sal07CiAgICAgICAgTWF0cml4W20sal0gOj0gVGVtcDsKICAgICAgZW5kOwoKICAgIC8vINCY0YHQutC70Y7Rh9C10L3QuNC1INC/0LXRgNC10LzQtdC90L3QvtC5CiAgICBmb3IgaSA6PSBrICsgMSB0byA2IGRvCiAgICBiZWdpbgogICAgICBpZiBNYXRyaXhbayxrXSA8PiAwIHRoZW4gLy8g0J/RgNC+0LLQtdGA0LrQsCDQvdCwINC00LXQu9C10L3QuNC1INC90LAg0L3QvtC70YwKICAgICAgYmVnaW4KICAgICAgICBUZW1wIDo9IE1hdHJpeFtpLGtdIC8gTWF0cml4W2ssa107CiAgICAgICAgZm9yIGogOj0gayB0byA3IGRvCiAgICAgICAgICBNYXRyaXhbaSxqXSA6PSBNYXRyaXhbaSxqXSAtIFRlbXAgKiBNYXRyaXhbayxqXTsKICAgICAgZW5kIGVsc2UgCiAgICAgIGJlZ2luCiAgICAgICAgV3JpdGVsbign0J7RiNC40LHQutCwOiDQlNC10LvQtdC90LjQtSDQvdCwINC90L7Qu9GMINC/0YDQuCDQuNGB0LrQu9GO0YfQtdC90LjQuCDQv9C10YDQtdC80LXQvdC90L7QuS4nKTsKICAgICAgICBFeGl0OyAvLyDQl9Cw0LLQtdGA0YjQtdC90LjQtSDQv9GA0L7Qs9GA0LDQvNC80Ysg0L/RgNC4INC+0YjQuNCx0LrQtSDQtNC10LvQtdC90LjRjyDQvdCwINC90L7Qu9GMLgogICAgICBlbmQ7CiAgICBlbmQ7CiAgZW5kOwoKICAvLyDQntCx0YDQsNGC0L3Ri9C5INGF0L7QtAogIGZvciBpIDo9IDYgZG93bnRvIDEgZG8KICBiZWdpbgogICAgU29sdXRpb25baV0gOj0gTWF0cml4W2ksN107CiAgICBmb3IgaiA6PSBpICsgMSB0byA2IGRvCiAgICAgIFNvbHV0aW9uW2ldIDo9IFNvbHV0aW9uW2ldIC0gTWF0cml4W2ksal0gKiBTb2x1dGlvbltqXTsKICAgIAogICAgaWYgTWF0cml4W2ksaV0gPD4gMCB0aGVuIC8vINCf0YDQvtCy0LXRgNC60LAg0L3QsCDQtNC10LvQtdC90LjQtSDQvdCwINC90L7Qu9GMINC/0YDQuCDQvtCx0YDQsNGC0L3QvtC8INGF0L7QtNC1LgogICAgICBTb2x1dGlvbltpXSA6PSBTb2x1dGlvbltpXSAvIE1hdHJpeFtpLGldCiAgICBlbHNlIAogICAgYmVnaW4KICAgICAgV3JpdGVsbign0J7RiNC40LHQutCwOiDQlNC10LvQtdC90LjQtSDQvdCwINC90L7Qu9GMINC/0YDQuCDQvtCx0YDQsNGC0L3QvtC8INGF0L7QtNC1LicpOwogICAgICBFeGl0OyAvLyDQl9Cw0LLQtdGA0YjQtdC90LjQtSDQv9GA0L7Qs9GA0LDQvNC80Ysg0L/RgNC4INC+0YjQuNCx0LrQtSDQtNC10LvQtdC90LjRjyDQvdCwINC90L7Qu9GMLgogICAgZW5kOwogIGVuZDsKZW5kOwoKdmFyIAogICB4LCB5LCB6OiBhcnJheVsxLi5OXSBvZiBEb3VibGU7IAogICBTeCwgU3ksIFN6LCBTeDIsIFN5MiwgU3h5LCBTeHosIFN5ejogRG91YmxlOyAKICAgU3gzLCBTeTMsIFN4MnksIFN4eTIsIFN4NDogRG91YmxlOyAKICAgQSxCLEM6IERvdWJsZTsgCiAgIE1hdHJpeDogVE1hdHJpeDsgCiAgIFNvbHV0aW9uOiBUVmVjdG9yOyAKICAgaTogSW50ZWdlcjsKCmJlZ2luIAogICAvLyDQmNC90LjRhtC40LDQu9C40LfQsNGG0LjRjyDQtNCw0L3QvdGL0YUgKNC/0YDQuNC80LXRgCDQt9C90LDRh9C10L3QuNC5KQogICBmb3IgaSA6PSAxIHRvIE4gZG8gCiAgIGJlZ2luIAogICAgIHhbaV0gOj0gKGkgLSAxKSBkaXYgNTsgLy8g0J/RgNC40LzQtdGAINC30L3QsNGH0LXQvdC40Lkg0LTQu9GPIHggKDAtNCkKICAgICB5W2ldIDo9IChpIC0gMSkgbW9kIDUgKyAxOyAvLyDQn9GA0LjQvNC10YAg0LfQvdCw0YfQtdC90LjQuSDQtNC70Y8geSAoMS01KQogICAgIHpbaV0gOj0gKDggKyB4W2ldICogKHhbaV0gKyB5W2ldKSk7IC8vINCf0YDQuNC80LXRgCDQt9C90LDRh9C10L3QuNC5INC00LvRjyB6ICjQvNC+0LbQvdC+INC40LfQvNC10L3QuNGC0YwpCiAgIGVuZDsKCiAgIC8vINCe0LHQvdGD0LvQtdC90LjQtSDQstGB0LXRhSDRgdGD0LzQvCAKICAgU3g6PTA7IFN5Oj0wOyBTejo9MDsgU3gyOj0wOyBTeTI6PTA7IFN4eTo9MDsgU3h6Oj0wOyBTeXo6PTA7CiAgIFN4Mzo9MDsgU3kzOj0wOyBTeDJ5Oj0wOyBTeHkyOj0wOyBTeDQ6PTA7CgogICAvLyDQktGL0YfQuNGB0LvQtdC90LjQtSDQstGB0LXRhSDQvdC10L7QsdGF0L7QtNC40LzRi9GFINGB0YPQvNC8IAogICBmb3IgaTo9MSB0byBOIGRvIAogICBiZWdpbiAKICAgICBTeCArPSB4W2ldOyAKICAgICBTeSArPSB5W2ldOyAKICAgICBTeiArPSB6W2ldOyAKICAgICBTeDIgKz0geFtpXSp4W2ldOyAKICAgICBTeTIgKz0geVtpXSp5W2ldOyAKICAgICBTeHkgKz0geFtpXSp5W2ldOyAKICAgICBTeHogKz0geFtpXSp6W2ldOyAKICAgICBTeXogKz0geVtpXSp6W0ldOwoKICAgICBTeDMgKz0geFtJXSp4W0ldKnhbSV07IAogICAgIFN5MyArPSB5W0ldKnlbSV0qeVtJXTsgCgogICAgIFN4MnkgKz0geFtJXSp4W0ldKnlbSV07IAogICAgIFN4eTIgKz0geFtJXSp5W0ldKnlbSV07CgogICAgIFN4NCArPSB4W0ldKnhbSV0qeFtJXSp4W0ldOwogICBlbmQ7CgogICAvLyDQpNC+0YDQvNC40YDQvtCy0LDQvdC40LUg0YHQuNGB0YLQtdC80Ysg0YPRgNCw0LLQvdC10L3QuNC5ICAKICAgTWF0cml4WzFdWzFdOj1OIDsgICAgICAgTWF0cml4WzFdWzJdOj1TeCA7ICAgICAgIE1hdHJpeFsxXVszXTo9U3kgOyAgICAgICBNYXRyaXhbMV1bNF06PVN4MiA7ICAgICAgTWF0cml4WzFdWzVdOj1TeHkgOyAgICAgIE1hdHJpeFsxXVs2XTo9U3kyIDsgICAgICBNYXRyaXhbMV1bN106PVN6IDsKICAgTWF0cml4WzJdWzFdOj1TeCA7ICAgICAgTWF0cml4WzJdWzJdOj1TeDIgOyAgICAgIE1hdHJpeFsyXVszXTo9U3h5IDsgICAgIAlNYXRyaXhbMl1bNF06PVN4MyA7ICAgICAJTWF0cml4WzJdWzVdOj1TeDJ5IDsgICAgCU1hdHJpeFsyXVs2XTo9U3h5MiA7ICAgIAlNYXRyaXhbMl1bN106PVN4eiA7CiAgIE1hdHJpeFszXVsxXTo9U3kgOyAgICAgIE1hdHJpeFszXVsyXTo9U3h5IDsgICAgICBNYXRyaXhbM11bM106PVN5MiA7ICAgICAJTWF0cml4WzNdWzRdOj1TeHkyIDsgICAgCU1hdHJpeFszXVs1XTo9U3kzIDsgICAgIAlNYXRyaXhbM11bNl06PVN4eiA7ICAgICAgCU1hdHJpeFszXVs3XTo9U3l6IDsKCiAgIC8vINCg0LXRiNC10L3QuNC1INGB0LjRgdGC0LXQvNGLICAKICAgU29sdmVMaW5lYXJTeXN0ZW0oTWF0cml4LFNvbHV0aW9uKTsKCiAgIC8vINCf0YDQuNGB0LLQvtC10L3QuNC1INC60L7RjdGE0YTQuNGG0LjQtdC90YLQvtCyICAKICAgQTo9U29sdXRpb25bMV07ICAKICAgQjo9U29sdXRpb25bMl07ICAKICAgQzo9U29sdXRpb25bM107ICAKCiAgIC8vINCS0YvQstC+0LQg0YDQtdC30YPQu9GM0YLQsNGC0L7QsiDRgSDQsdC+0LvRjNGI0LXQuSDRgtC+0YfQvdC+0YHRgtGM0Y4gIAogICBXcml0ZWxuKCfQmtC+0Y3RhNGE0LjRhtC40LXQvdGC0Ysg0LrQstCw0LTRgNCw0YLQuNGH0L3QvtC5INC80L7QtNC10LvQuDonKTsgIAogICBXcml0ZWxuKCdBID0gJywgQTowOjYpOyAgCiAgIFdyaXRlbG4oJ0IgPSAnLCBCOjA6Nik7ICAKICAgV3JpdGVsbignQyA9ICcsIEM6MDo2KTsgIAoKZW5kLg==