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