我有一个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
结果是: