pvfit プログラム仕様

拡張一ダイオードモデル(SDM)IVフィッティングツール

このモジュールは、太陽電池や他の半導体デバイスの電流-電圧(IV)特性を、 拡張一ダイオードモデル(SDM)を用いてフィッティング、初期値推定、またはシミュレーションするためのツールを提供します。 複数の輸送メカニズム(ダイオード、トンネル誘起フォワードエミッション (TFE)、 非理想フォワード電流 (FN)、空間電荷制限電流 (SCLC))を組み合わせて利用できます。

機能: - フォワードバイアスとリバースバイアスのモデルを独立に選択可能 - ダイオード、TFE、FN、SCLCの各メカニズムを任意に組み合わせ可能 - 数値解法は接合電圧 Vd を未知数とする根探しで安定化 - モデルに未使用のパラメータは自動的に固定 - forwardIV と reverseIV が同一の場合、再計算を回避して効率化 - 最適化途中のIVカーブをアニメーション表示(常に有効) - 線形近似に基づくパラメータ誤差推定 - モデル電流の標準偏差から信頼性区間を水色領域で表示

mode=init の初期値推定: - 入力IVを電圧昇順にソート - I-Vを局所多項式で平滑化 - dI/dV から Rs, Rsh を推定 - ISC = I(V=0) を V=0 近傍の多項式で推定 - IPV = -ISC - VOC = I(V)=0 の多項式根で推定 - Ish = V<0 の代表点 Vsh における電流 - I0 = ISC - Ish (シャント電流は差し引かない) - TFE 初期値:

V<0 の十分負側で ln(|I|)-V を一次近似 E00 = 1/|slope| A_tfe = |I| * exp(+V/E00) を代表点から推定

  • ndiode は固定初期値 1.5

  • FN / SCLC の初期値は結果に影響しない極小値

注意: - mode=init の初期値は fit 用の頑健な初期値です。 - 物理的に厳密な意味づけは mode=fit で精密化してください。

関連リンク: pvfit.py 技術ドキュメント

electrical.pvfit.dual_print(*args, **kwargs)[ソース]
electrical.pvfit.estimate_errors(res, V, I_meas, temperature, args, base_params, fix_set)[ソース]

フィッティング結果からパラメータの誤差とモデル電流の信頼区間を推定します。

ヤコビ行列と残差平方和を用いて共分散行列を計算し、誤差伝播によって 各パラメータの誤差とモデル電流の log10 スケールでの標準偏差を算出します。

パラメータ:
  • res (scipy.optimize.OptimizeResult) -- scipy.optimize.minimize の結果オブジェクト。最適化されたパラメータ (res.x) と目的関数の値 (res.fun) を含む。

  • V (numpy.ndarray) -- 測定された電圧データ点の配列。

  • I_meas (numpy.ndarray) -- 測定された電流データ点の配列。

  • temperature (float) -- シミュレーションの温度 (K)。

  • args (argparse.Namespace) -- コマンドライン引数パーサーから得られた設定を含むオブジェクト。

  • base_params (dict) -- 固定パラメータの基準値を含む辞書。

  • fix_set (set) -- 固定されたパラメータ名のセット。

戻り値:

errors_dict (各パラメータ名とその推定誤差の辞書), sigma_log_I (モデル電流のlog10値の標準偏差の配列)

戻り値の型:

tuple[dict, numpy.ndarray]

electrical.pvfit.estimate_initial_params(V, I_meas, temperature)[ソース]

IVデータからSDM(拡張一ダイオードモデル)の初期パラメータを推定します。

データ平滑化、dI/dV解析、多項式根探し、負電圧領域でのTFE近似を用いて、 最適化に適した頑健な初期値を導出します。

パラメータ:
  • V (numpy.ndarray) -- 測定された電圧データ点の配列。

  • I_meas (numpy.ndarray) -- 測定された電流データ点の配列。

  • temperature (float) -- 測定時の温度 (K)。

戻り値:

推定された初期パラメータを含む辞書。

戻り値の型:

dict

electrical.pvfit.estimate_voc_local_quadratic(V, I, nlsq_points=5)[ソース]

IVデータから開回路電圧(VOC)を局所二次多項式フィッティングで推定します。

