2016-02-22 58 views
0

考慮下面的函數:fzero不能處理不連續性

[email protected](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

也許'abs(tan(x_unique))<0.1'?看看值是否接近零。 – Daniel

+1

問題在於fzero會查找函數更改符號的點,而tan()更改周圍(2n-1)pi/2的符號。這與斷斷續續沒有任何關係。 – gariepy

+0

@gariepy所以,我該怎麼做如果只想得到零功能? – Rhinocerotidae

回答

1

我終於找到了解決方法。感謝@丹尼爾

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 

將此代碼添加到代碼結尾。這將只給出給定函數的零。

+0

您可以使用'fzero'的第二個輸出參數來避免第二次評估'fun'。 – horchler