Американские ученые автопрома в этом году собрали богатый материал по уровню эффективности ихних железных коней. Статистику провели на основе аж 1000 наблюдений! Была построена гистограмма: Х - пробег в милях при сжигании одного галлона бензина (середина интервала); Y - частота (то есть количество автомобилей, попавших в заданный интервал уровня эффективности X.
Вот эта гистограмма в виде таблицы:
__X____Y
1.5____ 4
4.5___ 24
7.5____57
10.5___98
13.5__138
16.5__164
19.5__167
22.5__144
25.5__103
28.5___60
31.5___27
34.5___10
37.5____3
40.5____1
Надо сказать, что гистограмма на удивление гладкая. Видимо, большой статистический ряд и точность инструментария чисто экспериментально выдали четкий закон распределения. Осталось только выяснить: какой же формулой эти данные аппроксимировать? Многие полагали, что распределение однозначно нормальное. Я с этим не согласился, вычислив основные характеристики:
MO = 18.321 - математическое ожидание;
SIGMA = 6.73134 - корень квадратный из дисперсии;
A = 0.0998045 - коэффициент асимметрии;
E = -0.306475 - коэффициент эксцесса.
Последние два показателя как раз выдают отличия от нормального распределения. Но они с точки зрения математики - далеко не нули. И еще одно: нормальное распределение имеет вид колокола, причем его левая ветвь заходит в отрицательную зону. Но задача физическая и значение X никак не может быть отрицательным. Поясню на простом примере: что такое нулевое значение X? Это когда машина сразу после зажигания не может сдвинуться ни на один миллиметр и весь галлон бензина сгорает на холостом ходу. Случай абсурдный, но такое в жизни иногда бывает. Итак, нулевой случай маловероятный, но возможный. Чего нельзя сказать про отрицательный случай. Это означает, что за руль села блондинка и по ошибке дала задний ход. Подобный ужас американцы вряд ли зафиксировали.
Короче, я пришел к выводу, что аппроксимирующая функция должна иметь действительные числа только в положительной зоне, при нулевом Х должна иметь строгий ноль и в отрицательной зоне должна совпадать с осью абсцисс (формуле достаточно выдавать комплексные числа). Правая часть асимтотически приближается к той же оси абсцисс. Сказанное я в дальнейшем поясню на графике. Сейчас же расскажу про мои теоретические исследования.
Главное, что я решил - аппроксимировать не функцию плотности вероятности
f , а ее интегральное представление, то есть функцию распределения
F. Объяснение простое: интеграл не всегда берется в элементарных функциях (часто даже - ни в каких не берется), зато производную можно всегда найти. Рассмотрев более 2 тысяч самых различных формул, удалось выбрать четыре, удовлетворяющие граничным условиям:
Составил быстро программу на языке
Yabasic и рассчитал методом Монте-Карло оптимальные параметры для каждой из четырех формул. Результаты свел в таблицу:
Третья формула оказалась наиболее предпочтительней, поскольку сумма квадратов отклонений от 14 натурных точек составила величину почти 0,0000007. Приведу именно для этой формулы программу расчета:
open #1,"x-f.txt","r"
open #2,"avto-3.txt","w"
z=.01:s1=10^100:nn=9000000
dim x0(100),f0(100),f(100),x(100),FF(100),y(100)
input #1 n
print "NUMBER OF INTERVALS = ";:print n
print #2, "NUMBER OF INTERVALS = ";:print #2, n
for i=1 to n
input #1 x0(i),f0(i)
print x0(i),f0(i)
print #2, x0(i),f0(i)
s0=s0+f0(i)
FF(i)=s0
next i
print "TOTAL N = ";:print s0
print #2, "TOTAL N = ";:print #2, s0
print
del=x0(3)-x0(2)
for i=1 to n
x(i)=x0(i)+del/2
FF(i)=FF(i)/(FF(n)+0)
f(i)=(FF(i)-FF(i-1))/del
print x0(i),f(i);:print " ";:print x(i),FF(i)
print #2, x0(i),f(i);:print #2, " ";:print #2, x(i),FF(i)
next i
print
print #2
for i=1 to n
smo=smo+x0(i)*f(i)
sf=sf+f(i)
next i
mo=smo/sf
print "MO = ";:print mo
print #2, "MO = ";:print #2, mo
for i=1 to n
m2=m2+(x0(i)-mo)^2*f(i)/sf
m3=m3+(x0(i)-mo)^3*f(i)/sf
m4=m4+(x0(i)-mo)^4*f(i)/sf
next i
sigm=sqrt(m2)
A=m3/sigm^3
E=m4/sigm^4-3
print "SIGMA = ";:print sigm
print "A = ";:print A
print "E = ";:print E
print
print #2, "SIGMA = ";:print #2, sigm
print #2, "A = ";:print #2, A
print #2, "E = ";:print #2, E
print #2
a0=1:b0=1:c0=1:d0=1
for j=1 to nn
a=a0*(1+z*(ran()-.5))
b=b0*(1+z*(ran()-.5))
c=c0*(1+z*(ran()-.5))
d=d0*(1+z*(ran()-.5))
s=0
for i=1 to n
x=x(i)
y(i)=(1-(a*x^b+1)^(-c))^d
s=s+(y(i)-FF(i))^2
next i
if s<=s1 then
print a,b,c,d,s
s1=s
a0=a:b0=b:c0=c:d0=d
ak=a:bk=b:ck=c:dk=d:sk=s
fi
next j
print "FORMULA 3";:print " ";
print ak,bk,ck,dk,sk
print #2, "FORMULA 3";:print #2, " ";
print #2, ak,bk,ck,dk,sk
При этом файл данных с именем "x-f.txt" следующий:
14
1.5 4
4.5 24
7.5 57
10.5 98
13.5 138
16.5 164
19.5 167
22.5 144
25.5 103
28.5 60
31.5 27
34.5 10
37.5 3
40.5 1
Сопоставление точек и кривой:
Ну, производная этой функции:
Как видим, совпадения впечатляют.
Мы все в океан попадем бесконечного будущего, но прошлого миг повторить никому не дано.