電流がゼロに最も近い点の近傍データを使用して、二次多項式をフィッティングし、 その多項式の根からVOCを求めます。データ点が少ない場合は、線形補間を使用します。

パラメータ:
  • V (numpy.ndarray) -- 電圧データの配列。

  • I (numpy.ndarray) -- 電流データの配列。

  • nlsq_points (int) -- 局所フィッティングに使用するデータ点の数。

戻り値:

推定された開回路電圧VOC。

戻り値の型:

float

electrical.pvfit.exec_fit(V, I_meas, info, csv_path, params, fix_set, args)[ソース]

fit モードの本体処理。 最適化、誤差推定、保存、最終プロットまでをまとめて実行する。

この関数は、scipy.optimize.minimize を用いてSDMパラメータを測定データにフィッティングします。 フィッティング中には、コンソールへの進捗表示とリアルタイムのIVカーブアニメーションが行われます。 最適化後、パラメータの誤差が推定され、結果がCSVファイルに保存され、最終的なプロットが表示されます。

パラメータ:
  • V (numpy.ndarray) -- 測定された電圧データ点の配列。

  • I_meas (numpy.ndarray) -- 測定された電流データ点の配列。

  • info (dict) -- ファイル名やレコード時間などの情報を含む辞書。プロットのタイトルに使用。

  • csv_path (pathlib.Path) -- パラメータを保存するCSVファイルのパス。

  • params (dict) -- 初期パラメータ値を含む辞書。

  • fix_set (set) -- 固定されるパラメータ名のセット。

  • args (argparse.Namespace) -- コマンドライン引数パーサーから得られた設定を含むオブジェクト。

戻り値:

params (最適化後のパラメータ値の辞書), rss (残差平方和), errors (各パラメータの推定誤差の辞書), sigma_log_curve (モデル電流のlog10値の標準偏差の配列)

戻り値の型:

tuple[dict, float, dict, numpy.ndarray]

electrical.pvfit.get_jacobian(p_free, V, temperature, args, base_params, fix_set)[ソース]

モデルのヤコビ行列を数値的に計算します。

各自由パラメータを微小量 eps だけ摂動させ、log10(|I|) の変化を計算して 偏微分(ヤコビ行列の要素)を近似します。

パラメータ:
  • p_free (numpy.ndarray) -- 最適化された自由パラメータのNumPy配列。

  • V (numpy.ndarray) -- 測定された電圧データ点の配列。

  • temperature (float) -- シミュレーションの温度 (K)。

  • args (argparse.Namespace) -- コマンドライン引数パーサーから得られた設定を含むオブジェクト。

  • base_params (dict) -- 固定パラメータの基準値を含む辞書。

  • fix_set (set) -- 固定されたパラメータ名のセット。

戻り値:

各データ点に対する各自由パラメータの偏微分からなるヤコビ行列。

戻り値の型:

numpy.ndarray

electrical.pvfit.initialize()[ソース]

コマンドライン引数パーサーを初期化し、引数を解析します。

各種実行モード (analyze, init, fit, sim)、最適化手法、 入力ファイル、温度、データクリッピング範囲、スキップ間隔、 フォワード/リバースIVモデル、ブレンド電圧幅、プロット/プリント間隔、 最大イテレーション数、許容誤差、固定パラメータなどの引数を定義します。

戻り値:

args (解析された引数を含むオブジェクト), parser (ArgumentParserオブジェクト)

戻り値の型:

tuple[argparse.Namespace, argparse.ArgumentParser]

electrical.pvfit.initialize_plot(V, I_meas, I_sim, title=None)[ソース]

最適化プロセスのための初期プロットを設定し、アニメーションオブジェクトを返します。

リアルタイムでのフィッティング進捗状況を表示するために使用されます。 線形スケールと対数絶対値スケールの2つのサブプロットが作成されます。

パラメータ:
  • V (numpy.ndarray) -- 電圧データの配列。

  • I_meas (numpy.ndarray) -- 測定された電流データの配列。

  • I_sim (numpy.ndarray) -- 初期シミュレーション電流データの配列。

  • title (str or None) -- プロットのメインタイトル。Noneの場合、タイトルは設定されない。

