# Improve code of logarithmic quantizer

I am implementing a logarithmic quantizer which is defined as follows:

$$q(u) = \begin{cases} u_i , \frac{u_i}{1+\delta} < u < \frac{u_i}{1-\delta} \\ 0 , 0 \leq u \leq \frac{u_o}{1+\delta} \\ -q(-u), \ u < 0 \end{cases}$$

where the different parameters are computed based upon these expressions:

$$u_i = p^{1-i}u_o, \ i = 1,2,\dots$$ $$\delta = \frac{1-p}{1+p}$$ $$u_{min} = \frac{u_o}{1+\delta}$$

More information regarding the quantizer can be found at this paper: Adaptive Backstepping Control of Uncertain Nonlinear Systems with Input Quantization.

In order to code a function to implement it in MATLAB, I wrote the following piece of code:

function q_u = logarithmic_hysteretic_quantizer(u,step,u_min)

u_o = u_min*(1+step);
p = (1-step)/(1+step);

if u < 0

q_u = -logarithmic_hysteretic_quantizer(-u,step,u_min);

elseif ( (u >= 0) && (u <= u_o/(1+step)) )

q_u = 0;

else

i = 1;

while (1)

u_i = p^(1-i) * u_o;

if ( (u > u_i/(1+step)) && (u <= u_i/(1-step)) )

q_u = u_i;
break;

end

i = i + 1;
end
end
end


Now, my issue is to improve the code as much as I can. For example, the while(1) loop, which codes the different quantization levels, is something that should go away and be replaced. Any thoughts would be really appreciated.

• This is not really what this particular StackExchange forum is there for: Optimize code. But separately, before you optimize, what is your evidence that the code as is is actually problematic and needs to be optimized? – Wolfgang Bangerth Feb 5 at 17:46
• Yes, I know about the particular forum but I had to include equations and stackoverflow doesn't allow MathJax at all, as far as I know. Code works but this kind of infinite loop being broken at some time, isn't a good programming technique. That is why I would like some advice. – Teo Protoulis Feb 5 at 17:57
• You can include formulas by delimiting them with dollar signs, as usual in LaTeX. If your goal is just advise on how to program, or improve code, there is a whole StackExchange forum for just that. – Wolfgang Bangerth Feb 5 at 19:52