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(abs(I))-V を一次近似し、E00 = 1/abs(slope)、

A_tfe = abs(I) * exp(+V/E00) を代表点から推定。

ndiode は固定初期値 1.5。 FN / SCLC の初期値は結果に影響しない極小値。

注意:

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

関連リンク:

pvfit_usage

electrical.pvfit.dual_print(*args, **kwargs)

概要: 標準出力とログファイルの両方にメッセージを出力します。

詳細説明:

組み込みの print 関数をオーバーライドするために使用され、 すべての出力がコンソールと指定されたログファイルの両方に書き込まれます。

引数:
param args:

print関数に渡される可変長引数。

type args:

tuple

param kwargs:

print関数に渡されるキーワード引数。

type kwargs:

dict

戻り値:
returns:

なし

rtype:

None

electrical.pvfit.estimate_errors(res, V, I_meas, temperature, args, base_params, fix_set)

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

詳細説明:

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

引数:
param res:

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

type res:

scipy.optimize.OptimizeResult

param V:

測定された電圧データ点の配列。

type V:

numpy.ndarray

param I_meas:

測定された電流データ点の配列。

type I_meas:

numpy.ndarray

param temperature:

シミュレーションの温度 (K)。

type temperature:

float

param args:

コマンドライン引数パーサーから得られた設定を含むオブジェクト。

type args:

argparse.Namespace

param base_params:

固定パラメータの基準値を含む辞書。

type base_params:

dict

param fix_set:

固定されたパラメータ名のセット。

type fix_set:

set

戻り値:
returns:

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

rtype:

tuple[dict, numpy.ndarray]

electrical.pvfit.estimate_initial_params(V, I_meas, temperature)

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

詳細説明:

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

引数:
param V:

測定された電圧データ点の配列。

type V:

numpy.ndarray

param I_meas:

測定された電流データ点の配列。

type I_meas:

numpy.ndarray

param temperature:

測定時の温度 (K)。

type temperature:

float

戻り値:
returns:

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

rtype:

dict

electrical.pvfit.estimate_voc_local_quadratic(V, I, nlsq_points=5)

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

詳細説明:

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

引数:
param V:

電圧データの配列。

type V:

numpy.ndarray

param I:

電流データの配列。

type I:

numpy.ndarray

param nlsq_points:

局所フィッティングに使用するデータ点の数。

type nlsq_points:

int

戻り値:
returns:

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

rtype:

float

electrical.pvfit.exec_fit(V, I_meas, info, csv_path, params, fix_set, args)

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

詳細説明:

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

引数:
param V:

測定された電圧データ点の配列。

type V:

numpy.ndarray

param I_meas:

測定された電流データ点の配列。

type I_meas:

numpy.ndarray

param info:

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

type info:

dict

param csv_path:

パラメータを保存するCSVファイルのパス。

type csv_path:

pathlib.Path

param params:

初期パラメータ値を含む辞書。

type params:

dict

param fix_set:

固定されるパラメータ名のセット。

type fix_set:

set

param args:

コマンドライン引数パーサーから得られた設定を含むオブジェクト。

type args:

argparse.Namespace

戻り値:
returns:

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

rtype:

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

electrical.pvfit.get_jacobian(p_free, V, temperature, args, base_params, fix_set)

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

詳細説明:

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

引数:
param p_free:

最適化された自由パラメータのNumPy配列。

type p_free:

numpy.ndarray

param V:

測定された電圧データ点の配列。

type V:

numpy.ndarray

param temperature:

シミュレーションの温度 (K)。

type temperature:

float

param args:

コマンドライン引数パーサーから得られた設定を含むオブジェクト。

type args:

argparse.Namespace

param base_params:

固定パラメータの基準値を含む辞書。

type base_params:

dict

param fix_set:

固定されたパラメータ名のセット。

type fix_set:

set

戻り値:
returns:

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

rtype:

numpy.ndarray

electrical.pvfit.initialize()

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

詳細説明:

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

引数:

なし

戻り値:
returns:

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

rtype:

tuple[argparse.Namespace, argparse.ArgumentParser]

electrical.pvfit.initialize_plot(V, I_meas, I_sim, title=None)

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

詳細説明:

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

引数:
param V:

電圧データの配列。

type V:

numpy.ndarray

param I_meas:

測定された電流データの配列。

type I_meas:

numpy.ndarray

param I_sim:

初期シミュレーション電流データの配列。

type I_sim:

numpy.ndarray

param title:

プロットのメインタイトル。Noneの場合、タイトルは設定されない。

type title:

str or None

戻り値:
returns:

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

rtype:

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

electrical.pvfit.j_diode(Vd, I0, ndiode, temperature)

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

