[Из песочницы] Способы обработки данных физического эксперимента

Несмотря на то, что в большинстве учебных заведений России лабораторные работы проходят в старом формате (когда бедный студент, собирая данные с доисторического оборудования, замеряя период колебаний с помощью таймера вручную, мучительно пытается найти объяснение нереалистичности данных), некоторые университеты закупили датчики, платы и (главное) компьютеры для удобства работы студентов. Безусловно, хорошее оборудование повышает точность эксперимента. Тем не менее, ваш покорный слуга множество раз сталкивался с нытьем однокурсников: «Ну и чем нам эти датчики дались? Легче ручками графики рисовать и время замерять, чем мучится с программированием на компухтере.» Признаюсь — у меня также был подобный период адаптации, который, однако, довольно быстро прошел. Итак, делюсь своим опытом.

GNUplot


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

Как пользоваться


Пусть у нас есть файл с данными — один столбец со значениями измерений какого-то параметра. Назовем этот файл data.dat. Мы знаем, что данные представляют собой нормальное распределение, пускай это будет распределение масс партии шурупов. Наша задача заключается в определении среднего значения массы шурупа. Мое решение заключается в построении гистограммы по данным и дальнейшей ее аппроксимации кривой $f(x) = ae^\frac{{(x-c)}^2}{b}$. Ниже привожу пример кода такого построения:

bin_width=0.1
set boxwidth 0.9*bin_width absolute
bin_num(x)=floor(x/bin_width)
rounded(x)=bin_width*(bin_number(x)+0.5)
plot ‘data.dat’ using (rounded($1)):(1) smooth frequency with boxes
set table ‘table.dat’
replot #построение новой таблицы нужно, чтобы не покалечить аппроксимацией исходные данные
unset table
f(x)=a*exp(-(x-c)**2/b)
a=6#для точной аппроксимации необходимо "прикинуть" параметры сглаживающей кривой
b=0.01
c=2
fit f(x) ‘table.dat’ using 1:2 via a, b, c
plot f(x), ‘data.dat’ using (rounded($1)):(1) smooth frequency with boxes


При аппроксимации будут определены значения a, b и c с достаточно хорошей точностью. В нашей задаче нетрудно догадаться, что параметр c и есть среднее значение массы измеряемых объектов. Таким образом, с помощью простого кода и некоторых соображений можно быстро проанализировать собранные данные.

Мои выводы о работе с GNUplot


В случаях, когда нужна быстрая графическая обработка большого количества данных (большого в рамках лабораторной работы), GNUplot подходит идеально. Тем не менее, иногда появляются баги, о природе которых приходится подумать. Рекомендую использовать новичкам для каких-то базовых работ, например, статистических исследований.

LabVIEW


Этот монстр предназначен для настоящих лабников! Чисто визуальная платформа для моделирования лабораторной работы. Сама собирает данные с ComPortов, сама их обрабатывает, сама строит динамические графики. Возможностей — уйма. Большинство инженеров работают именно на Labview. НО! Требует больших усилий, чтобы разобраться.

image

Мои выводы о работе с LabVIEW


Точно не для новичков! Если есть желание, можно посидеть пару дней и разобраться, после этого значительно сократится время обработки лабораторных работ, в которых вы можете использовать микроконтроллеры с датчиками (в моем случае это были лабораторные со всевозможными маятниками).
image

Python


Этот язык является отличной находкой для физиков. Чаще всего я использую его для решений задач вычислительной физики, к примеру, численное решение дифференциальных уравнений. Так же, как и гнуплот, этот язык хорош для графической обработки данных, обладает меньшим количеством багов и простотой синтаксиса (хотя и на гнуплот не жалуюсь). Лично мне больше нравится Python, но каждому — свое.

В качестве примера работы с Python привожу интерполяцию по точкам многочленом Лагранжа, потому что под рукой не оказалось более наглядного примера анализа данных. Интерполяция обычно применяется для получения приближенной формулы зависимости двух величин.

import numpy as np
import matplotlib.pyplot as plt
def f(x, y, t):
    lag = 0
    for j in range(len(y)):
        n = 1
        dn = 1
        for i in range(len(x)): #Многочлен Лагранжа
            if i == j:#Чтобы знаменатель не обращался в ноль
                n = n * 1
                dn = dn * 1
            else:
                n = n * (t - x[i])
                dn = dn * (x[j] - x[i])
        lag = lag + y[j] * n / dn
    return lag
xk = np.linspace(-1, 1, 11)
yk = 1/(1+xk**2)
xnew = np.linspace(-1, 1, 200)
ynew = [f(xk, yk, i) for i in xnew]
plt.title(u'Интерполяция по точкам')
plt.xlabel(u'x')
plt.ylabel(u'y')
plt.plot(xk, yk, '.', xnew, ynew)
plt.grid()
plt.show()


Мои выводы о работе с Python


Для меня Python является приоритетным. Гораздо больше возможностей, чем в GNUplot, не требует больших усилий, чтобы разобраться. Безусловно, использование Labview значительно профессиональнее, но так как мне лень его освоение требует внушительного количества времени, я предпочитаю осваивать все прелести Python.

Вместо заключения


В этом небольшом обзоре я решила поделится своим опытом использования некоторых программ для обработки данных. Надеюсь, он поможет вам в вашей исследовательской деятельности.

Успехов!

© Habrahabr.ru