戻り値:

fig (matplotlib.figure.Figure), axes (matplotlib.axes.Axesの配列), anim (アニメーションに使うオブジェクトの辞書)

戻り値の型:

tuple[matplotlib.figure.Figure, numpy.ndarray, dict]

electrical.pvfit.j_diode(Vd, I0, ndiode, temperature)[ソース]

理想ダイオードモデル(Shockley方程式)の電流成分を計算します。

パラメータ:
  • Vd (numpy.ndarray or float) -- ダイオード接合にかかる電圧。

  • I0 (float) -- 逆飽和電流。

  • ndiode (float) -- ダイオード理想因子(エミッタ係数)。

  • temperature (float) -- 温度 (K)。

戻り値:

ダイオード電流。

戻り値の型:

numpy.ndarray or float

electrical.pvfit.j_fn_forward(Vd, A_fn, B_fn)[ソース]

Fowler-Nordheimトンネル電流 (FN) のフォワードバイアス成分を計算します。

このメカニズムは、高注入レベルや特定の欠陥メカニズムによって引き起こされる電流をモデル化するために使用できます。 Vd > 0 の領域で定義されます。

パラメータ:
  • Vd (numpy.ndarray or float) -- ダイオード接合にかかる電圧。

  • A_fn (float) -- FN電流の振幅係数。

  • B_fn (float) -- FN電流の指数関数的電圧依存性を制御する係数。

戻り値:

FNフォワード電流。

戻り値の型:

numpy.ndarray or float

electrical.pvfit.j_fn_reverse(Vd, A_fn, B_fn)[ソース]

Fowler-Nordheimトンネル電流 (FN) のリバースバイアス成分を計算します。

このメカニズムは、高注入レベルや特定の欠陥メカニズムによって引き起こされる電流をモデル化するために使用できます。 Vd < 0 の領域で定義されます。

パラメータ:
  • Vd (numpy.ndarray or float) -- ダイオード接合にかかる電圧。

  • A_fn (float) -- FN電流の振幅係数。

  • B_fn (float) -- FN電流の指数関数的電圧依存性を制御する係数。

戻り値:

FNリバース電流。

戻り値の型:

numpy.ndarray or float

electrical.pvfit.j_sclc(Vd, K_sclc)[ソース]

空間電荷制限電流 (SCLC) を計算します。

SCLCは、高抵抗材料におけるキャリア注入が空間電荷によって制限されるときに発生します。 この電流は電圧の2乗に比例し、電圧の符号によって方向が決まります。

パラメータ:
  • Vd (numpy.ndarray or float) -- ダイオード接合にかかる電圧。

  • K_sclc (float) -- SCLCの振幅係数。

戻り値:

SCLC電流。

戻り値の型:

numpy.ndarray or float

electrical.pvfit.j_sclc_trap_transition(Vd, K_sclc, m_sclc, Vtfl, dV=0.001)[ソース]

トラップ制限空間電荷制限電流(SCLC)とトラップフリーSCLCの間の遷移をモデル化する電流成分を計算します。

このモデルは、電圧に応じてトラップが満たされることで、電流が異なる電圧依存性を示す領域を表現します。 具体的には、トラップ制限領域では Vd^m_sclc に、トラップフリー領域では Vd^2 に従います。 シグモイド関数を用いて両者間の滑らかな遷移を実現します。

パラメータ:
  • Vd (numpy.ndarray or float) -- ダイオード接合にかかる電圧。

  • K_sclc (float) -- SCLCの振幅係数(トラップ制限領域の係数)。

  • m_sclc (float) -- トラップ制限領域でのSCLCの電圧依存性指数。

  • Vtfl (float) -- トラップが満たされる閾値電圧。

  • dV (float) -- 遷移の幅を制御する電圧(シグモイド関数の傾き)。

戻り値:

トラップ遷移を考慮したSCLC電流。

戻り値の型:

numpy.ndarray or float

electrical.pvfit.j_tfe_forward(Vd, A_tfe, E00)[ソース]

熱アシストトンネルフィールドエミッション (TFE) 電流のフォワードバイアス成分を計算します。

