假设双曲线的一般公式为 y = 1 / (a*x + b),我们提供了 100 个数据点,其中 99 个点完全符合双曲线,1 个数据点不符合(未知) ,从这些信息中,我们需要找到将由提供的正确数据点形成的双曲线的 a 和 b 参数的近似值。
我采用的方法是使用 scipy.optimize.curve_fit 方法作为“参数,_ = optimize.curve_fit(test, x_data ,y_data)”,其中我的“测试”函数是“def test(x, a, b): return 1 / (a*x + b)" 使用这种方法为我提供了完美的解决方案,我的数据点都在第一象限,但是如果数据分布在多个象限中,那么这种方法会失败,我得到错误的 a 和 b 值.
代码:
import numpy as np
from scipy import optimize
x_data = np.linspace(-5,1, num=99)
y_data = 1 / (5 * x_data + 4) # value of original value of a = 5 & b = 4
np.random.seed(0)
# adding wrong point at 36th position
x_data = np.insert(x_data, 36 , 7)
y_data = np.insert(y_data, 36, 5)
def test(x, a, b):
return 1 / (a*x + b)
parameters, _ = optimize.curve_fit(test, x_data ,y_data)
[a,b] = parameters
a = 146.83956808191303
b = 148.78257639384725
# which is too wrong
上述解决方案肯定会受到赞赏。