引数:
param Vd:

ダイオード接合にかかる電圧。

type Vd:

numpy.ndarray or float

param I0:

逆飽和電流。

type I0:

float

param ndiode:

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

type ndiode:

float

param temperature:

温度 (K)。

type temperature:

float

戻り値:
returns:

ダイオード電流。

rtype:

numpy.ndarray or float

electrical.pvfit.j_fn_forward(Vd, A_fn, B_fn)

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

詳細説明:

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

引数:
param Vd:

ダイオード接合にかかる電圧。

type Vd:

numpy.ndarray or float

param A_fn:

FN電流の振幅係数。

type A_fn:

float

param B_fn:

FN電流の指数関数的電圧依存性を制御する係数。

type B_fn:

float

戻り値:
returns:

FNフォワード電流。

rtype:

numpy.ndarray or float

electrical.pvfit.j_fn_reverse(Vd, A_fn, B_fn)

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

詳細説明:

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

引数:
param Vd:

ダイオード接合にかかる電圧。

type Vd:

numpy.ndarray or float

param A_fn:

FN電流の振幅係数。

type A_fn:

float

param B_fn:

FN電流の指数関数的電圧依存性を制御する係数。

type B_fn:

float

戻り値:
returns:

FNリバース電流。

rtype:

numpy.ndarray or float

electrical.pvfit.j_sclc(Vd, K_sclc)

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

詳細説明:

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

引数:
param Vd:

ダイオード接合にかかる電圧。

type Vd:

numpy.ndarray or float

param K_sclc:

SCLCの振幅係数。

type K_sclc:

float

戻り値:
returns:

SCLC電流。

rtype:

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 に従います。 シグモイド関数を用いて両者間の滑らかな遷移を実現します。

引数:
param Vd:

ダイオード接合にかかる電圧。

type Vd:

numpy.ndarray or float

param K_sclc:

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

type K_sclc:

float

param m_sclc:

トラップ制限領域でのSCLCの電圧依存性指数。

type m_sclc:

float

param Vtfl:

トラップが満たされる閾値電圧。

type Vtfl:

float

param dV:

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

type dV:

float

戻り値:
returns:

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

rtype:

numpy.ndarray or float

electrical.pvfit.j_tfe_forward(Vd, A_tfe, E00)

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

詳細説明:

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

引数:
param Vd:

ダイオード接合にかかる電圧。

type Vd:

numpy.ndarray or float

param A_tfe:

TFE電流の振幅係数。

type A_tfe:

float

param E00:

TFEの特性エネルギーまたは係数。

type E00:

float

戻り値:
returns:

TFEフォワード電流。

rtype:

numpy.ndarray or float

electrical.pvfit.j_tfe_reverse(Vd, A_tfe, E00)

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

詳細説明:

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

引数:
param Vd:

ダイオード接合にかかる電圧。

type Vd:

numpy.ndarray or float

param A_tfe:

TFE電流の振幅係数。

type A_tfe:

float

param E00:

TFEの特性エネルギーまたは係数。

type E00:

float

戻り値:
returns:

TFEリバース電流。

rtype:

numpy.ndarray or float

electrical.pvfit.junction_current_forward(Vd, p, mode_set, temperature)

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

詳細説明:

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

引数:
param Vd:

ダイオード接合にかかる電圧。

type Vd:

numpy.ndarray or float

param p:

パラメータ値を含む辞書。

type p:

dict

param mode_set:

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

type mode_set:

set

param temperature:

温度 (K)。

type temperature:

float

戻り値:
returns:

総接合電流。

rtype:

numpy.ndarray or float

electrical.pvfit.junction_current_reverse(Vd, p, mode_set, temperature)

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

詳細説明:

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

引数:
param Vd:

ダイオード接合にかかる電圧。

type Vd:

numpy.ndarray or float

param p:

パラメータ値を含む辞書。

type p:

dict

param mode_set:

リバースバイアスで使用するメカニズムのセット。

type mode_set:

set

param temperature:

温度 (K)。

type temperature:

float

戻り値:
returns:

総接合電流。

rtype:

numpy.ndarray or float

electrical.pvfit.load_param_csv(csv_path)

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

詳細説明:

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

引数:
param csv_path:

読み込むCSVファイルのパス。

type csv_path:

str

戻り値:
returns:

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

rtype:

tuple[dict, set]

electrical.pvfit.local_poly_value(x, y, x0, npts=7, order=3)

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

詳細説明:

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

引数:
param x:

独立変数データ点の配列。

type x:

numpy.ndarray

param y:

従属変数データ点の配列。

type y:

numpy.ndarray

param x0:

y値を推定したい目標のx値。

type x0:

