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: array [ 1 .. N ] of Double;
z: array [ 1 .. N ] of Double;
Sx, Sy, Sz, Sx2, Sy2, Sxy: 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 ;
// Вычисление всех необходимых сумм
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] ;
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 ] : = Sx* Sx ; Matrix[ 2 ] [ 5 ] : = Sxy ; Matrix[ 2 ] [ 6 ] : = Sy* Sx ; Matrix[ 2 ] [ 7 ] : = Sz ;
Matrix[ 3 ] [ 1 ] : = Sy ; Matrix[ 3 ] [ 2 ] : = Sxy ; Matrix[ 3 ] [ 3 ] : = Sy2 ; Matrix[ 3 ] [ 4 ] : = Sy* Sx ; Matrix[ 3 ] [ 5 ] : = Sy* Sy ; Matrix[ 3 ] [ 6 ] : = Sz ; Matrix[ 3 ] [ 7 ] : = Sz ;
// Решение системы
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+0YjQuNCx0LrQtSDQtNC10LvQtdC90LjRjyDQvdCwINC90L7Qu9GMLgogICAgZW5kOwogIGVuZDsKZW5kOwoKdmFyIAogICB4LCB5OiBhcnJheVsxLi5OXSBvZiBEb3VibGU7IAogICB6OiBhcnJheVsxLi5OXSBvZiBEb3VibGU7IAogICBTeCwgU3ksIFN6LCBTeDIsIFN5MiwgU3h5OiBEb3VibGU7IAogICBBLEIsQyxELEUsRjogRG91YmxlOyAKICAgTWF0cml4OiBUTWF0cml4OyAKICAgU29sdXRpb246IFRWZWN0b3I7IAogICBpOiBJbnRlZ2VyOwoKYmVnaW4gCiAgIC8vINCY0L3QuNGG0LjQsNC70LjQt9Cw0YbQuNGPINC00LDQvdC90YvRhSAo0L/RgNC40LzQtdGAINC30L3QsNGH0LXQvdC40LkpCiAgIGZvciBpIDo9IDEgdG8gTiBkbyAKICAgYmVnaW4gCiAgICAgeFtpXSA6PSAoaSAtIDEpIGRpdiA1OyAvLyDQn9GA0LjQvNC10YAg0LfQvdCw0YfQtdC90LjQuSDQtNC70Y8geCAoMC00KQogICAgIHlbaV0gOj0gKGkgLSAxKSBtb2QgNTsgLy8g0J/RgNC40LzQtdGAINC30L3QsNGH0LXQvdC40Lkg0LTQu9GPIHkgKDAtNCkKICAgICB6W2ldIDo9ICg1ICogeFtpXSp4W2ldKSArICg0ICogeVtpXSp5W2ldKSArICgzICogeFtpXSp5W2ldKSArICgyICogeFtpXSkgKyAoMSAqIHlbaV0pOyAvLyDQn9GA0LjQvNC10YAg0LfQvdCw0YfQtdC90LjQuSDQtNC70Y8geiDRgSDQt9Cw0LTQsNC90L3Ri9C80Lgg0LrQvtGN0YTRhNC40YbQuNC10L3RgtCw0LzQuCBBPTUgQj00IEM9MyBEPTIgRT0xIEY9MC4KICAgZW5kOwoKICAgLy8g0J7QsdC90YPQu9C10L3QuNC1INCy0YHQtdGFINGB0YPQvNC8IAogICBTeDo9MDsgU3k6PTA7IFN6Oj0wOyBTeDI6PTA7IFN5Mjo9MDsgU3h5Oj0wOwoKICAgLy8g0JLRi9GH0LjRgdC70LXQvdC40LUg0LLRgdC10YUg0L3QtdC+0LHRhdC+0LTQuNC80YvRhSDRgdGD0LzQvCAKICAgZm9yIGk6PTEgdG8gTiBkbyAKICAgYmVnaW4gCiAgICAgU3ggKz0geFtpXTsgCiAgICAgU3kgKz0geVtpXTsgCiAgICAgU3ogKz0geltpXTsgCiAgICAgU3gyICs9IHhbaV0qeFtpXTsgCiAgICAgU3kyICs9IHlbaV0qeVtpXTsgCiAgICAgU3h5ICs9IHhbaV0qeVtpXTsgCiAgIGVuZDsKCiAgIC8vINCk0L7RgNC80LjRgNC+0LLQsNC90LjQtSDRgdC40YHRgtC10LzRiyDRg9GA0LDQstC90LXQvdC40LkgIAogICBNYXRyaXhbMV1bMV06PU4gOyAgICAgICBNYXRyaXhbMV1bMl06PVN4IDsgICAgICAgTWF0cml4WzFdWzNdOj1TeSA7ICAgICAgIE1hdHJpeFsxXVs0XTo9U3gyIDsgICAgICBNYXRyaXhbMV1bNV06PVN4eSA7ICAgICAgTWF0cml4WzFdWzZdOj1TeTIgOyAgICAgIE1hdHJpeFsxXVs3XTo9U3ogOwogICBNYXRyaXhbMl1bMV06PVN4IDsgICAgICBNYXRyaXhbMl1bMl06PVN4MiA7ICAgICAgTWF0cml4WzJdWzNdOj1TeHkgOyAgICAgCU1hdHJpeFsyXVs0XTo9U3gqU3ggOyAgICAJTWF0cml4WzJdWzVdOj1TeHkgOyAgICAJTWF0cml4WzJdWzZdOj1TeSpTeCA7ICAgIAlNYXRyaXhbMl1bN106PVN6IDsKICAgTWF0cml4WzNdWzFdOj1TeSA7ICAgICAgTWF0cml4WzNdWzJdOj1TeHkgOyAgICAgIE1hdHJpeFszXVszXTo9U3kyIDsgICAgIAlNYXRyaXhbM11bNF06PVN5KlN4IDsgICAgCU1hdHJpeFszXVs1XTo9U3kqU3kgOyAgICAJTWF0cml4WzNdWzZdOj1TeiA7ICAgICAgCU1hdHJpeFszXVs3XTo9U3ogOwoKICAgLy8g0KDQtdGI0LXQvdC40LUg0YHQuNGB0YLQtdC80YsgIAogICBTb2x2ZUxpbmVhclN5c3RlbShNYXRyaXgsU29sdXRpb24pOwoKICAgLy8g0J/RgNC40YHQstC+0LXQvdC40LUg0LrQvtGN0YTRhNC40YbQuNC10L3RgtC+0LIgIAogICBBOj1Tb2x1dGlvblsxXTsgIAogICBCOj1Tb2x1dGlvblsyXTsgIAogICBDOj1Tb2x1dGlvblszXTsgIAogICBEOj1Tb2x1dGlvbls0XTsKICAgRTo9U29sdXRpb25bNV07CiAgIEY6PVNvbHV0aW9uWzZdOwoKICAgLy8g0JLRi9Cy0L7QtCDRgNC10LfRg9C70YzRgtCw0YLQvtCyINGBINCx0L7Qu9GM0YjQtdC5INGC0L7Rh9C90L7RgdGC0YzRjiAgCiAgIFdyaXRlbG4oJ9Ca0L7RjdGE0YTQuNGG0LjQtdC90YLRiyDQutCy0LDQtNGA0LDRgtC40YfQvdC+0Lkg0LzQvtC00LXQu9C4OicpOyAgCiAgIFdyaXRlbG4oJ0EgPSAnLCBBOjA6Nik7ICAKICAgV3JpdGVsbignQiA9ICcsIEI6MDo2KTsgIAogICBXcml0ZWxuKCdDID0gJywgQzowOjYpOyAgCiAgIFdyaXRlbG4oJ0QgPSAnLCBEOjA6Nik7ICAKICAgV3JpdGVsbignRSA9ICcsIEU6MDo2KTsgIAogICBXcml0ZWxuKCdGID0gJywgRjowOjYpOyAgCgplbmQu