fzero无法处理不连续性

时间:2016-02-22 13:35:29

标签: matlab function

考虑以下功能:

fun=@(x) tan(x);
x = NaN*ones(100,1);             % Initializes x.
starting_points=linspace(0,4*pi,100);
for i=1:100
% Look for the zeros in the function's current window.
x(i)=fzero(fun, starting_points(i));
end
x_unique=x(diff(x)>1e-12)

该功能的输出是:

  

x_unique =

     

-0.0000       1.5708       3.1416       4.7124       6.2832       7.8540       9.4248      10.9956

我们知道这不是真的,因为tan在区间[0,4 * pi]中只有5个根,即0,pi,2 * pi,3 * pi和4 * pi。 问题是 - fzero将x值作为输出,其中函数变得不连续。如何纠正这个问题?有解决方法吗?

1 个答案:

答案 0 :(得分:1)

我终于找到了解决方法。感谢@daniel

k=1;
for i =1:size(x_unique)
    if abs(fun(x_unique(i))) < 0.01
        R(k)=x_unique(i);
        k=k+1;
    end
end

将此添加到代码的末尾。这将只给出给定函数的零。