物理実験からのデータを処理する方法

ロシアのほとんどの教育機関では、研究室での作業が古い形式で行われているにもかかわらず(貧しい学生が先史時代の機器からデータを収集し、タイマーで発振周期を手動で測定し、非現実的なデータの説明を苦労して見つけようとすると)、一部の大学はセンサー、ボード、 (最も重要な)学生の便宜のためのコンピューター。 もちろん、優れた機器は実験の精度を向上させます。 それでも、謙虚な僕はクラスメートのしつこさに何度も出くわしました。 コンピューターでのプログラミングに苦しむよりも、ペンでペンを使ってグラフィックを描く方が簡単です。」 だから、私は私の経験を共有しています。

画像



GNUplot



おそらく、これは最初に私たちに見せることができる最も単純なものです(おそらく、WordまたはExcelの例外を除きます)。 gluplotを使用したデータ処理は非常に簡単で、プログラミングの特別な知識を必要とせず、言語はアルゴリズムに近いです。 グラフィカルデータ処理の作業を開始するのに最適です。



使い方



データを含むファイルがあるとします-あるパラメーターの測定値を含む1つの列。 このファイルをdata.datと呼びます。 データが正規分布であることを知っています。それはねじのバッチの質量分布です。 私たちのタスクは、ネジの質量の平均値を決定することです。 私の解決策は、データからヒストグラムをプロットし、それを曲線で近似することです fx=ae fracxc2b 。 以下は、そのような構造のコードの例です。



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(-(xc)**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は理想的です。 それにもかかわらず、バグが発生する場合があり、その性質を考慮する必要があります。 統計調査などの基本的な作業の初心者には、このツールを使用することをお勧めします。



ラブビュー



このモンスターは、実際のラボ所有者向けに設計されています! 実験室の仕事をシミュレートするための純粋に視覚的なプラットフォーム。 それ自体がComPortsからデータを収集して処理し、動的なグラフを作成します。 機会-たくさん。 ほとんどのエンジニアは、Labview専用に働いています。 しかし! それを理解するには多くの努力が必要です。



画像



LabVIEWでの作業に関する私の結論



間違いなく初心者向けではありません! 必要に応じて、数日座ってそれを把握することができます。その後、センサー付きマイクロコントローラーを使用できる実験室作業の処理時間(私の場合はあらゆる種類の振り子を備えた実験室でした)が大幅に短縮されます。

画像



Python



この言語は物理学者にとって素晴らしい発見です。 ほとんどの場合、微分方程式の数値解法など、計算物理学の問題を解決するために使用します。 guplotと同様に、この言語はグラフィカルデータ処理に適していますが、バグが少なく、構文が単純です(guplotについて文句は言いませんが)。 個人的には、私はPythonが好きですが、それぞれが独自のものを持っています。



Pythonでの作業の例として、データ分析の明白な例が手元にないため 、ラグランジュ多項式による点補間を示します。 補間は通常、2つの量の依存関係の近似式を取得するために使用されます。



 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の魅力をすべて学ぶことを好みます。



結論の代わりに



この短いレビューでは、データ処理ソフトウェアを使用した経験を共有することにしました。 彼があなたの研究活動を手助けしてくれることを願っています。



頑張って!



All Articles