|
| 1 | +function [h_full, b_full] = emdlab_flib_smooth_extend_hbcurve_polyc(h, b, h_final, n) |
| 2 | +% emdlab_flib_smooth_extend_hbcurve_polyc |
| 3 | +% smooth polynomial-based extension of B-H curve |
| 4 | +% decreasing incremental permeability from last slope to mu0 |
| 5 | +% |
| 6 | +% inputs: |
| 7 | +% h : original h vector (a/m) |
| 8 | +% b : original b vector (t) |
| 9 | +% h_final : final h value for extension (a/m) |
| 10 | +% n : polynomial exponent for decay (default 2) |
| 11 | +% |
| 12 | +% outputs: |
| 13 | +% h_full : extended h vector |
| 14 | +% b_full : extended b vector |
| 15 | + |
| 16 | + if nargin < 4 |
| 17 | + n = 2; % default exponent |
| 18 | + end |
| 19 | + |
| 20 | + mu0 = 4*pi*1e-7; % vacuum permeability |
| 21 | + |
| 22 | + % last point |
| 23 | + Hs = h(end); |
| 24 | + Bs = b(end); |
| 25 | + |
| 26 | + % incremental permeability at last segment |
| 27 | + mu_last = (b(end) - b(end-1)) / (h(end) - h(end-1)); |
| 28 | + |
| 29 | + % generate extended H vector |
| 30 | + Ht = linspace(Hs, h_final, 100); |
| 31 | + Ht = Ht(2:end); % skip Hs |
| 32 | + |
| 33 | + % polynomial decay function (normalized) |
| 34 | + f = (1 - (Ht - Hs)/(h_final - Hs)).^n; |
| 35 | + |
| 36 | + % incremental permeability along extension |
| 37 | + mu_ext = mu0 + (mu_last - mu0) .* f; |
| 38 | + |
| 39 | + % integrate mu(H) to get B(H) |
| 40 | + b_ext = Bs + cumtrapz(Ht, mu_ext); |
| 41 | + |
| 42 | + % combine original + extension |
| 43 | + h_full = [h; Ht(:)]; |
| 44 | + b_full = [b; b_ext(:)]; |
| 45 | +end |
0 commit comments