TFEは通常、低温や欠陥の多い材料で支配的になるメカニズムです。 この関数は、Vd > 0 の領域でTFEによる電流を計算します。

パラメータ:
  • Vd (numpy.ndarray or float) -- ダイオード接合にかかる電圧。

  • A_tfe (float) -- TFE電流の振幅係数。

  • E00 (float) -- TFEの特性エネルギーまたは係数。

戻り値:

TFEフォワード電流。

戻り値の型:

numpy.ndarray or float

electrical.pvfit.j_tfe_reverse(Vd, A_tfe, E00)[ソース]

熱アシストトンネルフィールドエミッション (TFE) 電流のリバースバイアス成分を計算します。

この関数は、Vd < 0 の領域でTFEによる電流を計算します。

パラメータ:
  • Vd (numpy.ndarray or float) -- ダイオード接合にかかる電圧。

  • A_tfe (float) -- TFE電流の振幅係数。

  • E00 (float) -- TFEの特性エネルギーまたは係数。

戻り値:

TFEリバース電流。

戻り値の型:

numpy.ndarray or float

electrical.pvfit.junction_current_forward(Vd, p, mode_set, temperature)[ソース]

フォワードバイアス条件における総接合電流を計算します。

mode_set で指定されたメカニズムに基づいて、対応する電流成分(ダイオード、TFE、FN、SCLC)を合計します。

パラメータ:
  • Vd (numpy.ndarray or float) -- ダイオード接合にかかる電圧。

  • p (dict) -- パラメータ値を含む辞書。

  • mode_set (set) -- フォワードバイアスで使用するメカニズムのセット。

  • temperature (float) -- 温度 (K)。

戻り値:

総接合電流。

戻り値の型:

numpy.ndarray or float

electrical.pvfit.junction_current_reverse(Vd, p, mode_set, temperature)[ソース]

リバースバイアス条件における総接合電流を計算します。

mode_set で指定されたメカニズムに基づいて、対応する電流成分(ダイオード、TFE、FN、SCLC)を合計します。

パラメータ:
  • Vd (numpy.ndarray or float) -- ダイオード接合にかかる電圧。

  • p (dict) -- パラメータ値を含む辞書。

  • mode_set (set) -- リバースバイアスで使用するメカニズムのセット。

  • temperature (float) -- 温度 (K)。

戻り値:

総接合電流。

戻り値の型:

numpy.ndarray or float

electrical.pvfit.load_param_csv(csv_path)[ソース]

パラメータ設定CSVファイルからパラメータ値と固定設定を読み込みます。

CSVファイルには 'varname', 'value', 'optid' の列が含まれると想定されます。 'optid' が '0' の場合、そのパラメータは固定されます。

パラメータ:

csv_path (str) -- 読み込むCSVファイルのパス。

戻り値:

params (読み込まれたパラメータ名と値の辞書), fix_set (固定されるパラメータ名のセット)

戻り値の型:

tuple[dict, set]

electrical.pvfit.local_poly_value(x, y, x0, npts=7, order=3)[ソース]

指定された点 x0 の近傍のデータ点に局所多項式をフィッティングし、x0 におけるy値を推定します。

npts で指定された数の最も近いデータ点を使用します。

パラメータ:
  • x (numpy.ndarray) -- 独立変数データ点の配列。

  • y (numpy.ndarray) -- 従属変数データ点の配列。

  • x0 (float) -- y値を推定したい目標のx値。

  • npts (int) -- 局所フィッティングに使用するデータ点の数。

  • order (int) -- 多項式フィッティングの次数。

戻り値:

x0 における推定y値。

戻り値の型:

float

electrical.pvfit.main()[ソース]

スクリプトのエントリーポイント。コマンドライン引数を解析し、IVフィッティングツールを実行します。

この関数は、初期値推定 (init)、モデルフィッティング (fit)、またはシミュレーション (sim) の いずれかのモードで動作します。データ読み込み、パラメータ管理、最適化、結果のプロットを行います。

戻り値:

None

戻り値の型:

None

electrical.pvfit.model(V, p, forwardIV='diode', reverseIV='diode+tfe', dV=0.05, temperature=300.0)[ソース]

