Обработка результатов эксперимента в Octave
Описание и пример программы обработки результатов эксперимента в среде Octave.
Один довольно авторитетный профессор (правда, естественных наук, а не математических) как-то задал мне простой, но очень насущный вопрос:
Есть результаты измерений величины x: x1, x2, ... , xn. Как определить, какое-же всё-таки значение (или интервал значений) из них истинны?
Независимо от физического смысла измеренной величины, на этот вопрос отвечает математика, а если точнее – мат. статистика. Ответ на этот вопрос называется «обработка результатов эксперимента» (разумеется, при этом важно помнить, что, согласно Нилу Гершенфельду, истина – это модель).
Ниже приведены все стадии ответа на этот вопрос, необходимые вычисления и код, реализующий их в среде Octave.
Ряд значений величины x называется выборкой. Имея такую выборку, окончательный результат измерений для этой величины можно записать как x = x̄ ± Δx, где x̄ – оценочное значение результата измерений, а Δx – ошибка измерений. Так как эти данные не являются точными, запись результата измерений сопровождают указанием его надежности (или, иначе, доверительной вероятностью) P. Эту вероятность обычно выбирают равной 0,95.
В большинстве случаев случайные ошибки подчиняются нормальному закону распределения. А поскольку кривая нормального закона распределена симметрично относительно оси ординат, можно утверждать, что равные по величине, но противоположные по знаку ошибки равновероятны.
А это дает возможность в качестве оценочного значения взять среднее арифметическое.
Как это получить в Octave:
- Создаём текстовый файл со значениями нашей выборки. Каждое значение – с новой строки. Например, вот так:
498
484
498
501
496
488
498
501
- Создаём .m – файл, в котором пишем код для загрузки и вычисления среднего арифметического:
L = dlmread("<em>файл_с_выборкой</em>.txt");
disp("L = ");
disp(L);
sample_count = rows(L);
mean_x = sum(L)/sample_count;
disp("Mean X: ");
disp(mean_x);
- Запускаем наш .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
Собственно, всё. По выполнении на экране увидим нужные нам значения. Для приведённой выборки это будут:
- x̄ (Mean X) = 495.50
- Δx (Delta X) = 5.17