DRTxECM

v0.2.0 English

方法與原理

這一頁說明 DRTxECM 三個階段各自在解什麼問題、用什麼數值方法, 以及哪些部分沿用 pyDRTtools、哪些是新增的擴充。

① DRT 解卷積Tikhonov 正則化線性反算
→
② 高斯峰分解非線性最小平方(多高斯)
→
③ CNLS 擬合有界非線性優化(L-BFGS-B)

第一階段:DRT 解卷積

電化學阻抗頻譜可以寫成鬆弛時間分布的積分形式(DRT,Distribution of Relaxation Times):

Z(ω) = R∞ + ∫ γ(ln τ) / (1 + jωτ)  d ln τ

若高頻端有電感行為,則加上串聯電感項:

Z(ω) = R∞ + jωL + ∫ γ(ln τ) / (1 + jωτ)  d ln τ

γ(ln τ) 就是 DRT 的結果。因為 γ 是連續函數、而量測資料有限且有雜訊, 這個反算問題是病態的(ill-posed):直接求解會得到劇烈振盪、 沒有物理意義的解。pyDRTtools 的解法是把 γ 用基底函數離散化,再引入正則化。

離散化與 Tikhonov 正則化

把 γ 用一組基底函數展開 γ(ln τ) = Σn xn φn(ln τ), 代入積分式之後,問題就變成一個線性系統 A x = b, 其中 b 是量測到的阻抗(實部與虛部可以串接)。 此時求解的目標是脊回歸(Tikhonov 正則化):

minx   ‖A x − b‖2 + λ ‖M x‖2

λ 是正則化參數,M 是由微分階數決定的矩陣。λ 太大會把 γ 抹平、 失去解析度;λ 太小則會出現振盪的假峰。λ 的選擇是 DRT 分析最關鍵的一步。

選項說明
custom由使用者手動指定 λ
GCV一般化交叉驗證(Generalized Cross-Validation)
mGCV改良版 GCV
rGCV穩健版 GCV
LCL-curve 法
kfK-fold 交叉驗證
re-im實部/虛部交叉驗證

離散化基底

基底特性
Gaussian預設,平滑、一般用途最穩定
C2 MaternMatern 家族,可調平滑度(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 的解析度極限。

其他 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 τ) 是一條連續曲線,但實際的物理系統通常由有限個 鬆弛過程組成。第二階段用多個高斯函數去擬合這條曲線:

γ(ln τ) ≈ Σi Ai · exp( −(ln τ − μi)2 / (2 σi2) )

這是非線性最小平方問題,以 scipy.optimize.curve_fit 求解, 迭代上限 10000 次。峰數由使用者指定(介面上的 Number of peaks), 你可以在擬合後手動微調任一個峰的振幅、位置與寬度。

從峰到電路初始值

這是第二階段與第三階段之間的橋樑。每個高斯峰對應一個 R//CPE 分支, 換算方式如下(實作於 Stage2Window.export_to_stage3):

電路參數由峰參數換算
電阻 RR = A · σ · √(2π)
時間常數 ττ = exp(μ)
CPE 參數 QQ = τ / R
相角 αα = 1.0(起始值,之後才由擬合決定)

換算的道理是:A·σ·√(2π) 是高斯函數在 ln τ 軸上的面積, 對應到該鬆弛過程貢獻的總電阻 R;而當 α = 1 時, R//CPE 分支的時間常數正好是 τ = R·Q,所以 Q 由 τ 與 R 反推。 峰的中心位置 μ 是 ln τ,取指數就得回 τ。

這就是「DRT 啟發的初始猜測」:起始值不是隨機亂猜, 而是由資料本身的鬆弛時間結構推導出來的,因此能大幅降低 非線性擬合落入局部極小值的機會。

第三階段:CNLS 等效電路擬合

電路模型

DRTxECM 使用的等效電路是串聯的 LR0 + Σ(Ri//CPEi):

Z(ω) = R0 + jωL + Σi   1 / ( 1/Ri + Qi(jω)αi )

其中單一 CPE 的阻抗是:

ZCPE = 1 / ( Q (jω)α )

當 α = 1 時,Q 就退化成理想電容 C,該分支成為標準的 RC 半圓; 當 α < 1 時,Nyquist 圖上的半圓會被壓扁、圓心落到實軸下方。 壓扁的程度直接對應 α 的大小,這也是本網站標誌造型的由來。

目標函數與優化

擬合是對複數阻抗的實部與虛部同時做最小平方(CNLS,Complex Nonlinear Least Squares):

χ2(x) = Σk [ ( Re Zexp,k − Re Zsim,k )2 + ( Im Zexp,k − Im Zsim,k )2 ]

優化器是 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 矩陣估計共變異數:

dof = 2N − p   (N 為頻率點數,p 為被優化的參數個數)
mse = χ2 / dof
cov = H−1 · mse
Errorj = √( covjj )

L-BFGS-B 回傳的反 Hessian 是 LinearOperator 形式, 程式會轉成稠密矩陣後再計算。若無法取得,則退回以數值 Jacobian 近似。 這就是 Stage 3 參數表中 Error 與 Error% 兩欄的來源。

為什麼要把 CPE 相角 α 當成自由參數

這是 DRTxECM 最重要的設計決定。現實中的電極表面粗糙、反應不均勻, CPE 的 α 通常明顯小於 1(常見落在 0.7 到 0.95 之間)。 但許多商業等效電路軟體為了收斂穩定,會把 α 固定成 1, 或限制在很窄的範圍內。

這麼做會有兩個後果:

DRTxECM 讓 α 與 R、Q 一起被優化,因此你能分辨 「這個分支真的接近理想電容」與「這個分支是因為被固定才看起來像理想電容」。 預設邊界 [0.2, 1.0] 涵蓋了文獻中絕大多數 CPE 的實際取值。

DRTxECM 與其他工具的差異

能力 通用電路擬合軟體 pyDRTtools DRTxECM
DRT 計算 無(或需外掛) 完整(Tikhonov、Bayesian、BHT、GP-DRT) 完整(沿用,未修改)
等效電路擬合 完整 無 有(LR0 + ΣR//CPE)
CPE 相角 α 常固定或限制範圍 不適用 自由擬合(0.2–1.05)
初始值來源 手動輸入或隨機 不適用 由 DRT 的峰自動換算
參數不確定度 部分有 不適用 有(反 Hessian 估計)
授權 多為商業授權 MIT MIT

理論基礎與引用

第一階段的 DRT 方法建立在 pyDRTtools 的既有成果上,所有數學推導、 方程式編號與原始文獻請見 引用與致謝。 若你要在論文中使用這些結果,請務必引用對應的原始文獻。