D:/git/sphinx/tkProg/source/regression/arrhenius_plot_argparse.py の技術ドキュメント
プログラムの動作
目的: 温度と物理量(例えば伝導度やキャリア密度など)の測定データから、アレニウスプロットを作成し、多項式モデルによるフィッティングと活性化エネルギーの評価を行うプログラムです。
主な機能:
入力データから対象データ列を抽出し、変数変換(温度の逆数、対数変換など)を実行します。
指定されたモデル(1次~4次等の多項式)の次数で、線形最小二乗法によるフィッティングを行います。
推定されたパラメータの不確かさ(共分散行列)や予測区間、観測ノイズを考慮した各種誤差バンドを計算します。
数値微分を利用して、各温度における活性化エネルギーを算出します。
フィッティング結果や誤差バンドを含む各種グラフ(X-Yプロット、T-Pプロット、アレニウスプロット、活性化エネルギーの温度依存性、係数の誤差)をプロットします。
算出したパラメータおよび曲線の計算データをExcelファイルへ出力します。
解決する課題: 熱活性化過程における実験データから活性化エネルギーを算出する際の、データ変換、誤差評価、および温度依存モデル(パーコレーションモデルなどの非単純なアレニウスモデル)への適応を自動化し、視覚的な評価と定量的な解析を同時に実現します。
原理
本プログラムでは、温度 \(T\) と物理量 \(P\) の関係を評価するため、以下のような変量 \(x\) と \(y\) を定義して多項式回帰を行います。
回帰モデルは次数 \(p\) の多項式で表されます。
フィッティングは通常の最小二乗法を用いて行われ、デザイン行列 \(X\) に対して係数ベクトル \(\beta\) は次式で推定されます。
算出した共分散行列や残差分散から、各推定値の信頼区間(パラメータの不確かさ、予測値の不確かさなど)を計算します。
活性化エネルギー \(E_a\) は、標準的なアレニウスの式 \(P \propto \exp\left(-\frac{E_a}{k_B T}\right)\) に基づき算出します。アレニウスプロットにおける傾きから \(E_a\) を得るため、フィッティング曲線の微分 \(\frac{dy}{dx}\) を利用して以下のように求めます(単位は eV を想定するため、素電荷 \(e\) で割ります)。
プログラム内部では \(\ln(10)\) や定数を整理し、得られた近似曲線の数値微分を用いて各温度での \(E_a\) の推移を算出しています。
必要な非標準ライブラリとインストール方法
本プログラムは以下の非標準ライブラリに依存しています。
numpy: 数値計算、行列演算、統計処理。matplotlib: グラフの描画。tklib: 作成者独自のライブラリ(tkutils,tkVariousData,tkApplication,tkParams,tkFit,tkplotevent,tksciなどを提供)。
一般的なライブラリのインストールは以下の pip コマンドで実行可能です。
pip install numpy matplotlib
※ tklib モジュール群については、独自ライブラリであるため、実行環境のPYTHONPATH上に正しく配置・インストールされている必要があります。
必要な入力ファイル
プログラムは、温度と物理量を含むデータを期待します。デフォルトでは Hall-T.xlsx が入力対象となります。
ファイル形式: Excelファイル(.xlsx)や、
tklibのtkVariousDataが読み込み対応している形式。データ構造: 各列の1行目やヘッダー部分にデータのラベル(例:
T(K),P)が記載され、その下に数値データが並んでいるマトリクス形式。ラベルの検索には大文字小文字を区別しないフラグが指定されています。
生成される出力ファイル
プログラムを実行すると、入力ファイルと同じディレクトリに以下のファイルが生成されます({filebody} は入力ファイルの拡張子を除いたベース名です)。
{filebody}.logターミナルに出力される標準出力やエラーメッセージなどを記録するログファイル。
{filebody}-parameters.xlsx多項式フィッティングで得られた係数ベクトルと、その標準誤差が保存されるExcelファイル。
{filebody}-fit.xlsm入力データ、フィッティング曲線に基づく計算値、各種誤差バンド(
sigma(param)、sigma(param&resid)、sigma(param&noise))がまとめられたExcelファイル。出力時にはマクロ付きのテンプレート(StandardGraph.xlsm)が使用されます。
コマンドラインでの使用例 (Usage)
本スクリプトは argparse を用いており、ターミナルから各種パラメータを引数として指定して実行できます。
基本コマンド:
python D:/git/sphinx/tkProg/source/regression/arrhenius_plot_argparse.py [オプション]
主な引数:
--infile: 入力ファイルパス(デフォルト:Hall-T.xlsx)--model: フィッティングモデルの選択(simple Arrhenius,percolation,3rd order,4th order。デフォルトは単純なアレニウスモデル)--Tlabel: 温度に相当するデータ列のラベル(デフォルト:T(K))--Plabel: 物理量に相当するデータ列のラベル(デフォルト:P)--Ttype: 温度データの変換方法(T(K),T(C),1/T,1000/Tから選択)--Ptype: 物理量データの変換方法(P,log10(P),log_e(P)から選択)--xmin,--xmax,--Tmin,--Tmax: フィットに用いるデータ範囲の下限・上限--plot_ci,--plot_sigma_param,--plot_sigma_pred,--plot_sigma_combined: 各種不確かさのバンドのプロット有効化・無効化(1または0)
コマンドラインでの具体的な使用例
以下は、入力ファイル Data_Measure.xlsx を用いて、パーコレーションモデル(2次多項式)でフィッティングを行う場合のコマンド例です。
python D:/git/sphinx/tkProg/source/regression/arrhenius_plot_argparse.py --infile Data_Measure.xlsx --model percolation --Tlabel "Temperature" --Plabel "Conductivity" --Ttype "T(K)" --Ptype "P" --plot_sigma_combined 1
実行結果の説明:
入力ファイル
Data_Measure.xlsxからTemperature列とConductivity列のデータを読み込みます。パーコレーションモデルが指定されているため、\(1000/T\) に対して \(\log_{10}(P)\) を2次多項式を用いて最小二乗フィッティングします。
指定したパラメータ、各係数の推定値・誤差、残差分散がターミナル(およびログファイル
Data_Measure.log)に出力されます。各種不確かさのバンド(
plot_sigma_combinedを有効化しているため、観測ノイズも含めたバンド)を含むアレニウスプロットや、局所的な活性化エネルギーのグラフが画面にプロットされます。推定された係数等のパラメータは
Data_Measure-parameters.xlsxに、計算された近似値や各種誤差バンドのデータはData_Measure-fit.xlsmに保存されます。最後にプログラムがグラフを表示した状態で一時停止し、結果を視覚的に確認することができます。