Voltammetry & Kinetic Diagnostics (softpotato.analytical.voltammetry)¶
The softpotato.analytical.voltammetry module provides diagnostic equations and peak current relationships for cyclic and linear sweep voltammetry.
voltammetry
¶
Analytical and empirical equations for voltammetry and kinetic diagnostics.
This module provides closed-form equations, asymptotic expansions, empirical approximations, and diagnostic tools for cyclic voltammetry (CV) and linear sweep voltammetry (LSV) at planar electrodes under semi-infinite linear diffusion.
Functions & Classes
randles_sevcik Reversible electron transfer peak current (Randles–Ševčík equation). randles_sevcik_irreversible Totally irreversible electron transfer peak current. randles_sevcik_quasi Quasi-reversible electron transfer peak current and shape factor approximations. nicholson_psi Nicholson method relating peak potential separation (Delta Ep) to kinetic parameter Psi and k0. nicholson_delta_ep Forward Nicholson approximation predicting peak separation from Psi. nicholson_rate_constant Direct extraction of standard rate constant k0 from peak potential separation. matsuda_ayabe Reversibility criteria classification based on the dimensionless Matsuda–Ayabe parameter Lambda. matsuda_ayabe_lambda Compute the dimensionless kinetic parameter Lambda. peak_potential_irreversible Peak potential and scan-rate dependence for totally irreversible systems. NicholsonResult Container dataclass for Nicholson cyclic voltammetry kinetic diagnostic parameters. MatsudaAyabeResult Container dataclass for Matsuda–Ayabe reversibility classification and diagnostic parameters.
Conventions & Units
All equations are dimensionally consistent in either standard SI or standard electrochemical CGS units:
- SI: \(v\) in \(\text{V}\cdot\text{s}^{-1}\), \(c^*\) in \(\text{mol}\cdot\text{m}^{-3}\), \(A\) in \(\text{m}^2\), \(D\) in \(\text{m}^2\cdot\text{s}^{-1}\), \(k^0\) in \(\text{m}\cdot\text{s}^{-1}\), \(F\) in \(\text{C}\cdot\text{mol}^{-1}\) \(\implies I_p\) in \(\text{A}\).
- CGS: \(v\) in \(\text{V}\cdot\text{s}^{-1}\), \(c^*\) in \(\text{mol}\cdot\text{cm}^{-3}\), \(A\) in \(\text{cm}^2\), \(D\) in \(\text{cm}^2\cdot\text{s}^{-1}\), \(k^0\) in \(\text{cm}\cdot\text{s}^{-1}\), \(F\) in \(\text{C}\cdot\text{mol}^{-1}\) \(\implies I_p\) in \(\text{A}\).
Standard IUPAC sign conventions are applied:
- Cathodic (reduction) peak currents are negative (\(I_p < 0\)) when scan_direction="cathodic".
- Anodic (oxidation) peak currents are positive (\(I_p > 0\)) when scan_direction="anodic".
References
- A. J. Bard, L. R. Faulkner, H. S. White, Electrochemical Methods: Fundamentals and Applications, 3rd ed., John Wiley & Sons, 2022, Chapter 6.
- J. E. B. Randles, "A cathode ray polarograph. Part II. The current-voltage curves", Trans. Faraday Soc., 44 (1948) 327–338.
- A. Ševčík, "Oscillographic polarography with periodical triangular voltage", Collect. Czech. Chem. Commun., 13 (1948) 349–377.
- H. Matsuda, Y. Ayabe, "Zur Theorie der Randles-Sevcikschen Kathodenstrahl-Polarographie", Z. Elektrochem., 59 (1955) 494–503.
- R. S. Nicholson, "Theory and application of cyclic voltammetry for measurement of electrode reaction kinetics", Anal. Chem., 37 (1965) 1351–1355.
- I. Lavagnini, R. Antiochia, F. Magno, "An extended method for the practical evaluation of the standard rate constant from cyclic voltammetric data", Electroanalysis, 16 (2004) 505–506.
- T. W. Swaddle, "Homogeneous versus heterogeneous self-exchange electron transfer reactions of metal complexes: Insights from pressure effects", Chem. Rev., 105 (2005) 2573–2608.
NicholsonResult
dataclass
¶
Container for Nicholson cyclic voltammetry kinetic diagnostic parameters.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
psi
|
float
|
Dimensionless Nicholson kinetic parameter \(\Psi\). |
required |
delta_ep
|
float
|
Peak potential separation \(\Delta E_p\) in Volts. |
required |
delta_ep_mv
|
float
|
Peak potential separation \(\Delta E_p\) in millivolts. |
required |
k0
|
float or None
|
Extracted heterogeneous standard electron transfer rate constant \(k^0\) in \(\text{m}\cdot\text{s}^{-1}\) (or \(\text{cm}\cdot\text{s}^{-1}\)). |
None
|
method
|
str
|
Method used for the evaluation ( |
"swaddle"
|
n
|
float
|
Number of electrons transferred. |
1.0
|
Source code in src/softpotato/analytical/voltammetry.py
MatsudaAyabeResult
dataclass
¶
Container for Matsuda–Ayabe reversibility classification and diagnostics.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
lambda_param
|
float
|
Dimensionless Matsuda–Ayabe kinetic parameter \(\Lambda\). |
required |
classification
|
('reversible', 'quasi-reversible', 'irreversible')
|
Electrochemical reversibility classification zone. |
"reversible"
|
k0
|
float
|
Standard heterogeneous rate constant \(k^0\). |
required |
v
|
float
|
Potential scan rate \(v\). |
required |
D
|
float
|
Diffusion coefficient \(D\). |
required |
is_reversible
|
bool
|
True if system is reversible (\(\Lambda \ge 15\)). |
required |
is_quasi_reversible
|
bool
|
True if system is quasi-reversible (\(10^{-3} < \Lambda < 15\)). |
required |
is_irreversible
|
bool
|
True if system is irreversible (\(\Lambda \le 10^{-3}\)). |
required |
Source code in src/softpotato/analytical/voltammetry.py
randles_sevcik
¶
randles_sevcik(v: float | ArrayLike, c_bulk: float = 0.001, D: float = 1e-05, area: float = 1.0, n: float = 1, T: float = STANDARD_TEMPERATURE, R: float = GAS_CONSTANT, F: float = FARADAY, scan_direction: Literal['cathodic', 'anodic'] = 'cathodic') -> float | np.ndarray
Compute reversible electron transfer peak current using the Randles–Ševčík equation.
Calculates the Faradaic peak current \(I_p\) for a diffusion-controlled, electrochemically reversible (Nernstian) single-step electron transfer at a planar electrode under semi-infinite linear diffusion:
At standard temperature (\(T = 298.15\,\text{K}\)):
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
v
|
float or array - like
|
Potential sweep scan rate in \(\text{V}\cdot\text{s}^{-1}\) (\(v > 0\)). |
required |
c_bulk
|
float
|
Bulk concentration of electroactive species \(c^*\) in \(\text{mol}\cdot\text{m}^{-3}\) or \(\text{mol}\cdot\text{cm}^{-3}\) (\(c^* \ge 0\)). |
1e-3
|
D
|
float
|
Diffusion coefficient of electroactive species in \(\text{m}^2\cdot\text{s}^{-1}\) or \(\text{cm}^2\cdot\text{s}^{-1}\) (\(D > 0\)). |
1e-5
|
area
|
float
|
Electrode geometric surface area \(A\) in \(\text{m}^2\) or \(\text{cm}^2\) (\(A > 0\)). |
1.0
|
n
|
float
|
Number of electrons transferred per molecule (\(n > 0\)). |
1
|
T
|
float
|
Thermodynamic temperature in Kelvin (\(T > 0\)). |
298.15
|
R
|
float
|
Molar gas constant in \(\text{J}\cdot\text{mol}^{-1}\cdot\text{K}^{-1}\) (\(R > 0\)). |
8.31446
|
F
|
float
|
Faraday constant in \(\text{C}\cdot\text{mol}^{-1}\) (\(F > 0\)). |
96485.332
|
scan_direction
|
('cathodic', 'anodic')
|
Direction of potential sweep. Cathodic (reduction) yields negative current (\(I_p < 0\)), while anodic (oxidation) yields positive current (\(I_p > 0\)). |
"cathodic"
|
Returns:
| Type | Description |
|---|---|
float or ndarray
|
Peak current \(I_p\) in Amperes (\(\text{A}\)). |
Raises:
| Type | Description |
|---|---|
ValueError
|
If physical parameters are non-positive or |
Examples:
>>> from softpotato.analytical.voltammetry import randles_sevcik
>>> # Reversible 1-electron reduction at 0.1 V/s, 1 mM, 0.07 cm^2, D = 1e-5 cm^2/s
>>> ip = randles_sevcik(0.1, c_bulk=1e-6, D=1e-5, area=0.07)
>>> round(ip * 1e6, 2) # Current in microamperes (cathodic is negative)
-18.81
Source code in src/softpotato/analytical/voltammetry.py
209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 | |
randles_sevcik_irreversible
¶
randles_sevcik_irreversible(v: float | ArrayLike, alpha: float = 0.5, n_alpha: float = 1, c_bulk: float = 0.001, D: float = 1e-05, area: float = 1.0, n: float = 1, T: float = STANDARD_TEMPERATURE, R: float = GAS_CONSTANT, F: float = FARADAY, scan_direction: Literal['cathodic', 'anodic'] = 'cathodic') -> float | np.ndarray
Compute totally irreversible electron transfer peak current.
Calculates the Faradaic peak current \(I_p\) for a totally irreversible electron transfer at a planar electrode under semi-infinite linear diffusion:
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
v
|
float or array - like
|
Potential sweep scan rate in \(\text{V}\cdot\text{s}^{-1}\) (\(v > 0\)). |
required |
alpha
|
float
|
Charge transfer coefficient (\(0 < \alpha < 1\)). |
0.5
|
n_alpha
|
float
|
Number of electrons transferred in the rate-determining step (\(n_\alpha > 0\)). |
1
|
c_bulk
|
float
|
Bulk concentration of electroactive species \(c^*\) in \(\text{mol}\cdot\text{m}^{-3}\) or \(\text{mol}\cdot\text{cm}^{-3}\) (\(c^* \ge 0\)). |
1e-3
|
D
|
float
|
Diffusion coefficient in \(\text{m}^2\cdot\text{s}^{-1}\) or \(\text{cm}^2\cdot\text{s}^{-1}\) (\(D > 0\)). |
1e-5
|
area
|
float
|
Electrode geometric surface area \(A\) in \(\text{m}^2\) or \(\text{cm}^2\) (\(A > 0\)). |
1.0
|
n
|
float
|
Total number of electrons transferred per reactant molecule (\(n > 0\)). |
1
|
T
|
float
|
Thermodynamic temperature in Kelvin (\(T > 0\)). |
298.15
|
R
|
float
|
Molar gas constant in \(\text{J}\cdot\text{mol}^{-1}\cdot\text{K}^{-1}\) (\(R > 0\)). |
8.31446
|
F
|
float
|
Faraday constant in \(\text{C}\cdot\text{mol}^{-1}\) (\(F > 0\)). |
96485.332
|
scan_direction
|
('cathodic', 'anodic')
|
Direction of potential sweep. Cathodic (reduction) yields negative current (\(I_p < 0\)), while anodic (oxidation) yields positive current (\(I_p > 0\)). |
"cathodic"
|
Returns:
| Type | Description |
|---|---|
float or ndarray
|
Totally irreversible peak current \(I_p\) in Amperes (\(\text{A}\)). |
Raises:
| Type | Description |
|---|---|
ValueError
|
If parameters are invalid or outside physical bounds. |
Examples:
>>> from softpotato.analytical.voltammetry import randles_sevcik_irreversible
>>> ip_irrev = randles_sevcik_irreversible(0.1, alpha=0.5, c_bulk=1e-6, D=1e-5, area=0.07)
>>> round(ip_irrev * 1e6, 2) # Current in microamperes (cathodic is negative)
-14.77
Source code in src/softpotato/analytical/voltammetry.py
307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 | |
randles_sevcik_quasi
¶
randles_sevcik_quasi(v: float | ArrayLike, k0: float | None = None, *, lambda_param: float | ArrayLike | None = None, c_bulk: float = 0.001, D: float = 1e-05, area: float = 1.0, alpha: float = 0.5, n: float = 1, T: float = STANDARD_TEMPERATURE, R: float = GAS_CONSTANT, F: float = FARADAY, scan_direction: Literal['cathodic', 'anodic'] = 'cathodic') -> float | np.ndarray
Compute quasi-reversible electron transfer peak current and shape factor.
Approximates the peak current in the intermediate quasi-reversible regime (\(10^{-3} < \Lambda < 15\)) using the Matsuda–Ayabe current function correction factor \(K(\Lambda, \alpha)\):
where \(I_{p,\text{rev}}\) is the reversible Randles–Ševčík peak current, and \(K(\Lambda, \alpha)\) transitions smoothly between the reversible limit (\(K \to 1.0\) as \(\Lambda \to \infty\)) and the totally irreversible limit (\(K \to \frac{0.4958}{0.4463} \sqrt{\alpha} \approx 1.1109 \sqrt{\alpha}\) as \(\Lambda \to 0\)).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
v
|
float or array - like
|
Potential sweep scan rate in \(\text{V}\cdot\text{s}^{-1}\) (\(v > 0\)). |
required |
k0
|
float
|
Standard heterogeneous rate constant \(k^0\) in \(\text{m}\cdot\text{s}^{-1}\)
or \(\text{cm}\cdot\text{s}^{-1}\) (\(k^0 > 0\)).
Either |
None
|
lambda_param
|
float or array - like
|
Dimensionless Matsuda–Ayabe kinetic parameter \(\Lambda > 0\). |
None
|
c_bulk
|
float
|
Bulk concentration in \(\text{mol}\cdot\text{m}^{-3}\) or \(\text{mol}\cdot\text{cm}^{-3}\) (\(c^* \ge 0\)). |
1e-3
|
D
|
float
|
Diffusion coefficient in \(\text{m}^2\cdot\text{s}^{-1}\) or \(\text{cm}^2\cdot\text{s}^{-1}\) (\(D > 0\)). |
1e-5
|
area
|
float
|
Electrode geometric area in \(\text{m}^2\) or \(\text{cm}^2\) (\(A > 0\)). |
1.0
|
alpha
|
float
|
Charge transfer coefficient (\(0 < \alpha < 1\)). |
0.5
|
n
|
float
|
Number of electrons transferred (\(n > 0\)). |
1
|
T
|
float
|
Thermodynamic temperature in Kelvin (\(T > 0\)). |
298.15
|
R
|
float
|
Molar gas constant (\(R > 0\)). |
8.31446
|
F
|
float
|
Faraday constant (\(F > 0\)). |
96485.332
|
scan_direction
|
('cathodic', 'anodic')
|
Direction of potential sweep. Cathodic (reduction) yields negative current (\(I_p < 0\)), while anodic (oxidation) yields positive current (\(I_p > 0\)). |
"cathodic"
|
Returns:
| Type | Description |
|---|---|
float or ndarray
|
Quasi-reversible peak current in Amperes (\(\text{A}\)). |
Raises:
| Type | Description |
|---|---|
ValueError
|
If neither or both |
Examples:
>>> from softpotato.analytical.voltammetry import randles_sevcik_quasi
>>> ip_quasi = randles_sevcik_quasi(0.1, k0=1e-3, c_bulk=1e-6, D=1e-5, area=0.07)
>>> round(ip_quasi * 1e6, 2)
-15.3
Source code in src/softpotato/analytical/voltammetry.py
411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 | |
nicholson_psi
¶
nicholson_psi(delta_ep: float | ArrayLike | None = None, *, psi: float | ArrayLike | None = None, k0: float | None = None, v: float | None = None, D: float = 1e-05, n: float = 1, T: float = STANDARD_TEMPERATURE, R: float = GAS_CONSTANT, F: float = FARADAY, in_volts: bool = True, method: Literal['swaddle', 'lavagnini', 'table'] = 'swaddle') -> float | np.ndarray | NicholsonResult
Relate peak potential separation to Nicholson kinetic parameter and standard rate constant.
Implements the Nicholson method relating peak-to-peak potential separation \(\Delta E_p = |E_{pa} - E_{pc}|\) to the dimensionless kinetic parameter \(\Psi\):
Supports both forward (\(\Psi \to \Delta E_p\)) and inverse (\(\Delta E_p \to \Psi\)) evaluations, with optional extraction of the standard rate constant \(k^0\) when scan rate \(v\) is provided.
Available Approximation Methods
"swaddle"(default): T. W. Swaddle (2005) empirical rational formulation:
$$ \ln \Psi = 3.69 - 1.16 \ln(n \Delta E_p[\text{mV}] - 59) $$
"lavagnini": I. Lavagnini et al. (2004) empirical formula:
$$ \Psi = \frac{-0.6288 + 0.0021 (n \Delta E_p[\text{mV}])}{1 - 0.017 (n \Delta E_p[\text{mV}])} $$
"table": High-precision monotonic Pchip interpolation against the original tabulated values from Nicholson (1965) Table 1.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
delta_ep
|
float or array - like
|
Peak potential separation \(\Delta E_p\). In Volts if |
None
|
psi
|
float or array - like
|
Dimensionless Nicholson kinetic parameter \(\Psi > 0\). If supplied, performs forward calculation to predict \(\Delta E_p\). |
None
|
k0
|
float
|
Standard rate constant \(k^0\) in \(\text{m}\cdot\text{s}^{-1}\) or \(\text{cm}\cdot\text{s}^{-1}\). |
None
|
v
|
float
|
Potential scan rate in \(\text{V}\cdot\text{s}^{-1}\) (\(v > 0\)). When provided alongside
|
None
|
D
|
float
|
Diffusion coefficient (\(D > 0\)). |
1e-5
|
n
|
float
|
Number of electrons transferred (\(n > 0\)). |
1
|
T
|
float
|
Thermodynamic temperature in Kelvin (\(T > 0\)). |
298.15
|
R
|
float
|
Molar gas constant (\(R > 0\)). |
8.31446
|
F
|
float
|
Faraday constant (\(F > 0\)). |
96485.332
|
in_volts
|
bool
|
If True, |
True
|
method
|
('swaddle', 'lavagnini', 'table')
|
Approximation model for the Nicholson working curve. |
"swaddle"
|
Returns:
| Type | Description |
|---|---|
float, numpy.ndarray, or NicholsonResult
|
|
Raises:
| Type | Description |
|---|---|
ValueError
|
If neither or both |
Examples:
>>> from softpotato.analytical.voltammetry import nicholson_psi
>>> # Evaluate Psi from Delta_Ep = 72 mV for n = 1
>>> psi_val = nicholson_psi(delta_ep=0.072, in_volts=True, method="swaddle")
>>> round(float(psi_val), 2)
2.04
Source code in src/softpotato/analytical/voltammetry.py
547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 | |
nicholson_delta_ep
¶
nicholson_delta_ep(psi: float | ArrayLike, n: float = 1, in_volts: bool = True, method: Literal['swaddle', 'lavagnini', 'table'] = 'swaddle') -> float | np.ndarray
Predict peak potential separation from Nicholson dimensionless parameter Psi.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
psi
|
float or array - like
|
Dimensionless Nicholson kinetic parameter \(\Psi > 0\). |
required |
n
|
float
|
Number of electrons transferred (\(n > 0\)). |
1
|
in_volts
|
bool
|
If True, returns \(\Delta E_p\) in Volts. If False, in millivolts. |
True
|
method
|
('swaddle', 'lavagnini', 'table')
|
Approximation formula. |
"swaddle"
|
Returns:
| Type | Description |
|---|---|
float or ndarray
|
Peak potential separation \(\Delta E_p\). |
Source code in src/softpotato/analytical/voltammetry.py
nicholson_rate_constant
¶
nicholson_rate_constant(delta_ep: float, v: float, D: float = 1e-05, n: float = 1, T: float = STANDARD_TEMPERATURE, R: float = GAS_CONSTANT, F: float = FARADAY, in_volts: bool = True, method: Literal['swaddle', 'lavagnini', 'table'] = 'swaddle') -> float
Extract heterogeneous standard rate constant k0 from peak potential separation.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
delta_ep
|
float
|
Measured peak potential separation \(\Delta E_p\). |
required |
v
|
float
|
Potential sweep scan rate in \(\text{V}\cdot\text{s}^{-1}\) (\(v > 0\)). |
required |
D
|
float
|
Diffusion coefficient (\(D > 0\)). |
1e-5
|
n
|
float
|
Number of electrons transferred (\(n > 0\)). |
1
|
T
|
float
|
Thermodynamic temperature in Kelvin (\(T > 0\)). |
298.15
|
R
|
float
|
Molar gas constant (\(R > 0\)). |
8.31446
|
F
|
float
|
Faraday constant (\(F > 0\)). |
96485.332
|
in_volts
|
bool
|
If True, |
True
|
method
|
('swaddle', 'lavagnini', 'table')
|
Nicholson model. |
"swaddle"
|
Returns:
| Type | Description |
|---|---|
float
|
Standard rate constant \(k^0\) in \(\text{m}\cdot\text{s}^{-1}\) or \(\text{cm}\cdot\text{s}^{-1}\). |
Source code in src/softpotato/analytical/voltammetry.py
matsuda_ayabe_lambda
¶
matsuda_ayabe_lambda(k0: float | ArrayLike, v: float | ArrayLike, D: float = 1e-05, n: float = 1, T: float = STANDARD_TEMPERATURE, R: float = GAS_CONSTANT, F: float = FARADAY) -> float | np.ndarray
Compute the dimensionless Matsuda–Ayabe reversibility parameter Lambda.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
k0
|
float or array - like
|
Standard rate constant \(k^0 > 0\). |
required |
v
|
float or array - like
|
Scan rate in \(\text{V}\cdot\text{s}^{-1}\) (\(v > 0\)). |
required |
D
|
float
|
Diffusion coefficient (\(D > 0\)). |
1e-5
|
n
|
float
|
Number of electrons transferred (\(n > 0\)). |
1
|
T
|
float
|
Thermodynamic temperature in Kelvin (\(T > 0\)). |
298.15
|
R
|
float
|
Molar gas constant (\(R > 0\)). |
8.31446
|
F
|
float
|
Faraday constant (\(F > 0\)). |
96485.332
|
Returns:
| Type | Description |
|---|---|
float or ndarray
|
Dimensionless kinetic parameter \(\Lambda\). |
Source code in src/softpotato/analytical/voltammetry.py
matsuda_ayabe
¶
matsuda_ayabe(k0: float, v: float, D: float = 1e-05, n: float = 1, alpha: float = 0.5, T: float = STANDARD_TEMPERATURE, R: float = GAS_CONSTANT, F: float = FARADAY) -> MatsudaAyabeResult
Classify voltammetric reversibility according to the Matsuda–Ayabe criteria.
Classifies the redox process based on the dimensionless kinetic parameter \(\Lambda = \frac{k^0}{\sqrt{D \frac{n F v}{R T}}}\) into one of three regimes:
- Reversible (Nernstian): \(\Lambda \ge 15\) Electron transfer is fast relative to diffusion; \(\Delta E_p \approx 59/n\,\text{mV}\).
- Quasi-reversible: \(10^{-3} < \Lambda < 15\) Both kinetics and diffusion control the response; \(\Delta E_p\) depends on \(v\).
- Totally Irreversible: \(\Lambda \le 10^{-3}\) Kinetics are sluggish; the reverse reaction is negligible at the peak potential.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
k0
|
float
|
Standard heterogeneous rate constant \(k^0 > 0\). |
required |
v
|
float
|
Scan rate in \(\text{V}\cdot\text{s}^{-1}\) (\(v > 0\)). |
required |
D
|
float
|
Diffusion coefficient (\(D > 0\)). |
1e-5
|
n
|
float
|
Number of electrons transferred (\(n > 0\)). |
1
|
alpha
|
float
|
Charge transfer coefficient (\(0 < \alpha < 1\)). |
0.5
|
T
|
float
|
Thermodynamic temperature in Kelvin (\(T > 0\)). |
298.15
|
R
|
float
|
Molar gas constant (\(R > 0\)). |
8.31446
|
F
|
float
|
Faraday constant (\(F > 0\)). |
96485.332
|
Returns:
| Type | Description |
|---|---|
MatsudaAyabeResult
|
Classification container with \(\Lambda\) and boolean flags. |
Examples:
>>> from softpotato.analytical.voltammetry import matsuda_ayabe
>>> res = matsuda_ayabe(k0=0.1, v=0.1, D=1e-5)
>>> res.classification
'reversible'
>>> res.is_reversible
True
Source code in src/softpotato/analytical/voltammetry.py
887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 | |
peak_potential_irreversible
¶
peak_potential_irreversible(v: float | ArrayLike, k0: float, E0_prime: float = 0.0, D: float = 1e-05, alpha: float = 0.5, n_alpha: float = 1, T: float = STANDARD_TEMPERATURE, R: float = GAS_CONSTANT, F: float = FARADAY, scan_direction: Literal['cathodic', 'anodic'] = 'cathodic') -> float | np.ndarray
Compute peak potential for totally irreversible electron transfer.
Calculates the peak potential \(E_p\) as a function of scan rate \(v\) under totally irreversible charge-transfer kinetics (Bard & Faulkner Eq. 6.3.18):
(negative sign for cathodic reduction, positive sign for anodic oxidation with \((1-\alpha)\)).
The diagnostic shift per decade of scan rate is:
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
v
|
float or array - like
|
Potential sweep scan rate in \(\text{V}\cdot\text{s}^{-1}\) (\(v > 0\)). |
required |
k0
|
float
|
Heterogeneous standard rate constant \(k^0 > 0\). |
required |
E0_prime
|
float
|
Formal electrode potential \(E^{0\prime}\) in Volts. |
0.0
|
D
|
float
|
Diffusion coefficient (\(D > 0\)). |
1e-5
|
alpha
|
float
|
Charge transfer coefficient (\(0 < \alpha < 1\)). |
0.5
|
n_alpha
|
float
|
Number of electrons in rate-determining step (\(n_\alpha > 0\)). |
1
|
T
|
float
|
Thermodynamic temperature in Kelvin (\(T > 0\)). |
298.15
|
R
|
float
|
Molar gas constant (\(R > 0\)). |
8.31446
|
F
|
float
|
Faraday constant (\(F > 0\)). |
96485.332
|
scan_direction
|
('cathodic', 'anodic')
|
Direction of sweep ("cathodic" or "anodic"). |
"cathodic"
|
Returns:
| Type | Description |
|---|---|
float or ndarray
|
Peak potential \(E_p\) in Volts. |
Raises:
| Type | Description |
|---|---|
ValueError
|
If parameters are non-positive or outside physical limits. |
Examples:
>>> from softpotato.analytical.voltammetry import peak_potential_irreversible
>>> ep = peak_potential_irreversible(0.1, k0=1e-4, E0_prime=0.0)
>>> round(ep, 4)
-0.2347
Source code in src/softpotato/analytical/voltammetry.py
972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 | |