拡張一ダイオードモデル(SDM)に基づいて電流-電圧(IV)カーブを計算します。

与えられた外部電圧 V、パラメータ p、および選択された輸送メカニズム (forwardIV, reverseIV) を使用して 対応する電流 I を計算します。接合電圧 Vd を未知数とする根探しアルゴリズム(Brentのメソッド)を 用いて安定的にモデル電流を求めます。 フォワードとリバースで異なるモデルが指定された場合、シグモイド関数 (sigmoid_blend) を使って Vd が0V付近でスムーズにブレンドされます。

パラメータ:
  • V (numpy.ndarray) -- 外部印加電圧の配列。

  • p (dict) -- モデルパラメータを含む辞書。主要なキーは "I0", "ndiode", "IPV", "Rs", "Rsh", "A_tfe", "E00", "A_fn", "B_fn", "K_sclc"。

  • forwardIV (str) -- フォワードバイアス領域で使用する輸送メカニズムを示す文字列。例: "diode", "diode+tfe+sclc"。

  • reverseIV (str) -- リバースバイアス領域で使用する輸送メカニズムを示す文字列。例: "diode+tfe", "diode+fn"。

  • dV (float) -- フォワードモデルとリバースモデルをブレンドする際の電圧幅。Vd=0V付近での遷移の鋭さを制御します。

  • temperature (float) -- シミュレーションの温度 (K)。

戻り値:

各外部電圧 V に対応する総電流の配列。

戻り値の型:

numpy.ndarray

electrical.pvfit.objective(p_free, V, I_meas, args, base_params, fix_set)[ソース]

最適化のための目的関数(残差平方和)を計算します。

測定電流とモデル電流の符号を保持した圧縮表現 sign(I) * log10(abs(I)+EPS_I) の残差平方和を使用します。

パラメータ:
  • p_free (numpy.ndarray) -- 最適化中の自由パラメータのNumPy配列。

  • V (numpy.ndarray) -- 測定された電圧データ点の配列。

  • I_meas (numpy.ndarray) -- 測定された電流データ点の配列。

  • args (argparse.Namespace) -- コマンドライン引数パーサーから得られた設定を含むオブジェクト(例: forwardIV, reverseIV)。

  • base_params (dict) -- 固定パラメータの基準値を含む辞書。

  • fix_set (set) -- 固定されたパラメータ名のセット。

戻り値:

目的関数の値(残差平方和)。

戻り値の型:

float

electrical.pvfit.pack_free_params(params, fix_set)[ソース]

辞書形式の全パラメータから、最適化対象の自由パラメータのみをNumPy配列にパックします。

fix_set に含まれるパラメータは除外されます。 LOG_PARAMS に含まれるパラメータは log10 変換されて配列に格納されます。

パラメータ:
  • params (dict) -- 全パラメータ(固定および自由)を含む辞書。

  • fix_set (set) -- 固定されるパラメータ名のセット。

戻り値:

最適化に使用される自由パラメータのNumPy配列。

戻り値の型:

numpy.ndarray

electrical.pvfit.parse_mech_mode(mode_str)[ソース]

輸送メカニズムのモード文字列を解析し、使用するメカニズムのセットを返します。

モード文字列はカンマ (,) またはプラス (+) で区切られたメカニズム名(例: "diode+tfe")を 含みます。無効なメカニズム名が指定された場合はValueErrorを発生させます。

パラメータ:

mode_str (str or None) -- 解析するモード文字列(例: "diode", "diode+tfe", "none")。

戻り値:

使用するメカニズム名のセット。

戻り値の型:

set

例外:

ValueError -- 未知の輸送メカニズム名が指定された場合。

electrical.pvfit.plot_iv(fig, axes, V, I_meas, I_start, I_final, info, mode, sigma_log=None, mode_label='', outfile=None, pause=False)[ソース]

測定データとモデルIVカーブをプロットします。

線形スケールと対数絶対値スケールの2つのサブプロットを作成します。 sigma_log が提供された場合、モデル電流の信頼区間を水色領域で表示します。

