我想找到作为向量给出的函数的零。它来自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
答案 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];