改进对数量化器的代码

计算科学 matlab 非线性方程
2021-12-11 15:14:52

我正在实现一个对数量化器,其定义如下:

q(u)={ui,ui1+δ<u<ui1δ0,0uuo1+δq(u), u<0

根据这些表达式计算不同的参数:

ui=p1iuo, i=1,2,
δ=1p1+p
umin=uo1+δ

有关量化器的更多信息,请参阅本文:具有输入量化的不确定非线性系统的自适应反步控制

为了编写一个函数以在 MATLAB 中实现它,我编写了以下代码:

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

现在,我的问题是尽可能地改进代码。例如,while(1)编码不同量化级别的循环应该消失并被替换。任何想法将不胜感激。

0个回答
没有发现任何回复~