C линейной регрессией, наверное, уже все разобрались и всё ясно...
Если уравнение регрессии включает и квадратичную зависимость от аргумента, например
, то коэффициенты a, b, c отыскиваются из условия
, которое выполняется приравниванием нулю частных производных суммы квадратов отклонений по коэффициентам нелинейной регрессии, то есть
,
,
.
B результате получится система линейных уравнений третьего порядка относительно коэффициентов, из решения которой они и находятся.
Далее я, как и
Pyotr, приведу программу только на Turbo Basic, которая и реализует решение конкретной задачи автора темы (комментарии в тексте программы минимальны), если нужны более подробные пояснения, я готов их предоставить (любознательных прошу обратить внимание на то, как расставлены полученные коэффициенты a, b, c в уравнении регрессии):
Код: Выбрать все
' Шесть пар значений аргумента и функции для установления нелинейной регрессии
data 6
data 100,100
data 120,116
data 140,130
data 160,146
data 180,164
data 200,180
' Чтение числа пар и резервирование памяти для двух одномерных массивов
read m : dim x(m),y(m)
' Цикл чтения данных, преобразование аргумента и вычисление сумм для составления системы линейных уравнений третьего порядка,
' из которой будут найдены значения коэффициентов нелинейной регрессии
sx=0 : sy=0 : sxr=0 : sx2=0 : sx3r=0 : sxy=0 : sxry=0
for i=1 to m
read x(i),y(i) : x(i)=x(i)-100
sx=sx+x(i) : sx2=sx2+x(i)*x(i) : sxr=sxr+sqr(x(i))
sx3r=sx3r+sqr(x(i)*x(i)*x(i)) : sxy=sxy+x(i)*y(i)
sy=sy+y(i) : sxry=sxry+sqr(x(i))*y(i)
next i
' Вывод сумм на экран
? sx,sy,sxr,sx2,sx3r,sxry,sxy
' Составление матрицы для решения системы уравнений относительно коэффициентов регрессии
n=3 : dim a#(n,n),b#(n),abc#(n)
a#(1,1)=m : a#(1,2)=sxr : a#(1,3)=sx : b#(1)=sy
a#(2,1)=sxr : a#(2,2)=sx : a#(2,3)=sx3r : b#(2)=sxry
a#(3,1)=sx : a#(3,2)=sx3r : a#(3,3)=sx2 : b#(3)=sxy
' Вывод матрицы на экран
for i=1 to n
for j=1 to n
? a#(i,j);
next j
? b#(i)
next i
' Решение системы линейных уравнений методом Гаусса
for i=1 to n-1
for j=i+1 to n
a#(j,i)=-a#(j,i)/a#(i,i)
for k=i+1 to n
a#(j,k)=a#(j,k)+a#(j,i)*a#(i,k)
next k
b#(j)=b#(j)+a#(j,i)*b#(i)
next j
next i
abc#(n)=b#(n)/a#(n,n) ' Получение последнего корня системы линейных уравнений (он не является последним коэффициентом уравнения регрессии!)
' Вычисление остальных корней системы линейных уравнений (в уравнение регрессии в качестве коэффициентов их нужно правильно расставить!)
for i=n-1 to 1 step -1
s#=b#(i)
for j=i+1 to n
s#=s#-abc#(j)*a#(i,j)
next j
abc#(i)=s#/a#(i,i)
next i
' Вывод на экран корней системы линейных уравнений
for i=1 to n
? "ABC(";i;")=";abc#(i)
next i
' Вывод аргумента, опытного и вычисленного значений функции (обратить внимание, как стоят корни системы в качестве коэффициентов уравнения регрессии!)
' Вычисление и вывод невязки
ss=0
for i=1 to m
? x(i),y(i),abc#(1)+abc#(3)*x(i)+abc#(2)*sqr(x(i))
ss=ss+(abc#(1)+abc#(3)*x(i)+abc#(2)*sqr(x(i))-y(i))^2
next i
? "SS=";ss
' Контрольный цикл для вычисления по заданным значениям аргумента значений функции регрессии
' Цикл аварийно прекращается при задании в качестве аргумента нулевого значения
'do
' input xx : ? abc#(1)+abc#(3)*(xx-100)+abc#(2)*sqr(xx-100)
'loop until (xx=0)
end
B результате прогона программы на экран выводятся результаты:
- суммы для составления системы линейных уравнений
300 836 37,4869 22000 2522,7246 5738,7314 47400
- матрица линейной системы
6 37,4869 300 2522,7246 5738,7314
37,4869 300 2522,7246 5738,7314
300 2522,7246 22000 47400
- корни системы линейных уравнений
a=100,2217085333389
b=0,850902321114453
c=-0,5495501250384637
- значения преобразованного аргумента (x-100), опытного (y) и вычисленного (y(x)) значений функции регрессии
0 100 100,2217
20 116 114,7821
40 130 130,7821
60 146 147,0191
80 164 163,3786
100 180 179,8164
- вычисленное значение невязки (то есть суммы квадратов отклонений точек от линии регрессии
SS=3,602535247802734
P.S. Прошу обратить внимание на отличия значений коэффициентов линии регрессии и суммы квадратов отклонений (невязка), которые получены у меня: делал дома по памяти и подставил 116 вместо 114 и 164 вместо 163...
Правильные значения коэффициентов и суммарного квадрата отклонений привёл
Pyotr.