Matlab的独特功能无法正常工作

时间:2016-02-24 17:19:29

标签: arrays matlab unique

请考虑以下代码:

Nor_x_f=0.23;N=10;T_r=1.2;fun=@(x) tan(x*(1-Nor_x_f)/sqrt(T_r))+(sqrt(1/T_r)*tan(Nor_x_f*x));ub=6*pi;
while 1
    p_zeros= NaN*ones(100,1); %Possible zeroes
    t_u_zeros=NaN*ones(1,100);
    starting_points=linspace(0,ub,200);
    for i=1:200
        % Look for the zeros in the functions current window.
        p_zeros(i)=fzero(fun, starting_points(i));
    end
    u_zeros=p_zeros(diff(p_zeros)>1e-4);%Unique zeros
    k=1;
    for i =1:size(u_zeros,1) %This is a column vector
        if abs(fun(u_zeros(i))) < 0.01
            t_zeros(k)=u_zeros(i);
            t_u_zeros=unique(t_zeros);
            k=k+1;
        end
    end
    if size(t_u_zeros,2) == N+1
    break;
    elseif size(t_u_zeros,2) > N+1
    ub=ub-(pi/4);
    elseif size(t_u_zeros,2) < N+1
    ub=ub+(pi/4);
    end
end

此代码将t_u_zeros的输出显示为

  

-3.98469691056082e-20 3.41630960177882 10.0537539879730 13.4659245023669 16.8860053973345 23.5241876330466 26.9318782023573 30.3553383996551 36.9949907705359 40.3978901377654 40.3978901377654

请注意,即使在使用唯一函数(t_u_zeros=unique(t_zeros);)并使用此行后,最后两个元素也相似:u_zeros=p_zeros(diff(p_zeros)>1e-4);以消除相同的数字。

发生了什么事?我错过了什么?或者这是一个独特功能的错误?

1 个答案:

答案 0 :(得分:2)

我能够找出问题并重现问题:

>>p_zeros=[1,2,3,4,4,1.5,3.00001,99];
>>u_zeros=p_zeros(diff(p_zeros)>1e-4);
>>u_zeros

u_zeros =

    1.0000    2.0000    3.0000    1.5000    3.0000

我不确定你的过滤器应该如何工作(它是否打算排除4和99之类的数字?)但它绝对保持变量的值彼此接近。可能sort(p_zero)有帮助。如果您在解决问题时遇到问题,请更新您的问题并说明这些行应该做什么。另请注意,diff(x)具有n-1个元素,而x具有n个元素。这可能会丢掉最后一个元素。