请考虑以下代码:
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);
以消除相同的数字。
发生了什么事?我错过了什么?或者这是一个独特功能的错误?
答案 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个元素。这可能会丢掉最后一个元素。