Pull to refresh

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

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

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.

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


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

Успехов!
Tags:
Hubs:
Total votes 25: ↑21 and ↓4+17
Comments34

Articles