p_single = p(open_inds(i - 1):(fill_inds(i) - 1));
p_eq(i - 1) = get_equilibrium_pressure(t_single, p_single);
if (i > 2)
- p_after_fill(i - 1) = get_equilibrium_pressure(t(fill_inds(i - 1):open_inds(i - 1) - 1), p(fill_inds(i - 1):open_inds(i - 1) - 1));
+ p_after_fill(i - 1) = get_fill_pressure(p(fill_inds(i - 1):open_inds(i - 1) - 1));
end
if (graph)
if (i < length(fill_inds))
weights = ((t - t(1)) / (t(end) - t(1))) .^ 10;
p_eq = weighted_mean(p, weights);
end
+
+function p_fill = get_fill_pressure(p)
+ p_fill = mean(p);
+ while (numel(p) > 2)
+ p_mean = mean(p);
+ res_sq = (p - p_mean) .^ 2;
+ p_var = mean(res_sq);
+ remove_inds = res_sq > 3 * p_var;
+ if (all(~remove_inds))
+ break ;
+ end
+ [~, remove_inds] = max(res_sq);
+ p(remove_inds) = [];
+ end
+ p_fill = p_mean;
+end