Нахождение приближающей функции
в виде других элементарных функций
1. Степенная функция: y=a xm
Прологарифмируем: ln y = ln a + m ln x
Замена: m = A, ln a = B ln y = v ln x = u
Получим функцию v = A u + B
2. Показательная функция: y=a emx Прологарифмируем: ln y = ln a + m x
Замена: | m = A, | ln a = B | ln y = v | x = u | ||||
Получим функцию | v = A u + B | |||||||
3. Дробно-линейная функция: | ||||||||
y = | ||||||||
ax + b | ||||||||
Откуда | = ax + b | |||||||
y |
Замена: a = A, b = B
= v | x = u | ||
y | |||
Получим функцию v = A u + B
4. Логарифмическая функция: y=a ln x + b
Замена: a = A, b = B y = v
Получим функцию v = A u + B
5. Гипербола: y = ax + b
Замена: | a = A, | b = B | y = v | |||||||||||
Получим функцию | v = A u + B | |||||||||||||
6. Дробно-рациональная функция: | y = | x | ||||||||||||
ax + b | ||||||||||||||
Откуда: | = | ax + b | ; | = a + | b | |||||||||
y | y | x | ||||||||||||
x | ||||||||||||||
Замена: | a = B, | b = A | = v | |||||||||||
y | ||||||||||||||
Получим функцию | v = A u + B |
ln x = u
1x = u
1x = u
Программа нахождения уравнения регрессии методом наименьших квадратов:
program lin_regr; { *** Уравнение регрессии *** }
const p=30;
var x,y,u,v: array [1..p] of real;
i,j,n,k,m: byte;
d,a,b,s,s1,s2,s3,s4: real;
begin
Write('Введите N - число пар таблицы - ');Readln(N); Writeln('Введите попарно координаты точки X Y - ');
For i:=1 to n do readln(x[i],y[i]);
Repeat
Writeln('Выберите вид уравнения регрессии,'); Writeln(' параметры которого хотите рассчитать');
Writeln('1) y = A * x + B 2) y = A * x^M 3) y = A * exp(M * x)');
Writeln('Введите номер выбранного варианта - '); Readln(k);
s1:=0; s2:=0; s3:=0; s4:=0;
For i:=1 to n do
begin
case k of
1: begin U[i]:=X[i]; V[i]:=Y[i] end;
2: begin U[i]:=ln(X[i]); V[i]:=ln(Y[i]) end;
3: begin U[i]:=X[i]; V[i]:=ln(Y[i]) end;
end;
s1:=s1+U[i]; s2:=s2+v[i];
s3:=s3+U[i]*V[i]; s4:=s4+U[i]*U[i]
end;
D:=N*s4-sqr(s1);
A:=(N*s3-s1*s2)/d; B:=(s4*s2-s1*s3)/d;
s:=0;
Writeln(' Y[i] V[i] (Y[i]-V[i])^2 S');
For i:=1 to n do
begin V[i]:=A*U[i]+B;
if (k=2) or (k=3) then V[i]:=exp(V[i]);
s:=s+sqr(Y[i]-V[i]) ;
writeln(y[i]:10:6,V[i]:15:6,sqr(y[i]-v[i]):15:6,' s=',s:10:6)
end;
Writeln('Уравнение линии регрессии');
case k of
1: Writeln('y = ',A:10:6,' * x + ',B:10:6);
2: Writeln('y = ', exp(B):10:6,'* x^',A:10:6);
3: Writeln('y= ', exp(B):10:6, '*exp(',A:10:6,'*X)');
end;
Writeln('Если хотите использовать другой вид уравнения регрессии,'); Write('введите 1 , иначе 0 - '); Readln(m); Until m=0;
end.
{ Для нелинейных уравнений вводят линеаризацию следующим образом:
1) для степенной функции y=axm: ln(y)=ln(a)+m•ln(x);
ln(y)=Y, m=A, ln(a)=B, ln(x)=X.
Получаем Y=AX+B.
2) для показательной функции y=a•emx, a>0: ln(y)=ln(a)+mx;
ln(y)=Y, ln(a)=B, m=A.
Получаем Y=Ax+B.
3) для дробно-линейной функции y=1/(ax+b): перепишем ур.: 1/y=ax+b;
1/y=Y.
Получаем Y=ax+b.
4) для логарифмической функции y=a•ln(x)+b: ln(x)=X.
Получаем y=aX+b.
5) для гиперболической функции y=(a/x)+b: 1/x=X.
Получаем y=aX+b.
6) для дробно-линейной функции y=x/(ax+b): перепишем ур.: 1/y=a+(b/x);
1/y=Y, a=B, 1/x=X, b=A.
Получаем Y=AX+B.
Для заданного набора данных (xi, yi) рассматривают несколько зависимостей и
выбирают такую, где функционал F меньше остальных.
Далее МНК применяем также как и к линейной функции:
Покажем как найти min F=∑i=1n(φ(xi)–yi)2; для лин. функ.: φ(x)=ax+b – лин. функ.
Задача, найти a и b так, чтобы F(a, b) достигала min.
F(a, b)–функ.двух переменных,необходимое условие экстремума(в данном случаеmin)–равенство0частных производных.
Составим: F(a, b)=
∑i=1n(yi–(axi+b))2;
Условие минимума: ∂F/∂a=0 и ∂F/∂b=0;
Сист. двух ур. с двумя неизвестными a и b (такая система наз. нормальной) (метод наименьших квадратов МНК).
∂F/∂a=–2∑i=1n(yi–(axi+b))xi;
∂F/∂b=–2∑i=1n(yi–(axi+b));
таким образом сист. норм. ур. запишется в виде:
{∑i=1n(yi–axi–b)xi=0;
|∑i=1n(yi–axi–b)=0;
{∑i=1nyixi–a∑i=1nxi2–b∑i=1nxi=0;
|∑i=1nyi–a∑i=1nxi–nb=0;
Введём обозначение:
Mx=(1/n)∑i=1nxi;
My=(1/n)∑i=1nyi;
Mxy=(1/n)∑i=1nyixi;
Mx2=(1/n)∑i=1nxi2;
Система запишется:
{aMx2+bMx=Mxy;
|aMx+b=My;
a=(Mxy–MxMy)/(Mx2–(Mx)2);
b=(Mx2My–MxMxy)/(Mx2–(Mx)2);}