使用线性插值找到x截距

时间:2016-05-17 15:57:38

标签: matlab interpolation

我正在学习数学分析课程,对matlab来说还是一个新手。这是我获得的更大任务中的一个步骤。

我有一组值,x和y的69个值,我想解决x截距的曲线。我没有x = 0的相应值。

我的想法是在最接近0的点之间线性插值以获得直线的系数,然后求解x = 0,但我无法弄清楚如何去做。

我找到了最接近x = 0的值并将它们存储在向量中:

x = [0.251287 0.2555517];
y = [0.014228 -0.003326];

所以我已经知道x截距大约是0.25。

我的方法是使用interp1:

pp = interp1(x,y,'linear','pp');

然后使用我从pp得到的系数来解决它。系数为-4.11677和0.014228。如果我将这些值用于x = 0,但是我得到一个非常远的答案,0.003456。

我觉得我的方法中有些东西都是错的。有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

interp1用于在两点之间插值。所以你得到的第二个系数就是第一对分数的y值。如果你想使用polyfit,你需要在两个x值之间推断到域之外,但这是一种非常笨重的线性回归方法。

相反,您应该使用p = polyfit(x,y,1) 将数据拟合为您选择的多项式。您可以在整个数据集上执行此操作,也可以在已识别的2对值上执行此操作。因为在第二种情况下,您已经在使用线性回归(阶数为1的多项式),您可以这样做:

p(2)

x-intercept = -p(2)/p(1) 将是你的y拦截。 x截距将是:

polyfit

请参阅import pandas as pd from StringIO import StringIO text = """Date Ticker Open High Low Adj_Close Volume 2015-04-09 vws.co 315.000000 316.100000 312.500000 311.520000 1686800 2015-04-10 vws.co 317.000000 319.700000 316.400000 312.700000 1396500 2015-04-13 vws.co 317.900000 321.500000 315.200000 315.850000 1564500 2015-04-14 vws.co 320.000000 322.400000 318.700000 314.870000 1370600 2015-04-15 vws.co 320.000000 321.500000 319.200000 316.150000 945000 2015-04-16 vws.co 319.000000 320.200000 310.400000 307.870000 2236100 2015-04-17 vws.co 309.900000 310.000000 302.500000 299.100000 2711900 2015-04-20 vws.co 303.000000 312.000000 303.000000 306.490000 1629700 2016-03-31 mmm 166.750000 167.500000 166.500000 166.630005 1762800 2016-04-01 mmm 165.630005 167.740005 164.789993 167.529999 1993700 2016-04-04 mmm 167.110001 167.490005 165.919998 166.399994 2022800 2016-04-05 mmm 165.179993 166.550003 164.649994 165.809998 1610300 2016-04-06 mmm 165.339996 167.080002 164.839996 166.809998 2092200 2016-04-07 mmm 165.880005 167.229996 165.250000 167.160004 2721900""" df = pd.read_csv(StringIO(text), delim_whitespace=1, parse_dates=[0], index_col=0) HERE上的Matlab信息。