pvanalyze.py ドキュメント
1. プログラム概要
pvanalyze.py は、太陽電池デバイスの IV 特性および光学スペクトルを解析するための Python スクリプトです。主に以下の処理を行います。
反射率スペクトル
Rと透過率スペクトルTrから、吸収率Aと吸収係数 \(\alpha\) を計算する。暗状態 IV と光照射 IV から、単一ダイオードモデル相当の代表パラメータ
I0,ndiode,IPV,Rs,Rshを経験的に抽出する。光照射 IV から、\(V_{oc}\), \(J_{sc}\), 最大出力点、FF、変換効率を計算する。
吸収係数とフォトンフラックスから EQE / IQE を計算する。
解析結果をログファイル、PNG プロット、必要に応じて Excel ファイルに保存する。
このスクリプトは、非線形最小二乗フィットで単一ダイオードモデルを厳密に最適化するものではありません。コード上では、局所多項式平滑化、接線推定、微分、ゼロクロス補間を用いて、IV 曲線から代表パラメータを抽出します。
2. 実行モード
analyze
暗状態 IV と光照射 IV を読み込み、IV パラメータ、発電特性、量子効率を計算します。
主な処理は次の順です。
コマンドライン引数を読み込む。
入射光条件からフォトンエネルギー \(E\) とパワー密度 \(P_0\) を決定する。
暗状態 IV CSV と光照射 IV CSV を読み込む。
指定されたスイープ番号を選択する。
暗状態 IV から
I0,ndiode,Rs,Rshなどを推定する。光照射 IV から
IPVなどを推定する。光照射 IV から \(V_{oc}\), \(J_{sc}\), FF, \(P_{max}\) を計算する。
--alphaで指定された Excel から吸収係数を読み込む。EQE / IQE を計算する。
ログと IV 比較プロットを保存する。
alpha
反射率・透過率スペクトルから吸収係数を計算し、プロットのみを保存します。Excel 保存は行いません。
make_alpha
alpha と同じ計算を行い、さらに吸収スペクトルを Excel に保存します。
3. 必要ライブラリ
標準ライブラリ
sysargparsebuiltinspathlibtracebackcsvmath
非標準ライブラリ
numpymatplotlibopenpyxl
インストール例:
pip install numpy matplotlib openpyxl
4. グローバル定数
変数名 |
値 |
意味 |
|---|---|---|
|
\(1.380649 \times 10^{-23}\) |
ボルツマン定数 J/K |
|
\(1.602176634 \times 10^{-19}\) |
電気素量 C |
|
\(6.62607015 \times 10^{-34}\) |
プランク定数 J s |
|
\(2.99792458 \times 10^8\) |
光速 m/s |
|
|
抽出対象のIVパラメータ |
|
\(1.0 \times 10^{-15}\) |
対数計算時に加える微小電流 |
|
46.837 |
既定のPV層膜厚 nm |
|
\(0.5 \times 0.5 \times \pi\) |
電極面積 mm\(^2\) |
|
|
電極面積 cm\(^2\) |
|
\(1.95804 \times 10^{18}\) |
既定フォトンフラックス cm\(^{-2}\) s\(^{-1}\) |
|
1363.0 |
既定フォトン波長 nm |
|
空文字 |
入射光パワー密度の既定値 |
|
16 |
プロット用フォントサイズ |
5. 入力ファイル
IV CSV ファイル
read_data() は以下の形式を想定します。
MetaData行があり、RecordTimeを含む場合は記録時刻として保存する。DataName行以降をデータ領域とみなす。DataValue行の2列目を電圧、3列目を電流として読み取る。
概念的な形式:
MetaData,RecordTime,2026-03-24 14:15:24
DataName,Voltage,Current
DataValue,0.000,-1.0e-6
DataValue,0.010,-9.8e-7
読み込んだ IV データは、電圧の増減方向が反転した点で複数スイープに分割されます。--sweep_dark と --sweep_light で、どのスイープを解析するかを指定します。
光学スペクトルファイル
read_optical_spectrum() は、テキストファイルから数値2列を抽出します。
1列目: 波長 nm
2列目: 反射率または透過率の値
タブ区切り、空白区切り、カンマ区切りに近い形式をある程度許容します。文字コードは cp932, utf-8-sig, utf-8, latin1 の順で読み込みを試行します。
吸収係数 Excel ファイル
read_alpha_from_excel() は、alpha_spectrum シートを持つ Excel ファイルを想定します。このシートは save_alpha_to_excel() で生成される形式です。
列 |
内容 |
|---|---|
|
フォトンエネルギー eV |
|
波長 nm |
|
反射率 0から1 |
|
透過率 0から1 |
|
吸収率 0から1 |
|
吸収係数 cm\(^{-1}\) |
6. 出力ファイル
モード |
出力ファイル |
内容 |
|---|---|---|
|
|
標準出力と同じ解析ログ |
|
|
暗状態・光照射 IV、接線、 |
|
|
光学解析ログ |
|
|
\(\alpha(E)\) プロット |
|
|
光学解析ログ |
|
|
\(\alpha(E)\) プロット |
|
|
吸収スペクトル Excel |
analyze モードでは Excel 出力は実装されていません。
7. 電気特性モデルと抽出パラメータ
このコードが抽出する主な IV パラメータは、単一ダイオードモデルで使われる以下の量です。
パラメータ |
意味 |
単位 |
|---|---|---|
|
逆方向飽和電流の代表値 |
A |
|
ダイオード理想因子 |
無次元 |
|
光生成電流の代表値 |
A |
|
直列抵抗 |
\(\Omega\) |
|
並列抵抗 |
\(\Omega\) |
一般的な単一ダイオードモデルは、例えば次の暗黙式で表されます。
ここで、\(q\) は電気素量、\(k_B\) はボルツマン定数、\(T\) は温度、\(n\) は ndiode です。
ただし、pvanalyze.py の中では、この式を数値的に解いてフィッティングする処理は確認できません。実装されているのは、測定 IV 曲線から上記パラメータに対応する代表値を抽出する処理です。
8. パラメータ抽出の数式
8.1 前処理: 重複電圧の平均化
同じ電圧値 \(x\) が複数存在する場合、対応する電流値を平均化します。
コードでは、\(|V_i - V_j| < 10^{-15}\) 程度を同一電圧として扱います。
8.2 局所多項式平滑化
smooth_polyfit() は Savitzky-Golay 風の局所多項式平滑化を行います。各点 \(i\) の近傍ウィンドウに対して、局所座標 \(u = j - i\) を用い、多項式
を最小二乗で当てはめます。
平滑化後の値は中心点での値として
で与えられます。
既定では、ウィンドウ点数は5、次数は3です。
8.3 局所多項式補間
local_poly_value() は、指定点 \(x_0\) に近い npts 点を選び、多項式
を当てはめ、\(p(x_0)\) を返します。
この処理は、\(I(V=0)\) や \(J(V=0)\) の推定に使われます。
8.4 直列抵抗 Rs の抽出
estimate_rs_tangent_point() は、順方向バイアス側で微分係数 \(dI/dV\) が最大となる点を探します。
平滑化電流を \(I_{sm}(V)\) とすると、数値微分は
です。
順方向領域 \(V_i > 0\) から候補点を選び、端点の影響を避けるため一部を除外した上で、
を代表点とします。
代表点近傍の7点に対して局所直線
を最小二乗で当てはめます。
直列抵抗は
として計算されます。estimate_initial_params() では最終的に
が使われます。
代表点電圧・電流は
です。
8.5 並列抵抗 Rsh の抽出
estimate_rsh_tangent_point() は、逆方向バイアス側 \(V < 0\) で \(|dI/dV|\) が最小となる点を選びます。
逆方向データが無い場合は、全体から \(|dI/dV|\) が最小の点を使います。
代表点近傍の7点に対して、まず局所直線
を当てはめます。
コードでは、傾きを正値として扱うため
とします。代表点
における元の直線上の電流は
です。正の傾き \(a_{sh}\) を持ちながら代表点を通る切片は
となります。
したがって、コード上のシャント代表電流は
です。
並列抵抗は
で計算され、estimate_initial_params() では
が使われます。
ログ表示される Ish(0) は、この補正後直線の切片
です。
8.6 逆方向飽和電流 I0 の抽出
estimate_initial_params() では、I0 をシャント代表電流の絶対値として定義しています。
これは厳密な Shockley 式の切片フィットではなく、コード上の経験的な代表値です。
8.7 光生成電流 IPV の抽出
光照射 IV では、平滑化された電流 \(I_{sm}(V)\) から \(V=0\) の電流を局所多項式で推定し、その符号を反転して IPV とします。
暗状態 IV については、いったん同じ方法で推定した後、exec_analyze() 内で
に上書きされます。
8.8 ダイオード理想因子 ndiode の抽出
estimate_ndiode_representative_point() は、順方向領域の対数電流から ndiode を推定します。
まず、以下の条件を満たすデータを使います。
電流の対数を
とします。ここで
です。
L(V) を局所多項式で平滑化して \(L_{sm}(V)\) を作り、一次微分と二次微分を数値的に計算します。
有効点は
かつ微分値が有限な点です。その中から、対数電流が最も直線的な点、つまり二次微分の絶対値が最小となる点を代表点とします。
代表点での傾きを
とすると、Shockley 型の近似
から
です。したがってコードでは
として ndiode を計算します。
有効な ndiode が得られない場合、コードは警告を表示し、代替値として
を使います。この値は物理的な推定値ではなく、失敗時のフォールバックです。
8.9 ndiode(V) 曲線
estimate_ndiode_curve() は、暗状態 IV に対して各電圧点での局所的な理想因子を計算します。
使用条件は
です。
有限かつ正の値のみがプロットされます。
9. 発電特性の数式
pv_metrics_from_iv() は、光照射 IV から以下を計算します。
電流密度
電極面積を \(S\) cm\(^2\) とすると、
です。
短絡電流密度
local_poly_value() により \(V=0\) の電流密度を推定します。
コードでは符号をそのまま保持します。プロットでは発電出力の表示に \(-J\) を使います。
開放電圧
zero_crossing_x() は、電流がゼロを横切る電圧を線形補間で求めます。隣接点 \((V_1,I_1)\) と \((V_2,I_2)\) の間で符号が変わる場合、
です。ゼロクロスが無い場合は、\(|I|\) が最小の電圧を返します。
発電出力密度
発電向きの出力密度は
です。
最大出力点は
です。
フィルファクター
分母が極端に小さい場合は nan になります。
変換効率
入射光パワー密度を \(P_0\) W/cm\(^2\) とすると、
です。
10. 光学解析の数式
フォトンエネルギー
compute_photon_energy_eV() は、--E が正ならその値を使い、そうでなければ波長から計算します。
入射光パワー密度
compute_p0() は、フォトンフラックス \(F_0\) が正の場合に
を計算します。ここで \(E\) は eV 単位の数値、\(q\) は電気素量です。eV と C の積は J に対応するため、\(P_0\) は W/cm\(^2\) になります。
反射率・透過率・吸収率
analyze_optical() は、反射率と透過率をパーセントから 0から1 の値に変換します。
吸収率は
です。コードでは 0から1 の範囲にクリップされます。
吸収係数
膜厚を \(d\) nm とすると、cm 単位では
です。
透過率を、表面反射後の透過として
とみなすと、
となります。
コードでは、ゼロ割や対数の問題を避けるため、\(1-R\) と \(T_r/(1-R)\) を下限値でクリップします。
エネルギー指定での吸収係数
alpha_at_energy() は、保存済み光学データから
を計算し、エネルギー軸上で \(\alpha(E)\) を線形補間します。
吸収係数からの吸収率
absorptance_from_alpha() は、指定エネルギーでの吸収係数 \(\alpha\) と膜厚から
を計算します。
11. 量子効率の数式
quantum_efficiencies() は、入射フォトンフラックス \(F_0\)、吸収率 \(A\)、光生成電流密度 \(J_{PV}\)、短絡電流密度 \(J_{sc}\) を使います。
光生成電流密度は
です。
生成外部量子効率は
です。
生成内部量子効率は
です。
短絡電流に基づく外部量子効率は
です。
短絡電流に基づく内部量子効率は
です。
\(F_0\) が未指定または0以下の場合は、すべて nan になります。\(A\) が無効または0以下の場合、IQE 系は nan になります。
12. コマンドライン引数
引数 |
型 |
デフォルト |
意味 |
|---|---|---|---|
|
str |
analyze |
実行モード。 |
|
str |
|
暗状態IV CSV。 |
|
str |
|
光照射IV CSV。 |
|
str |
|
反射率スペクトルファイル。 |
|
str |
|
透過率スペクトルファイル。 |
|
str |
None |
等価スペクトル照度ファイル用の引数。ただしコード内では実処理に未使用。 |
|
str |
|
吸収係数Excel。 |
|
float |
300.0 |
温度 K。 |
|
float |
46.837 |
PV層膜厚 nm。吸収率計算に使用。 |
|
int |
0 |
暗状態IVのスイープ選択インデックス。 |
|
int |
0 |
光照射IVのスイープ選択インデックス。 |
|
float |
1.95804e18 |
入射フォトンフラックス cm^-2 s^-1。 |
|
str |
空文字 |
入射光パワー密度 W/cm^2。空文字なら |
|
float |
0.0 |
フォトンエネルギー eV。0なら波長から計算。 |
|
float |
1363.0 |
フォトン波長 nm。 |
|
float |
AREA_CM2 |
電極面積 cm^2。既定値は約0.0078539816 cm^2。 |
|
str |
pvanalyze |
出力ファイル接頭辞。 |
13. Usage
IV解析
python pvanalyze.py --mode analyze --dark dark.csv --light light.csv --alpha alpha.xlsx --outprefix result
この実行では、以下が行われます。
dark.csvとlight.csvを IV データとして読み込む。alpha.xlsxのalpha_spectrumシートから吸収係数を読み込む。IV パラメータ、PV性能、量子効率を標準出力と
result_analyze.txtに出力する。result_iv.pngを保存する。
吸収係数 Excel の作成
python pvanalyze.py --mode make_alpha --R reflectance.txt --Tr transmittance.txt --d 46.837 --outprefix result
この実行では、以下が行われます。
reflectance.txtとtransmittance.txtからスペクトルを読み込む。\(A = 1 - R - T_r\) と \(\alpha\) を計算する。
result_alpha.xlsxを保存する。result_alpha_E.pngを保存する。ログを
result_alpha.txtに保存する。
プロットのみ作成
python pvanalyze.py --mode alpha --R reflectance.txt --Tr transmittance.txt --outprefix result
この場合、result_alpha_E.png は保存されますが、Excel は保存されません。
14. 具体的な実行例
例1: 1363 nm の単色光として解析
python pvanalyze.py --mode analyze --dark dark.csv --light light.csv --alpha result_alpha.xlsx --lambda_nm 1363 --F0 1.95804e18 --S 0.0078539816 --outprefix sample
この場合、フォトンエネルギーは
として計算されます。
入射光パワー密度は
で計算され、変換効率は
として求められます。
例2: 直接パワー密度を使いたい場合
コード構造上、compute_p0() は \(F_0 > 0\) の場合に F0 を優先します。--P0 を直接使いたい場合は、--F0 0 を併用する運用が安全です。
python pvanalyze.py --mode analyze --dark dark.csv --light light.csv --alpha "" --F0 0 --P0 0.001 --outprefix sample_p0
この例では、吸収係数 Excel を使わず、入射光パワー密度 \(P_0 = 0.001\) W/cm\(^2\) として解析する意図になります。ただし、F0=0 のため EQE / IQE は nan になります。
15. 関数一覧
関数名 |
行 |
概要 |
|---|---|---|
|
62-97 |
コマンドライン引数を解析し、プログラムの初期設定を行います。 |
|
100-177 |
解析されたコマンドライン引数と派生値を標準出力に表示します。 |
|
180-278 |
指定されたCSVファイルからI-Vデータを読み込みます。 |
|
281-336 |
Excelファイルから吸収スペクトル(alpha)データを読み込みます。 |
|
339-417 |
指定されたテキストファイルから光学スペクトルデータ(反射率Rまたは透過率T)を読み込みます。 |
|
420-443 |
複数のスイープデータから指定されたインデックスの単一スイープを選択します。 |
|
446-479 |
X軸に重複する値がある場合、Y軸の対応する値を平均して重複を解消します。 |
|
482-534 |
多項式フィッティングを用いたSavitzky-Golay風の平滑化をデータに適用します。 |
|
537-567 |
指定されたX座標の周囲のデータポイントを使用して、局所的な多項式フィッティングを行い、 |
|
570-598 |
Y値がゼロを横切るX座標を線形補間によって見つけます。 |
|
601-619 |
参照波長スケール上のデータをターゲット波長スケールに線形補間します。 |
|
622-640 |
フォトンエネルギー(eV)を計算します。 |
|
643-666 |
入射フォトンエネルギー密度(P0)を計算します。 |
|
669-719 |
I-Vデータから太陽電池の主要な性能指標(Voc, Jsc, FF, Pmaxなど)を計算します。 |
|
722-751 |
指定された中心インデックスの周囲のデータポイントを用いて局所的な線形フィッティングを行います。 |
|
754-796 |
I-V曲線から直列抵抗(Rs)を推定するための接点と抵抗値を計算します。 |
|
799-847 |
I-V曲線から並列抵抗(Rsh)を推定するための接点と抵抗値を計算します。 |
|
850-904 |
I-V曲線からダイオード因子(ndiode)を推定するための代表点と値を計算します。 |
|
907-972 |
I-Vデータから単一ダイオードモデルの初期パラメータ(I0, ndiode, IPV, Rs, Rsh)を推定します。 |
|
975-1019 |
反射率(R)と透過率(T)のスペクトルデータから吸収率(A)と吸収係数(α)を計算します。 |
|
1022-1058 |
量子効率(EQEとIQE)を計算します。 |
|
1061-1090 |
指定されたフォトンエネルギーにおける吸収係数(α)を光学スペクトルデータから補間して取得します。 |
|
1092-1112 |
吸収係数と膜厚から吸収率を計算します。 |
|
1115-1183 |
吸収スペクトルデータをExcelファイルに保存します。 |
|
1186-1226 |
吸収係数スペクトル(α vs フォトンエネルギー)をプロットします。 |
|
1229-1266 |
I-Vデータから電圧に対するダイオード因子(ndiode)の曲線を推定します。 |
|
1269-1449 |
暗電流I-Vおよび光照射I-Vデータと、関連する推定値や解析結果を比較プロットします。 |
|
1452-1494 |
alphaまたはmake_alphaモードでプログラムを実行するメイン関数。 |
|
1497-1618 |
analyzeモードでプログラムを実行するメイン関数。 |
|
1623-1644 |
標準出力とログファイルの両方にメッセージを出力します。 |
|
1646-1679 |
プログラムのエントリーポイント。 |
16. 主要関数の詳細
initialize()
コマンドライン引数を定義し、argparse.ArgumentParser により解析します。戻り値は (args, parser) です。
print_args_and_derived(args, E_use=None, P0_use=None)
入力引数を表示し、analyze モードでは妥当性チェックも行います。
主な検証内容:
lambda_nm > 0E >= 0F0 > 0ただしP0が空文字の場合P0 > 0ただしP0が直接指定された場合T > 0S > 0d > 0.1
この関数は args.E と args.P0 を更新する副作用を持ちます。
read_data(infile, xmin=None, xmax=None, ndataskip=0)
IV CSV を読み込み、電圧方向の反転ごとにスイープを分割します。戻り値は (xs_list, ys_list, inf) です。
xmin, xmax, ndataskip は関数引数として存在しますが、現在の CLI からは直接指定されていません。
read_optical_spectrum(infile)
光学スペクトルを読み込み、波長順にソートして返します。重複波長は最初に出現した値を採用します。
analyze_optical(wl_R_nm, R_percent, wl_T_nm, T_percent, d_nm)
R/T スペクトルを共通波長に補間し、\(A\) と \(\alpha\) を計算します。
estimate_initial_params(V, I_meas, T=300.0)
IV 曲線から I0, ndiode, IPV, Rs, Rsh を抽出します。実装上は、以下の補助関数を組み合わせています。
estimate_rs_tangent_point()estimate_rsh_tangent_point()estimate_ndiode_representative_point()local_poly_value()
pv_metrics_from_iv(V, I, S)
\(V_{oc}\), \(J_{sc}\), \(V_{op}\), \(J_{op}\), \(P_{max}\), FF を計算します。
quantum_efficiencies(F0, A_abs, JPV_A_cm2, Jsc_A_cm2)
EQE / IQE を計算します。吸収率 A_abs がない場合、IQE 系は nan になります。
plot_iv_comparison(...)
以下の4つのサブプロットを持つ図を作成します。
log10(abs(I))-Vforward / reverse 分離の線形 J-V
ndiode(V)PV 出力曲線 \(-J\) vs \(V\)
main()
if __name__ == "__main__": から呼ばれるエントリーポイントです。ログファイルを開き、print を dual_print() に差し替え、指定モードに応じて exec_alpha() または exec_analyze() を実行します。
17. クラス一覧
このスクリプトにはクラス定義はありません。
18. ライブラリとしての利用
pvanalyze.py はスクリプトとしての利用を想定していますが、関数は通常の Python モジュールとして import できます。
import pvanalyze
metrics = pvanalyze.pv_metrics_from_iv(V, I, S)
または
from pvanalyze import analyze_optical, estimate_initial_params
ただし、公開 API として安定化されたインターフェースはコード上では定義されていません。関数をライブラリとして利用する場合は、引数形式や戻り値の変更に注意してください。
19. main script として実行した場合
ファイル末尾に if __name__ == "__main__": があり、直接実行すると main() が呼び出されます。
main() は次を行います。
initialize()で CLI 引数を解析する。ログファイル名を決める。
builtins.printをdual_print()に置き換える。modeに応じて処理を分岐する。例外発生時は traceback を表示して終了コード1で終了する。
最後にログファイルを閉じる。
20. 注意点・制限事項
非線形フィットではない
pvanalyze.py は I0, ndiode, IPV, Rs, Rsh を抽出しますが、単一ダイオード方程式を使った非線形最適化は行っていません。抽出値は測定曲線の局所的特徴から得た代表値です。
I0 の意味
I0 = |Ish| として定義されており、厳密な逆方向飽和電流の物理フィット値ではありません。
Rsh 抽出点
コードは逆方向領域で \(|dI/dV|\) が最小の点を選びます。一般的な「逆方向で傾きが大きい点」や「0V近傍の微分抵抗」とは異なる場合があります。
ndiode の失敗時フォールバック
ndiode が求まらない場合、1000.0 が設定されます。この値は警告文にもある通り、参照すべき物理値ではありません。
--eq は未使用
--eq 引数は定義されていますが、コード中で解析には使われていません。
--P0 と --F0 の優先関係
compute_p0() は F0 > 0 の場合に F0 由来の \(P_0\) を返します。--P0 を明示的に使いたい場合は、--F0 0 を併用する必要があります。ただし、その場合 EQE / IQE は F0 <= 0 のため nan になります。
--alpha の既定値
analyze モードでは、既定で ALPHA_FILE を読み込もうとします。吸収係数ファイルを使わない場合は、実行環境に応じて空文字を指定する必要があります。
対話停止
exec_alpha() と exec_analyze() の最後に input("Press ENTER to terminate") があるため、バッチ実行では標準入力が必要です。
吸収係数の前提
吸収係数の式は
を仮定しています。多重反射、干渉、散乱、基板吸収などは明示的には扱っていません。
データ点数とノイズ
局所多項式平滑化・微分・接線推定は、データ点数が少ない場合やノイズが大きい場合に不安定になります。特に ndiode は \(\ln |I|\) の微分を使うため、ゼロ近傍や符号反転付近では注意が必要です。
21. 解析結果の読み方
analyze モードの標準出力には、主に以下のブロックが表示されます。
Device constants
膜厚、電極面積、温度を表示します。
Photon input
波長、フォトンエネルギー、フォトンフラックス、入射光パワー密度を表示します。
Dark IV estimated parameters
暗状態 IV から抽出した I0, ndiode, IPV, Rs, Rsh を表示します。暗状態では IPV は 0 に上書きされます。
また、Vs, Is, Vsh, Ish, Ish(0) も表示されます。
Illuminated IV estimated parameters
光照射 IV から抽出した I0, ndiode, IPV, Rs, Rsh を表示します。
Photovoltaic metrics
\(V_{oc}\), \(J_{sc}\), \(V_{op}\), \(J_{op}\), FF, \(P_{max}\), Efficiency を表示します。
Optical metrics
吸収係数 Excel が読み込めた場合、指定エネルギーでの \(\alpha(E)\) と \(A(E)\) を表示します。
Quantum efficiencies
JPV, EQE_gen, IQE_gen, EQE, IQE を表示します。
22. まとめ
pvanalyze.py は、IV 測定と光学スペクトルを組み合わせて、太陽電池の代表的な電気・光学指標を素早く算出する解析スクリプトです。特に、局所接線に基づく Rs / Rsh、対数電流微分に基づく ndiode、ゼロ電圧近傍の局所多項式に基づく IPV の抽出式が実装上の中心です。
一方で、単一ダイオードモデル全体を最小二乗で最適化する処理はコードからは確認できません。そのため、得られるパラメータはフィット済み物理定数というよりも、測定曲線の特徴量から得た初期推定値または代表値として解釈するのが適切です。