回 帖 发 新 帖 刷新版面

主题:利用fzero循环求解y=tan(y)

y=tan(y)在整个数轴上有无穷解,我只要求[0;60*pi]区间上的

下面是我的程序:
>>a=0.01;
>>for i=0:59;
 >>X=fzero(@(y) y-tan(y),a);
 >>a=X+pi;
 >>t(i+1)=X;
>>end

不知道什么原因,只能求出3个解,到7.多时马上回到1.5几,下面是我的结果
-0.000000006571222    4.493409457909064    7.725251836937707
1.570796326794896    4.712388980384688    7.725251836937707
1.570796326794896    4.712388980384688…………

1.5几是pi/2,为啥就算到他了呢?
而且第二个解和后面的4.7几不一样,为什么会这样,tan(4.712388980384688)=5.1019e+014也不等于4.712388980384688啊
请指教

回复列表 (共2个回复)

沙发

fzero寻找的其实不是严格意义的0点,而是函数值符号改变点,如果函数是连续的,函数值符号改变点自然是0点,如果函数不是连续的话那就会返回不连续点。所以你要保证每一次循环的时候都只在函数的连续段里寻找根,比如这样:

clear all
a=0; t=[];

while a<61*pi
    X=fzero(@(y) y-tan(y),[a,a+pi/2-1000*eps]);
    a=a+pi;
if X<60*pi t(end+1)=X; end
end

板凳

确实,读help文件时太粗心了,谢谢帮助

我来回复

您尚未登录,请登录后再回复。点此登录或注册