如何在matlab中找到作为向量给出的函数的零点? fzero似乎只适用于分析功能

时间:2015-05-20 16:52:35

标签: matlab

我想找到作为向量给出的函数的零。它来自ode45。

向量y(x)不一定在y = 0轴上具有点。如果函数从上面穿过y = 0,下面的代码将起作用,但是如果它是切向的话会怎样。矢量类似于倾斜的正弦波,但并不完全。与7次多项式拟合仅适用于半周期。

yx = find(y>0,1,'first');                   % Choose 1st ‘y’ Point >0
y0 = 0;
x0 = interp1(y(yx-1:yx),x(yx-1:yx),y0);     % Find Zero Cross Between `enter code here`Bracket Points

1 个答案:

答案 0 :(得分:2)

如果您的数据非常干净,那么您可以查找函数更改符号或命中零的位置:

ix_solutions = find(y(1:end-1) .* y(2:end) <=0 );

然而,这有一个问题,如果一个点在零轴上,将作为一个解决方案计算两次。考虑到评论中s.bandara的建议,可以编写更好的实施方案:

signs = sign(y(:));
ix_zeros     = find(signs == 0);
ix_crosses   = find(abs(diff(signs)) == 2);
ix_solutions = [ix_zeros; ix_crosses];