float

param npts:

局所フィッティングに使用するデータ点の数。

type npts:

int

param order:

多項式フィッティングの次数。

type order:

int

戻り値:
returns:

x0 における推定y値。

rtype:

float

electrical.pvfit.main()

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

詳細説明:

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

引数:

なし

戻り値:
returns:

なし

rtype:

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付近でスムーズにブレンドされます。

引数:
param V:

外部印加電圧の配列。

type V:

numpy.ndarray

param p:

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

type p:

dict

param forwardIV:

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

type forwardIV:

str

param reverseIV:

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

type reverseIV:

str

param dV:

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

type dV:

float

param temperature:

シミュレーションの温度 (K)。

type temperature:

float

戻り値:
returns:

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

rtype:

numpy.ndarray

electrical.pvfit.objective(p_free, V, I_meas, args, base_params, fix_set)

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

詳細説明:

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

引数:
param p_free:

最適化中の自由パラメータのNumPy配列。

type p_free:

numpy.ndarray

param V:

測定された電圧データ点の配列。

type V:

numpy.ndarray

param I_meas:

測定された電流データ点の配列。

type I_meas:

numpy.ndarray

param args:

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

type args:

argparse.Namespace

param base_params:

固定パラメータの基準値を含む辞書。

type base_params:

dict

param fix_set:

固定されたパラメータ名のセット。

type fix_set:

set

戻り値:
returns:

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

rtype:

float

electrical.pvfit.pack_free_params(params, fix_set)

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

詳細説明:

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

引数:
param params:

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

type params:

dict

param fix_set:

固定されるパラメータ名のセット。

type fix_set:

set

戻り値:
returns:

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

rtype:

numpy.ndarray

electrical.pvfit.parse_mech_mode(mode_str)

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

詳細説明:

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

引数:
param mode_str:

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

type mode_str:

str or None

戻り値:
returns:

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

rtype:

set

例外:
raises 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 が提供された場合、モデル電流の信頼区間を水色領域で表示します。

引数:
param fig:

プロットに使うmatplotlib.figure.Figureオブジェクト。Noneの場合、新しいFigureを作成。

type fig:

matplotlib.figure.Figure or None

param axes:

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

type axes:

numpy.ndarray or None

param V:

プロットする電圧データの配列。

type V:

numpy.ndarray

param I_meas:

測定された電流データの配列。Noneの場合、測定データはプロットされない。

type I_meas:

numpy.ndarray or None

param I_start:

初期モデルによって計算された電流データの配列。Noneの場合、初期モデルはプロットされない。

type I_start:

numpy.ndarray or None

param I_final:

最終モデルによって計算された電流データの配列。

type I_final:

numpy.ndarray

param info:

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

type info:

dict

param mode:

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

type mode:

str

param sigma_log:

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

type sigma_log:

numpy.ndarray or None

param mode_label:

プロットのタイトルに追加するモードのラベル。

type mode_label:

str

param outfile:

プロットを保存するファイルパス。Noneの場合、保存しない。

type outfile:

str or None

param pause:

プロットを表示後に一時停止するかどうか。Trueの場合、ユーザーのキー入力を待つ。

type pause:

bool

戻り値:
returns:

なし

rtype:

None

electrical.pvfit.print_args_and_derived(args)

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

詳細説明:

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

引数:
param args:

解析されたコマンドライン引数を含むオブジェクト。

type args:

argparse.Namespace

戻り値:
returns:

なし

rtype:

None

electrical.pvfit.print_parameter_repeat(params, fix_set, used, auto_fixed, title='')

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

詳細説明:

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

引数:
param params:

最終的なパラメータ値を含む辞書。

type params:

dict

param fix_set:

固定されるパラメータ名のセット。

type fix_set:

set

param used:

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

type used:

set

param auto_fixed:

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

type auto_fixed:

set

param title:

出力の前に表示されるタイトル文字列。

type title:

str

戻り値:
returns:

なし

rtype:

None

electrical.pvfit.read_data(infile, xmin=None, xmax=None, ndataskip=0)

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

詳細説明:

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

引数:
param infile:

入力IV CSVファイルのパス。

type infile:

str

param xmin:

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

type xmin:

float or None

param xmax:

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

type xmax:

float or None

param ndataskip:

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

type ndataskip:

int

戻り値:
returns:

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

rtype:

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

例外:
raises ValueError:

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

electrical.pvfit.same_sign(a, b)

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

詳細説明:

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

引数:
param a:

1つ目の数値。

type a:

float

param b:

2つ目の数値。

type b:

float

戻り値:
returns:

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

rtype:

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ファイルに保存します。

詳細説明:

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

引数:
param outfile_xlsx:

