MATLAB: Check variable within 5% of a fixed value

within5%range

checkp5=1;
while checkp5<2
if prms2>=pstd2*0.95
if prms2<=pstd2*1.05
P;
Q;
T;
checkp5=2;
else
alphap=alphap*(pstd2/prms2);
P=((E/(1+v))*a_barjk'*matrixp)/(a_barjk'*a_barjk+alphap*(c'*c));
pmisfit=matrixp-((1+v)/E)*(a_barjk*P);
prms2=(1/20)*sum(pmisfit.^2,'all');
end
end
end
I need a code to check if prms2 is within 5% of pstd2(which is already fixed value) if not, P, pmisfit & prms2 will be recalculated until it falls within the 5% range

Best Answer

prms2 = inf;
limit = abs(pstd2) * 0.05;
while abs(prms2 - pstd2) < limit
alphap = alphap*(pstd2/prms2);
P = ((E/(1+v))*a_barjk'*matrixp)/(a_barjk'*a_barjk+alphap*(c'*c));
pmisfit = matrixp-((1+v)/E)*(a_barjk*P);
prms2 = (1/20)*sum(pmisfit.^2,'all');
end
Avoid lines, which do not perform anything like:
P;
Q;
T;
Sometimes unnecessary parentheses are useful, if they clarify the intention. Spaces around operators can be nice. Compare:
alphap = alphap * pstd2 / prms2;
P = E / (1+v) * a_barjk' * matrixp / ...
(a_barjk' * a_barjk + alphap * (c' * c));
pmisfit = matrixp - (1 + v) / E * a_barjk * P;
prms2 = sum(pmisfit .^ 2, 'all') / 20;