mu_fit プログラム仕様
Hall効果移動度解析・フィッティングツール (mu_fit.py)
- 概要:
このスクリプトはHall効果測定から得られた温度依存移動度データを解析します。
- 詳細説明:
各種散乱メカニズム(光学フォノン、音響フォノン、中性不純物、イオン化不純物、粒界散乱)の 物理モデルに基づいてフィッティングを行い、パラメータの最適化および誤差評価を実施します。
- 主な機能:
実験データの読み込み(CSV/Excel) 線形最小二乗法(LLSQ)による初期値推定 非線形最適化によるパラメータ抽出 誤差伝播法によるモデルの不確かさ(1sigma範囲)の算出 共分散行列・相関係数・固有値解析によるパラメータ感度診断
- 関連リンク:
usage physics_models
フィッティングの目的関数は、移動度の対数スケールでの残差二乗和を最小化します。
- electrical.mu_fit.build_full_params(init_full, optimize_indices, p_opt)
- 概要:
最適化対象のパラメータと固定パラメータを統合し、全5パラメータのリストを作成する。
- 詳細説明:
初期値/固定値のリストと、最適化によって得られた変動パラメータのリストを組み合わせ、 完全なパラメータセットを再構築する。
- 引数:
- param init_full:
初期/固定値を含む全パラメータリスト。
- type init_full:
list
- param optimize_indices:
最適化対象のインデックス。
- type optimize_indices:
list
- param p_opt:
最適化されたパラメータ値のリスト。
- type p_opt:
list
- 戻り値:
- returns:
統合された全パラメータリスト。
- rtype:
list
- electrical.mu_fit.cov_to_corr(cov)
- 概要:
共分散行列を相関係数行列に変換する。
- 詳細説明:
共分散行列から標準偏差を計算し、その情報を用いて相関係数行列を生成する。 対角要素は1.0とし、ゼロ除算を避ける処理を含む。
- 引数:
- param cov:
共分散行列。
- type cov:
numpy.ndarray
- 戻り値:
- returns:
相関係数行列と標準偏差の配列のタプル。
- rtype:
(numpy.ndarray, numpy.ndarray)
- electrical.mu_fit.eigen_sorted_sym(A)
- 概要:
対称行列の固有値分解を行い、固有値の降順でソートして返す。
- 詳細説明:
numpyのeigh関数で対称行列の固有値と固有ベクトルを計算し、 固有値の降順でソートして返す。
- 引数:
- param A:
対象とする対称行列。
- type A:
numpy.ndarray
- 戻り値:
- returns:
降順ソートされた固有値と対応する固有ベクトルのタプル。
- rtype:
(numpy.ndarray, numpy.ndarray)
- electrical.mu_fit.fit_mask(T, Tfitmin=-1e+100, Tfitmax=1e+100)
- 概要:
指定された温度範囲に基づいてデータのマスクを作成する。
- 詳細説明:
温度配列 T の中から、Tfitmin と Tfitmax の範囲内にある要素に対応する真偽値マスクを生成する。
- 引数:
- param T:
温度 [K] の配列。
- type T:
numpy.ndarray
- param Tfitmin:
フィットに使用する最小温度。
- type Tfitmin:
float
- param Tfitmax:
フィットに使用する最大温度。
- type Tfitmax:
float
- 戻り値:
- returns:
指定範囲内のデータを示すブール値配列。
- rtype:
numpy.ndarray
- electrical.mu_fit.get_inv_mu_components(T, params, Eop)
- 概要:
各散乱メカニズムの逆移動度の寄与と、合計の逆移動度を計算する。
- 詳細説明:
Matthiessenの則に基づき、光学フォノン、音響フォノン、中性不純物、イオン化不純物の 各散乱成分の逆移動度を計算し、さらに粒界散乱の効果を指数関数的に適用して合計逆移動度を算出する。
- 引数:
- param T:
温度 [K] の配列。
- type T:
numpy.ndarray
- param params:
パラメータリスト [aop, a1, a2, a3, VB]。
- type params:
list
- param Eop:
光学フォノンエネルギー [eV]。
- type Eop:
float
- 戻り値:
- returns:
各成分の辞書と、合計逆移動度の配列のタプル。
- rtype:
(dict, numpy.ndarray)
- electrical.mu_fit.load_hall_data(file_path)
- 概要:
Hall効果の測定データをファイルから読み込む。
- 詳細説明:
指定されたパスのファイル(CSVまたはExcel)をPandas DataFrameとして読み込む。 ファイルが存在しない場合はエラーメッセージを表示し、Noneを返す。
- 引数:
- param file_path:
読み込むファイルのパス (.csv または .xlsx)。
- type file_path:
str
- 戻り値:
- returns:
読み込まれたデータフレーム。失敗した場合は None。
- rtype:
pandas.DataFrame or None
- electrical.mu_fit.load_params(filename='fit_params.json')
- 概要:
JSONファイルからフィッティングパラメータを読み込む。
- 詳細説明:
指定されたJSONファイルからパラメータを読み込む。ファイルが存在しない場合は、 llsq_params.json を試行し、それもなければデフォルトの初期値を返す。
- 引数:
- param filename:
読み込み先ファイル名。
- type filename:
str
- 戻り値:
- returns:
パラメータ名と値の辞書。
- rtype:
dict
- electrical.mu_fit.main()
- 概要:
コマンドライン引数を解析し、Hall効果移動度の解析・フィッティング処理を実行するエントリーポイント。
- 詳細説明:
argparse を使用してコマンドライン引数を処理し、指定されたモード (データ読み込み、LLSQ初期推定、非線形フィット、寄与度可視化)に応じて、 Hall効果測定データのフィッティングと結果の保存・可視化を行う。 パラメータ固定、誤差推定、フィッティング温度範囲の指定など、詳細なオプションに対応する。
- 戻り値:
- returns:
None
- rtype:
None
- electrical.mu_fit.numerical_jacobian(fun_vec, p, rel_step=1e-06, abs_step=1e-12)
- 概要:
中心差分法を用いてベクトル値関数のヤコビ行列を数値的に計算する。
- 詳細説明:
各パラメータについて、微小なステップで関数値を perturbed し、その差分から偏微分を近似することで ヤコビ行列を構築する。
- 引数:
- param fun_vec:
残差ベクトルを返す関数。
- type fun_vec:
callable
- param p:
パラメータベクトル。
- type p:
numpy.ndarray
- param rel_step:
数値微分の相対ステップ。
- type rel_step:
float
- param abs_step:
数値微分の絶対ステップ。
- type abs_step:
float
- 戻り値:
- returns:
ヤコビ行列 (N, M)。
- rtype:
numpy.ndarray
- electrical.mu_fit.param_covariance(residual_vec, J, dof)
- 概要:
線形近似に基づき、最適化パラメータの共分散行列と標準誤差を推定する。
- 詳細説明:
最適化後の残差とヤコビ行列を用いて、非線形最小二乗法におけるパラメータの共分散行列を計算し、 それから標準誤差を導出する。
- 引数:
- param residual_vec:
最適化後の残差ベクトル。
- type residual_vec:
numpy.ndarray
- param J:
ヤコビ行列。
- type J:
numpy.ndarray
- param dof:
自由度 (データ数 - パラメータ数)。
- type dof:
int
- 戻り値:
- returns:
共分散行列と標準誤差の配列のタプル。
- rtype:
(numpy.ndarray, numpy.ndarray)
- electrical.mu_fit.prediction_band_log10_mu(T, params_full, Eop, optimize_indices, cov_opt, nsigma=1.0, rel_step=1e-06, abs_step=1e-12)
- 概要:
デルタ法(誤差伝播)を用いて、モデルの対数移動度における予測誤差帯を計算する。
- 詳細説明:
最適化されたパラメータの共分散行列と、モデル関数のパラメータに対する数値的な勾配を用いて、 モデル予測値の不確かさ(標準偏差)を計算し、予測帯の上限と下限を導出する。
- 引数:
- param T:
温度 [K] の配列。
- type T:
numpy.ndarray
- param params_full:
全パラメータのリスト。
- type params_full:
list
- param Eop:
光学フォノンエネルギー [eV]。
- type Eop:
float
- param optimize_indices:
最適化対象のインデックス。
- type optimize_indices:
list
- param cov_opt:
最適化パラメータの共分散行列。
- type cov_opt:
numpy.ndarray
- param nsigma:
誤差帯のシグマ倍率。
- type nsigma:
float
- param rel_step:
勾配算出用の相対ステップ。
- type rel_step:
float
- param abs_step:
勾配算出用の絶対ステップ。
- type abs_step:
float
- 戻り値:
- returns:
(平均値, 下限, 上限) の各配列のタプル。
- rtype:
(numpy.ndarray, numpy.ndarray, numpy.ndarray)
- electrical.mu_fit.propose_fix_candidates(names, values, stderr, corr, evals_cov=None, evecs_cov=None, corr_thr=0.95, relerr_thr=0.5, topn=3)
- 概要:
数値的な不安定性(大きな誤差や強相関)に基づき、固定を検討すべきパラメータを提案する。
- 詳細説明:
パラメータの相対誤差、相関係数、および共分散行列の固有分析結果を総合的に評価し、 最適化の収束を改善するために固定することが推奨されるパラメータ候補をスコア付けして提示する。
- 引数:
- param names:
パラメータ名のリスト。
- type names:
list
- param values:
最適化された値。
- type values:
numpy.ndarray
- param stderr:
標準誤差。
- type stderr:
numpy.ndarray
- param corr:
相関係数行列。
- type corr:
numpy.ndarray
- param evals_cov:
共分散行列の固有値(オプション)。
- type evals_cov:
numpy.ndarray or None
- param evecs_cov:
共分散行列の固有ベクトル(オプション)。
- type evecs_cov:
numpy.ndarray or None
- param corr_thr:
強相関とみなす閾値。
- type corr_thr:
float
- param relerr_thr:
相対誤差が大きいとみなす閾値。
- type relerr_thr:
float
- param topn:
提案する最大数。
- type topn:
int
- 戻り値:
- returns:
提案パラメータと理由を含む辞書のリスト。
- rtype:
list
- electrical.mu_fit.residuals_log10(T, mu_exp, params_full, Eop)
- 概要:
移動度の対数値(log10)における実測値とモデル値の残差を計算する。
- 詳細説明:
実測移動度と、現在のパラメータで計算されるモデル移動度の常用対数を取り、その差を計算する。 数値的な安定性のため、移動度が非常に小さい場合はクリッピングを行う。
- 引数:
- param T:
温度 [K] の配列。
- type T:
numpy.ndarray
- param mu_exp:
実測移動度の配列。
- type mu_exp:
numpy.ndarray
- param params_full:
全5パラメータのリスト。
- type params_full:
list
- param Eop:
光学フォノンエネルギー [eV]。
- type Eop:
float
- 戻り値:
- returns:
log10(mu_exp) - log10(mu_model) の残差配列。
- rtype:
numpy.ndarray
- electrical.mu_fit.save_params(params, filename='fit_params.json')
- 概要:
フィッティングパラメータまたは診断結果をJSON形式で保存する。
- 詳細説明:
辞書形式のデータを指定されたファイル名でJSONファイルとして保存する。
- 引数:
- param params:
保存するパラメータの辞書。
- type params:
dict
- param filename:
保存先ファイル名。
- type filename:
str
- 戻り値:
- returns:
None
- rtype:
None
- electrical.mu_fit.solve_llsq(T, mu_exp, Eop)
- 概要:
線形最小二乗法を用いて散乱係数(a_i)の初期値を推定する。
- 詳細説明:
VB(粒界散乱障壁)を0と仮定し、逆移動度に対して線形フィットを行う。 推定された係数は負の値にならないようクリッピングされる。
- 引数:
- param T:
温度 [K] の配列。
- type T:
numpy.ndarray
- param mu_exp:
実測移動度 [cm^2/Vs] の配列。
- type mu_exp:
numpy.ndarray
- param Eop:
光学フォノンエネルギー [eV]。
- type Eop:
float
- 戻り値:
- returns:
推定された係数配列 [aop, a1, a2, a3]。
- rtype:
numpy.ndarray
- electrical.mu_fit.summarize_eigenvectors(evals, evecs, names, topk=3, compk=3)
- 概要:
固有ベクトルを人間が読みやすい形式(パラメータ成分の寄与度)で要約する。
- 詳細説明:
共分散行列の固有値と固有ベクトルから、どのパラメータが不確かさの主要な方向に 強く寄与しているかをランク付けして表示する。
- 引数:
- param evals:
固有値の配列。
- type evals:
numpy.ndarray
- param evecs:
固有ベクトルの行列。
- type evecs:
numpy.ndarray
- param names:
パラメータ名のリスト。
- type names:
list
- param topk:
出力する固有値の数。
- type topk:
int
- param compk:
各固有ベクトルについて表示する成分の数。
- type compk:
int
- 戻り値:
- returns:
ランクごとの固有値と成分寄与度を含む辞書のリスト。
- rtype:
list
- electrical.mu_fit.visualize_fit(T, mu_exp, mu_fit=None, mu_lo=None, mu_hi=None, title='Hall Mobility Fit', save_name='plot.png')
- 概要:
実験データ、モデルのフィット曲線、および誤差帯をプロットして保存する。
- 詳細説明:
実測移動度、フィットされたモデル移動度、およびその誤差帯を対数スケールでグラフ化し、 指定されたファイル名で画像として保存し、表示する。
- 引数:
- param T:
温度 [K]。
- type T:
numpy.ndarray
- param mu_exp:
実測移動度。
- type mu_exp:
numpy.ndarray
- param mu_fit:
モデルによるフィット値(オプション)。
- type mu_fit:
numpy.ndarray or None
- param mu_lo:
誤差帯の下限(オプション)。
- type mu_lo:
numpy.ndarray or None
- param mu_hi:
誤差帯の上限(オプション)。
- type mu_hi:
numpy.ndarray or None
- param title:
グラフのタイトル。
- type title:
str
- param save_name:
保存ファイル名。
- type save_name:
str
- 戻り値:
- returns:
None
- rtype:
None
- electrical.mu_fit.visualize_weights(T, components, total, save_name='weight_plot.png')
- 概要:
各散乱メカニズムが全体の散乱(逆移動度)に占める割合(寄与度)を可視化する。
- 詳細説明:
温度に対して、各散乱メカニズム(光学フォノン、音響フォノン、不純物、粒界)が 合計の逆移動度(散乱)に占める割合をパーセンテージでプロットする。
- 引数:
- param T:
温度 [K]。
- type T:
numpy.ndarray
- param components:
各成分の逆移動度。
- type components:
dict
- param total:
合計逆移動度。
- type total:
numpy.ndarray
- param save_name:
保存ファイル名。
- type save_name:
str
- 戻り値:
- returns:
None
- rtype:
None