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, D, E, F: 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 ; // Пример значений для y (0-4)
z[ i] : = ( 5 * x[ i] * x[ i] ) + ( 4 * y[ i] * y[ i] ) + ( 3 * x[ i] * y[ i] ) + ( 2 * x[ i] ) + ( 1 * y[ i] ) ; // Пример значений для z с заданными коэффициентами A=5 B=4 C=3 D=2 E=1 F=0.
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 ] ;
D: = Solution[ 4 ] ;
E: = Solution[ 5 ] ;
F: = Solution[ 6 ] ;
// Вывод результатов с большей точностью
Writeln ( 'Коэффициенты квадратичной модели:' ) ;
Writeln ( 'A = ' , A: 0 : 6 ) ;
Writeln ( 'B = ' , B: 0 : 6 ) ;
Writeln ( 'C = ' , C: 0 : 6 ) ;
Writeln ( 'D = ' , D: 0 : 6 ) ;
Writeln ( 'E = ' , E: 0 : 6 ) ;
Writeln ( 'F = ' , F: 0 : 6 ) ;
end .
cHJvZ3JhbSBRdWFkcmF0aWNGaXQ7Cgp1c2VzCiAgU3lzVXRpbHM7Cgpjb25zdAogIE4gPSAyNTsgLy8g0JrQvtC70LjRh9C10YHRgtCy0L4g0YLQvtGH0LXQuiDQtNCw0L3QvdGL0YUKCnR5cGUKICBUTWF0cml4ID0gYXJyYXlbMS4uNiwgMS4uN10gb2YgRG91YmxlOwogIFRWZWN0b3IgPSBhcnJheVsxLi42XSBvZiBEb3VibGU7Cgpwcm9jZWR1cmUgU29sdmVMaW5lYXJTeXN0ZW0odmFyIE1hdHJpeDogVE1hdHJpeDsgdmFyIFNvbHV0aW9uOiBUVmVjdG9yKTsKdmFyCiAgaSwgaiwgaywgbTogSW50ZWdlcjsKICBUZW1wOiBEb3VibGU7CmJlZ2luCiAgLy8g0JzQtdGC0L7QtCDQk9Cw0YPRgdGB0LAg0YEg0LLRi9Cx0L7RgNC+0Lwg0LPQu9Cw0LLQvdC+0LPQviDRjdC70LXQvNC10L3RgtCwCiAgZm9yIGsgOj0gMSB0byA2IGRvCiAgYmVnaW4KICAgIC8vINCS0YvQsdC+0YAg0LPQu9Cw0LLQvdC+0LPQviDRjdC70LXQvNC10L3RgtCwCiAgICBtIDo9IGs7CiAgICBmb3IgaSA6PSBrICsgMSB0byA2IGRvCiAgICAgIGlmIEFicyhNYXRyaXhbaSxrXSkgPiBBYnMoTWF0cml4W20sa10pIHRoZW4KICAgICAgICBtIDo9IGk7CgogICAgLy8g0J/QtdGA0LXRgdGC0LDQvdC+0LLQutCwINGB0YLRgNC+0LoKICAgIGlmIG0gPD4gayB0aGVuCiAgICAgIGZvciBqIDo9IGsgdG8gNyBkbwogICAgICBiZWdpbgogICAgICAgIFRlbXAgOj0gTWF0cml4W2ssal07CiAgICAgICAgTWF0cml4W2ssal0gOj0gTWF0cml4W20sal07CiAgICAgICAgTWF0cml4W20sal0gOj0gVGVtcDsKICAgICAgZW5kOwoKICAgIC8vINCY0YHQutC70Y7Rh9C10L3QuNC1INC/0LXRgNC10LzQtdC90L3QvtC5CiAgICBmb3IgaSA6PSBrICsgMSB0byA2IGRvCiAgICBiZWdpbgogICAgICBpZiBNYXRyaXhbayxrXSA8PiAwIHRoZW4gLy8g0J/RgNC+0LLQtdGA0LrQsCDQvdCwINC00LXQu9C10L3QuNC1INC90LAg0L3QvtC70YwKICAgICAgYmVnaW4KICAgICAgICBUZW1wIDo9IE1hdHJpeFtpLGtdIC8gTWF0cml4W2ssa107CiAgICAgICAgZm9yIGogOj0gayB0byA3IGRvCiAgICAgICAgICBNYXRyaXhbaSxqXSA6PSBNYXRyaXhbaSxqXSAtIFRlbXAgKiBNYXRyaXhbayxqXTsKICAgICAgZW5kIGVsc2UgCiAgICAgIGJlZ2luCiAgICAgICAgV3JpdGVsbign0J7RiNC40LHQutCwOiDQlNC10LvQtdC90LjQtSDQvdCwINC90L7Qu9GMINC/0YDQuCDQuNGB0LrQu9GO0YfQtdC90LjQuCDQv9C10YDQtdC80LXQvdC90L7QuS4nKTsKICAgICAgICBFeGl0OyAvLyDQl9Cw0LLQtdGA0YjQtdC90LjQtSDQv9GA0L7Qs9GA0LDQvNC80Ysg0L/RgNC4INC+0YjQuNCx0LrQtSDQtNC10LvQtdC90LjRjyDQvdCwINC90L7Qu9GMLgogICAgICBlbmQ7CiAgICBlbmQ7CiAgZW5kOwoKICAvLyDQntCx0YDQsNGC0L3Ri9C5INGF0L7QtAogIGZvciBpIDo9IDYgZG93bnRvIDEgZG8KICBiZWdpbgogICAgU29sdXRpb25baV0gOj0gTWF0cml4W2ksN107CiAgICBmb3IgaiA6PSBpICsgMSB0byA2IGRvCiAgICAgIFNvbHV0aW9uW2ldIDo9IFNvbHV0aW9uW2ldIC0gTWF0cml4W2ksal0gKiBTb2x1dGlvbltqXTsKICAgIAogICAgaWYgTWF0cml4W2ksaV0gPD4gMCB0aGVuIC8vINCf0YDQvtCy0LXRgNC60LAg0L3QsCDQtNC10LvQtdC90LjQtSDQvdCwINC90L7Qu9GMINC/0YDQuCDQvtCx0YDQsNGC0L3QvtC8INGF0L7QtNC1LgogICAgICBTb2x1dGlvbltpXSA6PSBTb2x1dGlvbltpXSAvIE1hdHJpeFtpLGldCiAgICBlbHNlIAogICAgYmVnaW4KICAgICAgV3JpdGVsbign0J7RiNC40LHQutCwOiDQlNC10LvQtdC90LjQtSDQvdCwINC90L7Qu9GMINC/0YDQuCDQvtCx0YDQsNGC0L3QvtC8INGF0L7QtNC1LicpOwogICAgICBFeGl0OyAvLyDQl9Cw0LLQtdGA0YjQtdC90LjQtSDQv9GA0L7Qs9GA0LDQvNC80Ysg0L/RgNC4INC+0YjQuNCx0LrQtSDQtNC10LvQtdC90LjRjyDQvdCwINC90L7Qu9GMLgogICAgZW5kOwogIGVuZDsKZW5kOwoKdmFyIAogICB4LCB5LCB6OiBhcnJheVsxLi5OXSBvZiBEb3VibGU7IAogICBTeCwgU3ksIFN6LCBTeDIsIFN5MiwgU3h5LCBTeHosIFN5ejogRG91YmxlOyAKICAgU3gzLCBTeTMsIFN4MnksIFN4eTIsIFN4NDogRG91YmxlOyAKICAgQSxCLEMsRCxFLEY6IERvdWJsZTsgCiAgIE1hdHJpeDogVE1hdHJpeDsgCiAgIFNvbHV0aW9uOiBUVmVjdG9yOyAKICAgaTogSW50ZWdlcjsKCmJlZ2luIAogICAvLyDQmNC90LjRhtC40LDQu9C40LfQsNGG0LjRjyDQtNCw0L3QvdGL0YUgKNC/0YDQuNC80LXRgCDQt9C90LDRh9C10L3QuNC5KQogICBmb3IgaSA6PSAxIHRvIE4gZG8gCiAgIGJlZ2luIAogICAgIHhbaV0gOj0gKGkgLSAxKSBkaXYgNTsgLy8g0J/RgNC40LzQtdGAINC30L3QsNGH0LXQvdC40Lkg0LTQu9GPIHggKDAtNCkKICAgICB5W2ldIDo9IChpIC0gMSkgbW9kIDU7IC8vINCf0YDQuNC80LXRgCDQt9C90LDRh9C10L3QuNC5INC00LvRjyB5ICgwLTQpCiAgICAgeltpXSA6PSAoNSAqIHhbaV0qeFtpXSkgKyAoNCAqIHlbaV0qeVtpXSkgKyAoMyAqIHhbaV0qeVtpXSkgKyAoMiAqIHhbaV0pICsgKDEgKiB5W2ldKTsgLy8g0J/RgNC40LzQtdGAINC30L3QsNGH0LXQvdC40Lkg0LTQu9GPIHog0YEg0LfQsNC00LDQvdC90YvQvNC4INC60L7RjdGE0YTQuNGG0LjQtdC90YLQsNC80LggQT01IEI9NCBDPTMgRD0yIEU9MSBGPTAuCiAgIGVuZDsKCiAgIC8vINCe0LHQvdGD0LvQtdC90LjQtSDQstGB0LXRhSDRgdGD0LzQvCAKICAgU3g6PTA7IFN5Oj0wOyBTejo9MDsgU3gyOj0wOyBTeTI6PTA7IFN4eTo9MDsgU3h6Oj0wOyBTeXo6PTA7CiAgIFN4Mzo9MDsgU3kzOj0wOyBTeDJ5Oj0wOyBTeHkyOj0wOyBTeDQ6PTA7CgogICAvLyDQktGL0YfQuNGB0LvQtdC90LjQtSDQstGB0LXRhSDQvdC10L7QsdGF0L7QtNC40LzRi9GFINGB0YPQvNC8IAogICBmb3IgaTo9MSB0byBOIGRvIAogICBiZWdpbiAKICAgICBTeCArPSB4W2ldOyAKICAgICBTeSArPSB5W2ldOyAKICAgICBTeiArPSB6W2ldOyAKICAgICBTeDIgKz0geFtpXSp4W2ldOyAKICAgICBTeTIgKz0geVtpXSp5W2ldOyAKICAgICBTeHkgKz0geFtpXSp5W2ldOyAKICAgICBTeHogKz0geFtpXSp6W2ldOyAKICAgICBTeXogKz0geVtpXSp6W0ldOwoKICAgICBTeDMgKz0geFtJXSp4W0ldKnhbSV07IAogICAgIFN5MyArPSB5W0ldKnlbSV0qeVtJXTsgCgogICAgIFN4MnkgKz0geFtJXSp4W0ldKnlbSV07IAogICAgIFN4eTIgKz0geFtJXSp5W0ldKnlbSV07CgogICAgIFN4NCArPSB4W0ldKnhbSV0qeFtJXSp4W0ldOwogICBlbmQ7CgogICAvLyDQpNC+0YDQvNC40YDQvtCy0LDQvdC40LUg0YHQuNGB0YLQtdC80Ysg0YPRgNCw0LLQvdC10L3QuNC5ICAKICAgTWF0cml4WzFdWzFdOj1OIDsgICAgICAgTWF0cml4WzFdWzJdOj1TeCA7ICAgICAgIE1hdHJpeFsxXVszXTo9U3kgOyAgICAgICBNYXRyaXhbMV1bNF06PVN4MiA7ICAgICAgTWF0cml4WzFdWzVdOj1TeHkgOyAgICAgIE1hdHJpeFsxXVs2XTo9U3kyIDsgICAgICBNYXRyaXhbMV1bN106PVN6IDsKICAgTWF0cml4WzJdWzFdOj1TeCA7ICAgICAgTWF0cml4WzJdWzJdOj1TeDIgOyAgICAgIE1hdHJpeFsyXVszXTo9U3h5IDsgICAgIAlNYXRyaXhbMl1bNF06PVN4MyA7ICAgICAJTWF0cml4WzJdWzVdOj1TeDJ5IDsgICAgCU1hdHJpeFsyXVs2XTo9U3h5MiA7ICAgIAlNYXRyaXhbMl1bN106PVN4eiA7CiAgIE1hdHJpeFszXVsxXTo9U3kgOyAgICAgIE1hdHJpeFszXVsyXTo9U3h5IDsgICAgICBNYXRyaXhbM11bM106PVN5MiA7ICAgICAJTWF0cml4WzNdWzRdOj1TeHkyIDsgICAgCU1hdHJpeFszXVs1XTo9U3kzIDsgICAgIAlNYXRyaXhbM11bNl06PVN4eiA7ICAgICAgCU1hdHJpeFszXVs3XTo9U3l6IDsKCiAgIC8vINCg0LXRiNC10L3QuNC1INGB0LjRgdGC0LXQvNGLICAKICAgU29sdmVMaW5lYXJTeXN0ZW0oTWF0cml4LFNvbHV0aW9uKTsKCiAgIC8vINCf0YDQuNGB0LLQvtC10L3QuNC1INC60L7RjdGE0YTQuNGG0LjQtdC90YLQvtCyICAKICAgQTo9U29sdXRpb25bMV07ICAKICAgQjo9U29sdXRpb25bMl07ICAKICAgQzo9U29sdXRpb25bM107ICAKICAgRDo9U29sdXRpb25bNF07CiAgIEU6PVNvbHV0aW9uWzVdOwogICBGOj1Tb2x1dGlvbls2XTsKCiAgIC8vINCS0YvQstC+0LQg0YDQtdC30YPQu9GM0YLQsNGC0L7QsiDRgSDQsdC+0LvRjNGI0LXQuSDRgtC+0YfQvdC+0YHRgtGM0Y4gIAogICBXcml0ZWxuKCfQmtC+0Y3RhNGE0LjRhtC40LXQvdGC0Ysg0LrQstCw0LTRgNCw0YLQuNGH0L3QvtC5INC80L7QtNC10LvQuDonKTsgIAogICBXcml0ZWxuKCdBID0gJywgQTowOjYpOyAgCiAgIFdyaXRlbG4oJ0IgPSAnLCBCOjA6Nik7ICAKICAgV3JpdGVsbignQyA9ICcsIEM6MDo2KTsgIAogICBXcml0ZWxuKCdEID0gJywgRDowOjYpOyAgCiAgIFdyaXRlbG4oJ0UgPSAnLCBFOjA6Nik7ICAKICAgV3JpdGVsbignRiA9ICcsIEY6MDo2KTsgIAoKZW5kLg==