pvfit プログラム仕様
一ダイオードモデル(SDM)を用いた太陽電池IV特性のフィッティングツール。
このスクリプトは、測定された電流-電圧(IV)特性データに対し、 一ダイオードモデルに基づいてフィッティングを行い、モデルパラメータを抽出します。 初期パラメータの推定、最適化、結果の保存、およびIV曲線のプロット機能を提供します。
関連リンク: pvfit.py 技術ドキュメント
- pvfit.estimate_errors(res, V, I_meas, temp, base_params, fix_set)[ソース]
非線形最小二乗法で得られた結果に基づき、パラメータの誤差とモデル曲線の標準偏差を推定します。
フィッティング結果(res)とヤコビ行列を用いて、線形近似に基づいた共分散行列を計算します。 この共分散行列から、各パラメータの標準誤差と、モデル曲線自体の信頼性区間を推定します。 np.linalg.pinv を使用することで、数値的に不安定な場合でも計算を継続します。
- パラメータ:
- 戻り値:
errors_dict (dict): 各自由パラメータの推定誤差の辞書。
sigma_log_I (np.ndarray): モデル曲線の対数スケールでの標準偏差。
- 戻り値の型:
- pvfit.get_initial_params(V, I_meas, args, csv_path)[ソース]
フィッティングのための初期パラメータを生成または既存のCSVファイルから読み込みます。
--mode init が指定されている場合、IV曲線の特徴から初期パラメータを推定します。 それ以外の場合、既存のパラメータCSVファイルから読み込みます。 コマンドライン引数で明示的に指定されたパラメータは、常に読み込み値や推定値を上書きします。
- パラメータ:
V (np.ndarray) -- 測定された電圧データ。
I_meas (np.ndarray) -- 測定された電流データ。
args (argparse.Namespace) -- コマンドライン引数を格納したargparse.Namespaceオブジェクト。
csv_path (str) -- 初期パラメータを読み書きするCSVファイルのパス。
- 戻り値:
params (dict): 初期パラメータ名とその値の辞書。
csv_fix (set): CSVファイルで固定として指定されたパラメータ名のセット。
- 戻り値の型:
- pvfit.get_jacobian(p_free, V, temp, base_params, fix_set)[ソース]
モデルの対数電流に対するヤコビ行列を数値的に計算します。
ヤコビ行列は、各自由パラメータに関するモデル出力(対数電流)の偏微分を近似したものです。 有限差分法を用いて計算され、誤差推定に使用されます。
- pvfit.load_param_csv(csv_path)[ソース]
指定されたCSVファイルからモデルパラメータと固定するパラメータのセットを読み込みます。
CSVファイルには、"varname", "value", "optid" (0:固定, 1:自由) の列が必要です。 PARAM_NAMES に含まれるパラメータのみがフィッティングの対象として扱われ、 optid が0のパラメータは固定としてマークされます。
- pvfit.main()[ソース]
スクリプトの主要な実行フローを制御します。
コマンドライン引数を解析し、指定されたモード(init, fit, sim)に基づいて、 データの読み込み、初期パラメータの取得、フィッティング実行、シミュレーション、 そして結果の保存とプロットを行います。
- pvfit.model(V, I0, ndiode, IPV, Rs, Rsh, temperature=300.0)[ソース]
一ダイオードモデル(Single-Diode Model, SDM)に基づいてIV特性の電流を計算します。
このモデルは以下の数式で表されます: I = IPV - I0 * (exp((V + I*Rs) / (ndiode * k * T / q)) - 1) - (V + I*Rs) / Rsh ここで、Iは全電流、IPVは光電流、I0は飽和電流、ndiodeはダイオード理想因子、 Rsは直列抵抗、Rshはシャント抵抗、kはボルツマン定数、Tは温度、qは素電荷です。 この式はIについて解析的に解けないため、scipy.optimize.brentq を用いて数値的に解を求めます。
- pvfit.objective(p_free, V, I_meas, temp, base_params, fix_set)[ソース]
最適化アルゴリズムのための目的関数を計算します。
この関数は、自由パラメータ`p_free`を更新し、それらの値を用いてモデルを呼び出し、 測定された電流と計算された電流の対数絶対値の差の二乗和(残差平方和)を返します。 `ndiode`を除くパラメータは対数スケールで最適化されます。
- pvfit.plot_iv(V, I_meas, I_final, axes, sigma_log=None, label='Model', title='')[ソース]
測定IV特性とモデルIV特性を線形スケールおよび対数スケールでプロットします。
線形スケールのプロットと対数スケールのプロットの2つのサブプロット(axes)に、 測定データ、フィッティングされたモデル曲線、および(指定された場合)信頼性区間を描画します。
- パラメータ:
V (np.ndarray) -- 電圧データ。
I_meas (np.ndarray) -- 測定された電流データ。
I_final (np.ndarray) -- モデルによって計算された最終電流データ。
axes (tuple[matplotlib.axes.Axes, matplotlib.axes.Axes]) -- プロットに使用するmatplotlibの2つのサブプロット軸 (ax_lin, ax_log)。
sigma_log (np.ndarray or None) -- モデル曲線の対数スケールでの標準偏差。提供された場合、信頼性区間が描画されます。
label (str) -- モデル曲線の凡例ラベル。デフォルトは"Model"。
title (str) -- プロットのタイトル。デフォルトは空文字列。
- 戻り値:
なし
- 戻り値の型:
None
- pvfit.read_data(infile, xmin=None, xmax=None)[ソース]
入力CSVファイルからIV特性データを読み込み、電圧(V)の昇順でソートして返します。
データはCSVファイルから読み込まれ、"DataValue"セクションに続く数値がIVデータとして解釈されます。 オプションで電圧範囲を指定してデータをフィルタリングできます。 データが存在しない場合や無効なデータが多い場合はエラーを発生させます。
- パラメータ:
- 戻り値:
V (np.ndarray): 読み込まれた電圧データ(ソート済み)。
I (np.ndarray): 読み込まれた電流データ(ソート済み)。
inf (dict): ファイル名と記録時間を含む情報辞書。
- 戻り値の型:
- 例外:
ValueError -- 有効なデータがファイル内に見つからない場合。
- pvfit.run_fit_mode(V, I_meas, init_params, args, csv_path, fix_set)[ソース]
フィッティングモードを実行し、IV特性データに一ダイオードモデルを適合させます。
初期パラメータから最適化を開始し、scipy.optimize.minimize を用いて目的関数を最小化します。 フィッティングの進行状況は、指定された間隔でプロットとコンソール出力で表示されます。 最終的なフィッティングパラメータ、その誤差、および推定されたVOCとISCをCSVファイルに保存します。
- パラメータ:
V (np.ndarray) -- 測定された電圧データ。
I_meas (np.ndarray) -- 測定された電流データ。
init_params (dict) -- フィッティングの初期パラメータの辞書。
args (argparse.Namespace) -- コマンドライン引数を格納したargparse.Namespaceオブジェクト。
csv_path (str) -- 結果のパラメータを保存するCSVファイルのパス。
fix_set (set) -- 固定するパラメータ名のセット。
- 戻り値:
fit_params (dict): フィッティング後の最適化されたパラメータの辞書。
sigma_log_curve (np.ndarray): 最適化されたモデル曲線の対数スケールでの標準偏差。
- 戻り値の型:
- pvfit.save_param_csv(csv_path, params, fix_set, errors=None, rss=None)[ソース]
モデルパラメータ、固定設定、推定誤差、およびRSSをCSVファイルに保存します。
結果として得られたフィッティングパラメータ、その固定/自由設定、 そして推定された誤差(利用可能な場合)を整理してCSV形式で出力します。 推定された開回路電圧 (VOC_est) と短絡電流 (ISC_est) も含められます。