Обработка результатов эксперимента в Octave


Один довольно авторитетный профессор (правда, естественных наук, а не математических) как-то задал мне простой, но очень насущный вопрос:

Есть результаты измерений величины x: x1, x2, ... , xn. Как определить, какое-же всё-таки значение (или интервал значений) из них истинны?

Независимо от физического смысла измеренной величины, на этот вопрос отвечает математика, а если точнее - мат. статистика. Ответ на этот вопрос называется "обработка результатов эксперимента" (разумеется, при этом важно помнить, что истина - это модель).

Ниже приведены все стадии ответа на этот вопрос, необходимые вычисления и код, реализующий их в среде Octave.

Ряд значений величины x называется выборкой. Имея такую выборку, окончательный результат измерений для этой величины можно записать как x = ( ± Δx),где - оценочное значение результата измерений, а Δx - ошибка измерений. Так как эти данные не являются точными, запись результата измерений сопровождают указанием его надежности (или, иначе, доверительной вероятностью) P. Эту вероятность обычно выбирают равной 0,95.

В большинстве случаев случайные ошибки подчиняются нормальному закону распределения. А поскольку кривая нормального закона распределена симметрично относительно оси ординат, можно утверждать, что равные по величине, но противоположные по знаку ошибки равновероятны. А это дает возможность в качестве оценочного значения взять среднее арифметическое:

Как это получить в Octave:

  1. Создаём текстовый файл со значениями нашей выборки. Каждое значение - с новой строки. Например, вот так:

 498
 484
 498
 501
 496
 488
 498
 501

  1. Создаём .m - файл, в котором пишем код для загрузки и вычисления среднего арифметического:

L = dlmread("файл_с_выборкой.txt");
disp("L = ");
disp(L);

sample_count = rows(L);

mean_x = sum(L)/sample_count;
disp("Mean X: ");
disp(mean_x);

  1. Запускаем наш .m - файл.

Для вычисления ошибки измерений воспользуемся формулой Δx = S · t , где S - среднеквадратичная ошибка, а t - коэффициент Стьюдента.

Среднеквадратическую ошибку вычислим так:

Коэффициент Стьюдента зависит от доверительной вероятности и объёма выборки. При вероятности = 0,95 будем иметь таблицу из 2-х столбцов, где первый столбец - объём выборки, а второй - коэффициент; значения перечислены через запятую Сохраним её в файл student.txt:

2,    12.706       
3,    4.303   
4,    3.182   
5,    2.776   
6,    2.571   
7,    2.447   
8,    2.365   
9,    2.306   
10,    2.262   
11,    2.228   
12,    2.201   
13,    2.179   
14,    2.160   
15,    2.145   
16,    2.131   
17,    2.120   
18,    2.110   
19,    2.101   
20,    2.093   
21,    2.086   
22,    2.080   
23,    2.074   
24,    2.069   
25,    2.064   
26,    2.060   
27,    2.056   
28,    2.052   
29,    2.048   
30,    2.045   
31,    2.042   
40,    2.021   
60,    2.000   
120,    1.980   
999999,    1.960

Окончательно, добавим в наш .m - файл следующие строки, и получим оценочное значение и его ошибку с доверительной вероятностью 0,95:

sqrd_x = 0;
for i = 1:sample_count
  sqrd_x += (L(i) - mean_x)^2;
endfor
sqrd_x = sqrt(sqrd_x / (sample_count * (sample_count - 1)));

S = dlmread("student.txt");
for i = 1:rows(S)
  if (sample_count <= S(i, 1))
    delta_x = S(i, 2) * sqrd_x;
    disp("Delta X: ");
    disp(delta_x);
    break;
  endif
endfor

Собственно, всё. По выполнении на экране увидим нужные нам значения. Для приведённой выборки это будут:

(Mean X) = 495.50

Δx (Delta X) = 5.17

11 декабря 2011 03:25 — Георгий Чурочкин