TypeError:*之后的f_p()参数必须是可迭代的,而不是numpy.float64

时间:2019-12-26 11:35:54

标签: python arrays vector complex-numbers

我正在编码一种算法,该算法采用拉普拉斯变换的逆函数,对其进行迭代,直到收敛并实时绘制图形为止。到目前为止,我已经处理了很多错误,并解决了所有错误,但是在这个错误上,我很困惑。这是我从中得到错误的函数f_p()。对于上下文,它包含6个Laplace变换,我通过手工得出这些变换以消除虚部:

def f_p(u, omega, m):
    a = gamma
    b = (omega + k * math.pi) / u

    if m == 1:
        f = a * (1 / (a ** 2 + (b + 1) ** 2) + 1 / (a ** 2 + (b - 1) ** 2))
        return f * math.cos(omega)
    elif m == 2:
        f = a / (a ** 2 + b ** 2)
        return f * math.cos(omega)
    elif m == 3:
        f = math.e ** (-a / (a ** 2 + b ** 2)) * (a ** 2 + b ** 2) ** (1 / 4) * math.cos(
            (math.atan2(b, a) + 2 * n * math.pi) / 2) * math.cos(b / (a ** 2 + b ** 2)) / (
                    math.sqrt(a ** 2 + b ** 2) * (math.cos((math.atan2(b, a) + 2 * n * math.pi) / 2) ** 2 + math.sin(
                        (math.atan2(b, a) + 2 * n * math.pi) / 2)))
        return f * math.cos(omega)
    elif m == 4:
        a = math.e
        f = -(a * math.log(a ** 2 + b ** 2) + a ** 2) / (a ** 2 + b ** 2)
        return f * math.cos(omega)
    elif m == 5:
        f = a * (math.e ** (-a) * math.cos(b) - math.e ** (-2 * a) * math.cos(2 * b)) / (a ** 2 + b ** 2)
        return f * math.cos(omega)
    elif m == 6:
        f = math.sqrt((a ** 2 - b ** 2 + 1) ** 2 + (2 * a * b) ** 2) * math.cos(
            (math.atan2(2 * a * b, a ** 2 - b ** 2 + 1) + 2 * n * math.pi) / 2) / (
                    ((a ** 2 - b ** 2 + 1) ** 2 + (2 * a * b) ** 2) * (
                        math.cos((math.atan2(2 * a * b, a ** 2 - b ** 2 + 1) + 2 * n * math.pi) / 2) ** 2 + math.sin(
                            (math.atan2(2 * a * b, a ** 2 - b ** 2 + 1) + 2 * n * math.pi) / 2) ** 2))
        return f * math.cos(omega)
    else:
        return 0

此函数馈入另一个函数f_u(),该函数包含算法本身,该算法集成在omega上,并将其作为变量删除。剩下的变量是u,我需要对其进行迭代,直到函数收敛为止。这是算法的执行:

u = np.linspace(0.000001, 100, 100000)

if __name__ == '__main__':
    pool = Pool(processes=4)

    for m in range(1, 7):
        if m == 4:
            gamma = math.e
        else:
            gamma = 10

        pool.map(f_u, u)

也许是语法问题?我不知道。任何帮助将不胜感激。

0 个答案:

没有答案