我有一些数据 interesting_data =
-0.5665 -0.5329 -0.2251 0.2251 0.5329 0.5689
很明显索引3和4之间存在零交叉。我发现我可以使用此函数来获得pchip插值的零交叉点。
fzero(@(xi)interp1(1:1:length(interesting_data),interesting_data,xi,'pchip'),3)
所以我相信matlab在[3,4]之间有pchip插值的后置函数。假设pchip模块将生成等式为y = a x ^ 2 + b x + C,x在[3,4]之内,或者类似的东西。我希望知道fomular,然后我可以计算过零位置的推导,在这种情况下,x = 3.5。 有没有办法做到这一点?或者直接从隐藏方程中推导出推导的任何函数?
答案 0 :(得分:0)
为什么不看看标志何时翻转。这是你的阵列和标志:
array =[ -0.5665 -0.5329 -0.2251 0.2251 0.5329 0.5689];
sign(array)
ans =
-1 -1 -1 1 1 1
当符号发生变化时,它将返回2或-2
diff(sign(array))
ans =
0 0 2 0 0
所以只需找到非零
find(abs(diff(sign(array))))
ans =
3
让我们尝试另一个数组
array=randn(1,10)
array =
1.42837429557213 1.40677399588789 0.257616732589725 -0.93068654061524 0.391997711945428 1.53494945223268 -1.03683690895487 0.126547794228052 -0.394102426308772 -0.562889126426436
diff(sign(array))
ans =
0 0 -2 2 0 -2 2 -2 0
find(diff(sign(array)))
ans =
3 4 6 7 8