我有一个Fa数组,其中包含从函数中找到的值有没有办法在Matlab中使用interp1函数来查找特定值出现的索引我找到了interp1的教程,通过知道相应的索引值,可以使用interp1在数组中找到特定的值。
来自http://www.mathworks.com/help/matlab/ref/interp1.html的示例:
这里有两个向量,分别代表1900年至1990年的人口普查年和相应的美国百万人口。

t = 1900:10:1990;
p = [75.995  91.972  105.711  123.203  131.669...
    150.697  179.323  203.212  226.505  249.633];

这个表达式在1975年的人口普查数据中进行插值以估计人口结果是
ans =
    214.8585

-但我想找到214.8585的interp1(t,p,1975)值。

最佳答案

在某种意义上,你想找到函数的根-
f(x)-val
首先,可能有几个答案其次,由于函数是分段线性的,所以可以通过求解相关的线性方程来检查每一段。
例如,假设您拥有以下数据:

t = 1900:10:1990;
p = [75.995  91.972  105.711  123.203  131.669...
    150.697  179.323  70.212  226.505  249.633];

你想找到140的值
val = 140;
figure;plot(t,p);hold on;
plot( [min(t),max(t)], [val val],'r');

您应该首先从val中减去p的值,
p1 = p - val;

现在您只需要p1符号改变的段,从+>-开始,或者从a*x+b==0开始,反之亦然。
segments = abs(diff(sign(p1)==1));

在这些段中,您可以解相关的线性方程,并找到根那是你的价值指数。
for i=1:numel(segments)
    x(1) = t(segments(i));
    x(2) = t(segments(i)+1);
    y(1) = p1(segments(i));
    y(2) = p1(segments(i)+1);
    m = (y(2)-y(1))/(x(2)-x(1));
    n = y(2) - m * x(2);
    index = -n/m;
    scatter(index, val ,'g');
end

结果是:

10-08 01:43