パラメータ:
  • fig (matplotlib.figure.Figure or None) -- プロットに使うmatplotlib.figure.Figureオブジェクト。Noneの場合、新しいFigureを作成。

  • axes (numpy.ndarray or None) -- プロットに使うmatplotlib.axes.Axesオブジェクトの配列。Noneの場合、新しいAxesを作成。

  • V (numpy.ndarray) -- プロットする電圧データの配列。

  • I_meas (numpy.ndarray or None) -- 測定された電流データの配列。Noneの場合、測定データはプロットされない。

  • I_start (numpy.ndarray or None) -- 初期モデルによって計算された電流データの配列。Noneの場合、初期モデルはプロットされない。

  • I_final (numpy.ndarray) -- 最終モデルによって計算された電流データの配列。

  • info (dict) -- ファイル名やレコード時間などの情報を含む辞書。プロットのタイトルに使用。

  • mode (str) -- 現在の実行モード(例: "init", "fit", "sim")を示す文字列。プロットのタイトルに使用。

  • sigma_log (numpy.ndarray or None) -- モデル電流の log10 値の標準偏差の配列。信頼区間を表示するために使用。Noneの場合、信頼区間は表示されない。

  • mode_label (str) -- プロットのタイトルに追加するモードのラベル。

  • outfile (str or None) -- プロットを保存するファイルパス。Noneの場合、保存しない。

戻り値:

None

戻り値の型:

None

electrical.pvfit.print_args_and_derived(args)[ソース]

コマンドライン引数とその派生値をコンソールに出力します。

ユーザーが指定した入力値と、プログラム内部で決定される追加の設定(例:使用されるパラメータ、自動固定されるパラメータ) を一覧表示し、設定の確認を容易にします。

パラメータ:

args (argparse.Namespace) -- 解析されたコマンドライン引数を含むオブジェクト。

戻り値:

None

戻り値の型:

None

electrical.pvfit.print_parameter_repeat(params, fix_set, used, auto_fixed, title='')[ソース]

現在のモデルパラメータとその固定状態をコンソールに出力します。

これは、print_args_and_derived の「Derived values」セクションに似ていますが、 最終的に決定された各パラメータの具体的な値と、それが固定されているかどうかの状態を詳細に示します。

パラメータ:
  • params (dict) -- 最終的なパラメータ値を含む辞書。

  • fix_set (set) -- 固定されるパラメータ名のセット。

  • used (set) -- モデルで使用されるパラメータ名のセット。

  • auto_fixed (set) -- モデルによって自動的に固定されたパラメータ名のセット。

  • title (str) -- 出力の前に表示されるタイトル文字列。

戻り値:

None

戻り値の型:

None

electrical.pvfit.read_data(infile, xmin=None, xmax=None, ndataskip=0)[ソース]

指定されたCSVファイルからIVデータ(電圧と電流)を読み込みます。

ファイルからメタデータを抽出し、電圧昇順にデータをソートし、 指定された電圧範囲でクリッピングし、データスキップ間隔を適用します。

パラメータ:
  • infile (str) -- 入力IV CSVファイルのパス。

  • xmin (float or None) -- データをクリップする最小電圧 (V)。Noneの場合、下限なし。

  • xmax (float or None) -- データをクリップする最大電圧 (V)。Noneの場合、上限なし。

  • ndataskip (int) -- 読み込み時にスキップするデータ点の数(n+1点ごとにデータを保持)。

戻り値:

V (読み込まれた電圧データのNumPy配列), I (読み込まれた電流データのNumPy配列), info (ファイル名と記録時間を含む辞書)

戻り値の型:

tuple[numpy.ndarray, numpy.ndarray, dict]

例外:

ValueError -- 有効なデータが見つからない場合、またはクリッピング後にデータ点が残らない場合。

electrical.pvfit.same_sign(a, b)[ソース]

2つの数値が同じ符号を持つかどうかを判定します。

両方が正または両方が負の場合にTrueを返します。 片方または両方がゼロの場合の動作は、厳密には考慮されていません。

パラメータ:
  • a (float) -- 1つ目の数値。

  • b (float) -- 2つ目の数値。

戻り値:

ab が同じ符号を持つ場合はTrue、そうでない場合はFalse。

戻り値の型:

bool

