代码需要永远提出解决方案

时间:2018-05-30 21:21:23

标签: python-3.x matplotlib

我基本上想要的是比较时间值(t1和tuit)(以小时为单位)来确定在名为'stijghoogteverlaging'的函数中用于计算'S'和'k'的方法。然后可以使用这些值进行拟合曲线。

我尝试了多种方法,比如在两种方法下放置'return s'。

api

但是我得到了一条错误的拟合曲线,如下图所示。 现在我尝试只放一个'return s',但是这需要永远计算,我必须打断内核。

api(options, resp => {
  console.log(resp.headers.get('x-expires-at'));
});

有没有人有解决方案?

t1和pb1的使用值:

Used values for t1 and pb1.

绘制错误的拟合曲线(以分钟为单位的时间)。

Plot with a wrong fitted curve(time in minutes).

1 个答案:

答案 0 :(得分:0)

函数stijghoogteverlaging一遍又一遍地执行无意义操作:

def stijghoogteverlaging(t, k, S):
    for i in range(len(t1)):
        if t1[i] < tuit:
            s = Q / (4 * np.pi * k * D) * exp1(S * r**2 / (4 * k * D * t))
        else:
            s = Q / (4 * np.pi * k * D) * ((exp1(S * r**2 / (4 * k * D * t))) - (exp1(S * r**2 / (4 * k * D * (t - tuit)))))
    return s

您正在迭代len(t1)次,并且在每次迭代中,您每次都在计算s的完整向量化值。这意味着您每次调用计算len(t)**2个值,并使用Python for循环作为外部循环来执行此操作。作为次要问题,您将x-data作为全局变量t1而不是传入的本地值t

你的功能应该看起来更像这样:

def stijghoogteverlaging(t, k, S):
    return np.where(t < tuit,
            Q / (4 * np.pi * k * D) * exp1(S * r**2 / (4 * k * D * t)),
            Q / (4 * np.pi * k * D) * ((exp1(S * r**2 / (4 * k * D * t))) - (exp1(S * r**2 / (4 * k * D * (t - tuit)))))
    )

这会计算每次调用的len(t) * 2值,而不是len(t)**2,并为t的每个值从相应的结果中选择一个值。