出力するExcelファイルのパス。

type outfile_xlsx:

str

param V:

電圧データのNumPy配列。

type V:

numpy.ndarray

param I_input:

測定された電流データのNumPy配列。Noneの場合、保存しない。

type I_input:

numpy.ndarray or None

param I_init:

初期モデルによって計算された電流データのNumPy配列。Noneの場合、保存しない。

type I_init:

numpy.ndarray or None

param I_fit:

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

type I_fit:

numpy.ndarray or None

param info:

ファイル名や記録時間などの情報を含む辞書。

type info:

dict

param params_init:

初期パラメータ値を含む辞書。Noneの場合、保存しない。

type params_init:

dict or None

param params_final:

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

type params_final:

dict or None

param rss:

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

type rss:

float or None

param errors:

各パラメータの推定誤差を含む辞書。Noneの場合、保存しない。

type errors:

dict or None

戻り値:
returns:

なし

rtype:

None

electrical.pvfit.save_param_csv(csv_path, params, fix_set, errors=None, rss=None)

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

詳細説明:

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

引数:
param csv_path:

保存するCSVファイルのパス。

type csv_path:

str

param params:

保存するパラメータ名と値の辞書。

type params:

dict

param fix_set:

固定されたパラメータ名のセット。

type fix_set:

set

param errors:

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

type errors:

dict or None

param rss:

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

type rss:

float or None

戻り値:
returns:

なし

rtype:

None

electrical.pvfit.setup_parameters(params, args, csv_fix, args_fix, forwardIV, reverseIV)

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

詳細説明:

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

引数:
param params:

現在のパラメータ値を含む辞書。

type params:

dict

param args:

解析されたコマンドライン引数を含むオブジェクト。

type args:

argparse.Namespace

param csv_fix:

CSVファイルで固定されたパラメータ名のセット。

type csv_fix:

set

param args_fix:

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

type args_fix:

list

param forwardIV:

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

type forwardIV:

str

param reverseIV:

リバースバイアスモデルのメカニズムを示す文字列。

type reverseIV:

str

戻り値:
returns:

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

rtype:

tuple[dict, set, set, set]

例外:
raises ValueError:

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

electrical.pvfit.sigmoid_blend(x, dV)

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

詳細説明:

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

引数:
param x:

ブレンドの基準となる電圧または汎用的な値。

type x:

numpy.ndarray or float

param dV:

シグモイド遷移の幅を制御するパラメータ。

type dV:

float

戻り値:
returns:

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

rtype:

numpy.ndarray or float

electrical.pvfit.signed_log10_current(I, eps=1e-15)

概要: 符号を保持したまま電流を圧縮する補助関数。

詳細説明:

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

引数:
param I:

電流値の配列または単一値。

type I:

numpy.ndarray or float

param eps:

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

type eps:

float

戻り値:
returns:

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

rtype:

numpy.ndarray or float

electrical.pvfit.smooth_polyfit(y, window_points=5, poly_order=3)

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

詳細説明:

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

引数:
param y:

平滑化するデータ点の配列。

type y:

numpy.ndarray

param window_points:

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

type window_points:

int

param poly_order:

各局所フィッティングで使用する多項式の次数。

type poly_order:

int

戻り値:
returns:

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

rtype:

numpy.ndarray

electrical.pvfit.solve_root_poly(x, y, target_y=0.0, order=3)

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

詳細説明:

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

引数:
param x:

独立変数データ点の配列。

type x:

numpy.ndarray

param y:

従属変数データ点の配列。

type y:

numpy.ndarray

param target_y:

根を見つけたい目標のy値。

type target_y:

float

param order:

多項式フィッティングの次数。

type order:

int

戻り値:
returns:

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

rtype:

float

electrical.pvfit.unpack_free_params(p_free, base_params, fix_set)

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

詳細説明:

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

引数:
param p_free:

最適化中の自由パラメータのNumPy配列。

type p_free:

numpy.ndarray

param base_params:

固定パラメータの基準値を含む辞書。

type base_params:

dict

param fix_set:

固定されたパラメータ名のセット。

type fix_set:

set

戻り値:
returns:

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

rtype:

dict

electrical.pvfit.used_params_from_modes(forwardIV, reverseIV)

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

詳細説明:

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

引数:
param forwardIV:

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

type forwardIV:

str

param reverseIV:

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

type reverseIV:

str

戻り値:
returns:

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

rtype:

set

electrical.pvfit.validate_args(args)

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

詳細説明:

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

引数:
param args:

解析されたコマンドライン引数を含むオブジェクト。

type args:

argparse.Namespace

戻り値:
returns:

なし

rtype:

None

例外:
raises ValueError:

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