electrical.pvfit.save_iv_to_excel(outfile_xlsx, V, I_input, I_init, I_fit, info, params_init=None, params_final=None, rss=None, errors=None)[ソース]

IVデータ、初期パラメータ、最終パラメータ、およびサマリー情報をExcelファイルに保存します。

測定データ、初期モデル電流、フィッティング後のモデル電流が線形および対数絶対値スケールで保存されます。 パラメータシートには初期値と最終値、および推定誤差が含まれます。

パラメータ:
  • outfile_xlsx (str) -- 出力するExcelファイルのパス。

  • V (numpy.ndarray) -- 電圧データのNumPy配列。

  • I_input (numpy.ndarray or None) -- 測定された電流データのNumPy配列。Noneの場合、保存しない。

  • I_init (numpy.ndarray or None) -- 初期モデルによって計算された電流データのNumPy配列。Noneの場合、保存しない。

  • I_fit (numpy.ndarray or None) -- フィッティング後のモデルによって計算された電流データのNumPy配列。Noneの場合、保存しない。

  • info (dict) -- ファイル名や記録時間などの情報を含む辞書。

  • params_init (dict or None) -- 初期パラメータ値を含む辞書。Noneの場合、保存しない。

  • params_final (dict or None) -- フィッティング後の最終パラメータ値を含む辞書。Noneの場合、保存しない。

  • rss (float or None) -- 残差平方和 (Residual Sum of Squares)。Noneの場合、保存しない。

  • errors (dict or None) -- 各パラメータの推定誤差を含む辞書。Noneの場合、保存しない。

戻り値:

None

戻り値の型:

None

electrical.pvfit.save_param_csv(csv_path, params, fix_set, errors=None, rss=None)[ソース]

現在のパラメータ値、固定設定、推定誤差、およびRSSをCSVファイルに保存します。

PARAM_NAMES にリストされている全てのパラメータと、追加の診断情報(VOC_estなど)が保存されます。

パラメータ:
  • csv_path (str) -- 保存するCSVファイルのパス。

  • params (dict) -- 保存するパラメータ名と値の辞書。

  • fix_set (set) -- 固定されたパラメータ名のセット。

  • errors (dict or None) -- 各パラメータの推定誤差を含む辞書。Noneの場合、誤差は0.0として保存。

  • rss (float or None) -- 残差平方和 (Residual Sum of Squares)。Noneの場合、保存しない。

戻り値:

None

戻り値の型:

None

electrical.pvfit.setup_parameters(params, args, csv_fix, args_fix, forwardIV, reverseIV)[ソース]

パラメータ辞書を最終的に設定し、固定されるパラメータを決定します。

コマンドライン引数で上書きされた値、CSVファイルから読み込まれた値、 デフォルト値、および未使用のモデルメカニズムに基づいて自動的に固定されるパラメータを統合します。

パラメータ:
  • params (dict) -- 現在のパラメータ値を含む辞書。

  • args (argparse.Namespace) -- 解析されたコマンドライン引数を含むオブジェクト。

  • csv_fix (set) -- CSVファイルで固定されたパラメータ名のセット。

  • args_fix (list) -- コマンドライン引数で固定されたパラメータ名のリスト。

  • forwardIV (str) -- フォワードバイアスモデルのメカニズムを示す文字列。

  • reverseIV (str) -- リバースバイアスモデルのメカニズムを示す文字列。

戻り値:

params (最終的なパラメータ値の辞書), fix_set (最終的に固定されるパラメータ名のセット), used (使用されるパラメータ名のセット), auto_fixed (自動的に固定されたパラメータ名のセット)

戻り値の型:

tuple[dict, set, set, set]

例外:

ValueError -- 不明な固定パラメータ名が指定された場合。

electrical.pvfit.sigmoid_blend(x, dV)[ソース]

シグモイド関数を用いて、2つのモデル間のブレンド係数を計算します。

x が0.0の場合に0.5、x が正で十分に大きい場合に1.0、 x が負で十分に小さい場合に0.0に近づく値を返します。 dV はブレンドの遷移幅を決定します。dV が非常に小さい場合、ステップ関数に近づきます。

パラメータ:
  • x (numpy.ndarray or float) -- ブレンドの基準となる電圧または汎用的な値。

  • dV (float) -- シグモイド遷移の幅を制御するパラメータ。

