這一頁說明 DRTxECM 三個階段各自在解什麼問題、用什麼數值方法, 以及哪些部分沿用 pyDRTtools、哪些是新增的擴充。
電化學阻抗頻譜可以寫成鬆弛時間分布的積分形式(DRT,Distribution of Relaxation Times):
若高頻端有電感行為,則加上串聯電感項:
γ(ln τ) 就是 DRT 的結果。因為 γ 是連續函數、而量測資料有限且有雜訊, 這個反算問題是病態的(ill-posed):直接求解會得到劇烈振盪、 沒有物理意義的解。pyDRTtools 的解法是把 γ 用基底函數離散化,再引入正則化。
把 γ 用一組基底函數展開 γ(ln τ) = Σn xn φn(ln τ), 代入積分式之後,問題就變成一個線性系統 A x = b, 其中 b 是量測到的阻抗(實部與虛部可以串接)。 此時求解的目標是脊回歸(Tikhonov 正則化):
λ 是正則化參數,M 是由微分階數決定的矩陣。λ 太大會把 γ 抹平、 失去解析度;λ 太小則會出現振盪的假峰。λ 的選擇是 DRT 分析最關鍵的一步。
| 選項 | 說明 |
|---|---|
| custom | 由使用者手動指定 λ |
| GCV | 一般化交叉驗證(Generalized Cross-Validation) |
| mGCV | 改良版 GCV |
| rGCV | 穩健版 GCV |
| LC | L-curve 法 |
| kf | K-fold 交叉驗證 |
| re-im | 實部/虛部交叉驗證 |
| 基底 | 特性 |
|---|---|
| Gaussian | 預設,平滑、一般用途最穩定 |
| C2 Matern | Matern 家族,可調平滑度(C2 → C6 依序越平滑) |
| C4 Matern | |
| C6 Matern | |
| Inverse Quadratic | 長尾,適合寬廣的鬆弛時間分布 |
| Inverse Quadric | 長尾的另一種形式 |
| Cauchy | 長尾、較不易出現尖峰 |
| PWL | 分段線性,不使用 Toeplitz 加速,計算較慢但限制最少 |
基底的寬度由 RBF Shape Control 決定(FWHM Coefficient 或
Shape Factor),數值由 FWHM Control 指定,預設 0.5。
這個寬度決定 DRT 的解析度極限。
| 方法 | 原理 |
|---|---|
| Simple Run | Tikhonov/脊回歸(上述方法),以最佳化求解。Parameter Selection Method 決定 λ |
| Bayesian Run | 貝氏正則化:把雜訊變異數與正則化超參數當成待推論的未知數,以後驗分布取樣求解 |
| Hilbert Transform | BHT(Bayesian Hilbert Transform):利用 Kramers-Kronig 關係連結實部與虛部,再用貝氏架構求解 |
套件中也包含 GP-DRT(fGP.py,高斯過程)與 HMC(HMC.py,
Hamiltonian Monte Carlo)的實作,但目前圖形介面未提供對應按鈕,
可用 Python API 直接呼叫。以上所有 DRT 計算都沿用 pyDRTtools 原始程式碼,
DRTxECM 未做修改。
DRT 得到的 γ(ln τ) 是一條連續曲線,但實際的物理系統通常由有限個 鬆弛過程組成。第二階段用多個高斯函數去擬合這條曲線:
這是非線性最小平方問題,以 scipy.optimize.curve_fit 求解,
迭代上限 10000 次。峰數由使用者指定(介面上的 Number of peaks),
你可以在擬合後手動微調任一個峰的振幅、位置與寬度。
這是第二階段與第三階段之間的橋樑。每個高斯峰對應一個 R//CPE 分支,
換算方式如下(實作於 Stage2Window.export_to_stage3):
| 電路參數 | 由峰參數換算 |
|---|---|
| 電阻 R | R = A · σ · √(2π) |
| 時間常數 τ | τ = exp(μ) |
| CPE 參數 Q | Q = τ / R |
| 相角 α | α = 1.0(起始值,之後才由擬合決定) |
換算的道理是:A·σ·√(2π) 是高斯函數在 ln τ 軸上的面積,
對應到該鬆弛過程貢獻的總電阻 R;而當 α = 1 時,
R//CPE 分支的時間常數正好是 τ = R·Q,所以 Q 由 τ 與 R 反推。
峰的中心位置 μ 是 ln τ,取指數就得回 τ。
這就是「DRT 啟發的初始猜測」:起始值不是隨機亂猜, 而是由資料本身的鬆弛時間結構推導出來的,因此能大幅降低 非線性擬合落入局部極小值的機會。
DRTxECM 使用的等效電路是串聯的 LR0 + Σ(Ri//CPEi):
其中單一 CPE 的阻抗是:
當 α = 1 時,Q 就退化成理想電容 C,該分支成為標準的 RC 半圓; 當 α < 1 時,Nyquist 圖上的半圓會被壓扁、圓心落到實軸下方。 壓扁的程度直接對應 α 的大小,這也是本網站標誌造型的由來。
擬合是對複數阻抗的實部與虛部同時做最小平方(CNLS,Complex Nonlinear Least Squares):
優化器是 scipy.optimize.minimize 的 L-BFGS-B(有限記憶體
準牛頓法,支援參數上下界),收斂容差設定為 ftol = gtol = 1e-12。
| 參數 | 可選模式 | 對應的邊界 |
|---|---|---|
| R、Q | Free、Free +-5%、Free +-10%、Fixed |
Free → [0, ∞);Free +-5% → 目前值的 ±5%;Free +-10% → 目前值的 ±10%;Fixed → 不列入優化變數 |
α(n_i) |
Free、<= 1、Fixed |
<= 1 → [0.2, 1.0];Free → [0.2, 1.05];Fixed → 不列入優化變數 |
| L | Free、Fixed |
Free → (−∞, ∞);Fixed → 不列入優化變數 |
被設為 Fixed 的參數不會進入優化變數向量,因此也不計入自由度 p。
介面上的預設值是:R、Q、L 為 Fixed,α 為 <= 1。
優化收斂後,程式計算自由度與均方誤差,再由反 Hessian 矩陣估計共變異數:
L-BFGS-B 回傳的反 Hessian 是 LinearOperator 形式,
程式會轉成稠密矩陣後再計算。若無法取得,則退回以數值 Jacobian 近似。
這就是 Stage 3 參數表中 Error 與 Error% 兩欄的來源。
這是 DRTxECM 最重要的設計決定。現實中的電極表面粗糙、反應不均勻, CPE 的 α 通常明顯小於 1(常見落在 0.7 到 0.95 之間)。 但許多商業等效電路軟體為了收斂穩定,會把 α 固定成 1, 或限制在很窄的範圍內。
這麼做會有兩個後果:
DRTxECM 讓 α 與 R、Q 一起被優化,因此你能分辨
「這個分支真的接近理想電容」與「這個分支是因為被固定才看起來像理想電容」。
預設邊界 [0.2, 1.0] 涵蓋了文獻中絕大多數 CPE 的實際取值。
| 能力 | 通用電路擬合軟體 | pyDRTtools | DRTxECM |
|---|---|---|---|
| DRT 計算 | 無(或需外掛) | 完整(Tikhonov、Bayesian、BHT、GP-DRT) | 完整(沿用,未修改) |
| 等效電路擬合 | 完整 | 無 | 有(LR0 + ΣR//CPE) |
| CPE 相角 α | 常固定或限制範圍 | 不適用 | 自由擬合(0.2–1.05) |
| 初始值來源 | 手動輸入或隨機 | 不適用 | 由 DRT 的峰自動換算 |
| 參數不確定度 | 部分有 | 不適用 | 有(反 Hessian 估計) |
| 授權 | 多為商業授權 | MIT | MIT |
第一階段的 DRT 方法建立在 pyDRTtools 的既有成果上,所有數學推導、 方程式編號與原始文獻請見 引用與致謝。 若你要在論文中使用這些結果,請務必引用對應的原始文獻。