python 中线性插值的逻辑错误
logical error in Linear interpolation in python
我的线性插值有一些逻辑错误,它适用于某些情况但不完全有效。
我尝试用不同的方式来编写外推案例的逻辑。
def interpolate(x, y, x_test):
for i in range(len(x)):
if x[i] > x_test: #extrapolated condition: when the largest value of
x_below = i - 1 #list x is greater than x_test
x_above = i
y_below = i - 1
y_above = i
break
elif x[i] < x_test: #extrapolated condition: when the largest value of
x_below = i + 1 #list x is greater than x_test
x_above = i
y_below = i + 1
y_above = i
break
else: #interpolated condition: when x_test lies between
return y[i] #two sample points.
#a = (yabove - ybelow) / (xabove - xbelow)
a = (y[y_above] - y[y_below]) / (x[x_above] - x[x_below])
#b = ybelow - a * xbelow
b = y[y_below] - a * x[x_below]
#y’ = a * x’ + b
return a * x_test + b
interpolate([1, 3, 5], [1, 9, 25], 5.0)
我预计输出是25,但实际输出是17.0.
我想你正在寻找这样的东西:
def interpolate(x, y, x_test):
for i in range(len(x)):
if x[i] > x_test: #extrapolated condition: when the largest value of
x_below = i - 1 #list x is greater than x_test
x_above = i
y_below = i - 1
y_above = i
continue # <---- I changed break to continue
elif x[i] < x_test: #extrapolated condition: when the largest value of
x_below = i + 1 #list x is greater than x_test
x_above = i
y_below = i + 1
y_above = i
continue # <---- I changed break to continue
else: #interpolated condition: when x_test lies between
return y[i] #two sample points.
#a = (yabove - ybelow) / (xabove - xbelow)
a = (y[y_above] - y[y_below]) / (x[x_above] - x[x_below])
#b = ybelow - a * xbelow
b = y[y_below] - a * x[x_below]
#y’ = a * x’ + b
return (a * x_test + b)
print(interpolate([1, 3, 5], [1, 9, 25], 5.0))
输出:
25
注意,我将 breaks
更改为 continues
。
我的线性插值有一些逻辑错误,它适用于某些情况但不完全有效。
我尝试用不同的方式来编写外推案例的逻辑。
def interpolate(x, y, x_test):
for i in range(len(x)):
if x[i] > x_test: #extrapolated condition: when the largest value of
x_below = i - 1 #list x is greater than x_test
x_above = i
y_below = i - 1
y_above = i
break
elif x[i] < x_test: #extrapolated condition: when the largest value of
x_below = i + 1 #list x is greater than x_test
x_above = i
y_below = i + 1
y_above = i
break
else: #interpolated condition: when x_test lies between
return y[i] #two sample points.
#a = (yabove - ybelow) / (xabove - xbelow)
a = (y[y_above] - y[y_below]) / (x[x_above] - x[x_below])
#b = ybelow - a * xbelow
b = y[y_below] - a * x[x_below]
#y’ = a * x’ + b
return a * x_test + b
interpolate([1, 3, 5], [1, 9, 25], 5.0)
我预计输出是25,但实际输出是17.0.
我想你正在寻找这样的东西:
def interpolate(x, y, x_test):
for i in range(len(x)):
if x[i] > x_test: #extrapolated condition: when the largest value of
x_below = i - 1 #list x is greater than x_test
x_above = i
y_below = i - 1
y_above = i
continue # <---- I changed break to continue
elif x[i] < x_test: #extrapolated condition: when the largest value of
x_below = i + 1 #list x is greater than x_test
x_above = i
y_below = i + 1
y_above = i
continue # <---- I changed break to continue
else: #interpolated condition: when x_test lies between
return y[i] #two sample points.
#a = (yabove - ybelow) / (xabove - xbelow)
a = (y[y_above] - y[y_below]) / (x[x_above] - x[x_below])
#b = ybelow - a * xbelow
b = y[y_below] - a * x[x_below]
#y’ = a * x’ + b
return (a * x_test + b)
print(interpolate([1, 3, 5], [1, 9, 25], 5.0))
输出:
25
注意,我将 breaks
更改为 continues
。