戻り値:

x に応じたブレンド係数。0から1の間の値を取ります。

戻り値の型:

numpy.ndarray or float

electrical.pvfit.signed_log10_current(I, eps=1e-15)[ソース]

符号を保持したまま電流を圧縮する補助関数。 sign(I) * log10(abs(I)+eps) を返します。 電流値がゼロに近い場合に計算が不安定になることを防ぐため、abs(I)eps を加えます。

パラメータ:
  • I (numpy.ndarray or float) -- 電流値の配列または単一値。

  • eps (float) -- 絶対値計算時に加算される微小量。ゼロ除算や対数関数の引数が負になるのを防ぐ。

戻り値:

符号を保持したログスケールの電流値。

戻り値の型:

numpy.ndarray or float

electrical.pvfit.smooth_polyfit(y, window_points=5, poly_order=3)[ソース]

Savitzky-Golayフィルターに似た局所多項式フィッティングにより、配列 y を平滑化します。

各データ点に対して、その点と近傍の window_points 数(奇数)のデータ点に poly_order 次の多項式をフィッティングし、中央の点の値を推定します。

パラメータ:
  • y (numpy.ndarray) -- 平滑化するデータ点の配列。

  • window_points (int) -- 各局所フィッティングに使用するウィンドウの点の数(奇数であるべき)。

  • poly_order (int) -- 各局所フィッティングで使用する多項式の次数。

戻り値:

平滑化されたデータ点の配列。

戻り値の型:

numpy.ndarray

electrical.pvfit.solve_root_poly(x, y, target_y=0.0, order=3)[ソース]

データ点 (x, y) に多項式をフィッティングし、指定された target_y に対応する x の根を近似的に見つけます。

データ点数が少ない場合は、線形補間または多項式の次数を調整して対処します。 複数の実根がある場合は、入力 x の平均に最も近い根を選択します。

パラメータ:
  • x (numpy.ndarray) -- 独立変数データ点の配列。

  • y (numpy.ndarray) -- 従属変数データ点の配列。

  • target_y (float) -- 根を見つけたい目標のy値。

  • order (int) -- 多項式フィッティングの次数。

戻り値:

target_y に対応する x の推定根。

戻り値の型:

float

electrical.pvfit.unpack_free_params(p_free, base_params, fix_set)[ソース]

自由パラメータのNumPy配列を、固定パラメータと組み合わせて辞書形式の全パラメータにアンパックします。

base_params は固定パラメータの値を決定するために使用されます。 LOG_PARAMS に含まれるパラメータは 10** 変換されて辞書に格納されます。

パラメータ:
  • p_free (numpy.ndarray) -- 最適化中の自由パラメータのNumPy配列。

  • base_params (dict) -- 固定パラメータの基準値を含む辞書。

  • fix_set (set) -- 固定されたパラメータ名のセット。

戻り値:

更新された全パラメータを含む辞書。

戻り値の型:

dict

electrical.pvfit.used_params_from_modes(forwardIV, reverseIV)[ソース]

指定されたフォワードおよびリバースIVモデルで使用されるパラメータ名を決定します。

共通のパラメータ (Rs, Rsh, IPV) に加えて、 有効な輸送メカニズム (diode, tfe, fn, sclc) に関連するパラメータを特定します。

パラメータ:
  • forwardIV (str) -- フォワードバイアスモデルのメカニズムを示す文字列(例: "diode", "diode+tfe")。

  • reverseIV (str) -- リバースバイアスモデルのメカニズムを示す文字列(例: "diode+tfe", "diode+fn")。

戻り値:

使用されるパラメータ名のセット。

戻り値の型:

set

electrical.pvfit.validate_args(args)[ソース]

コマンドライン引数の有効性を検証します。

モードごとの必須引数、数値引数の範囲、パラメータ名の整合性などをチェックし、 無効な引数が存在する場合は ValueError を発生させます。

パラメータ:

args (argparse.Namespace) -- 解析されたコマンドライン引数を含むオブジェクト。

戻り値:

None

戻り値の型:

None

例外:

ValueError -- 無効な引数が見つかった場合。