根据规则' safe'无法将dtype(' complex128')中的数组数据投射到dtype(' float64')

时间:2018-03-07 16:33:14

标签: python numpy optimization scipy complex-numbers

我正在尝试解决优化问题,如下所示。但每次我收到错误Cannot cast array data from dtype('complex128') to dtype('float64') according to the rule 'safe'。 任何人都可以帮我看看代码中的错误吗?

def func(vec):

    linspec = -(kx**2)+((1.-nu)*(kx**4))
    lin = linspec*np.fft.fft(vec)
    nlin = np.zeros_like(lin)
    nlinre = vec*vec
    nlinspec = np.fft.fft(nlinre)
    nlin = (0.5*1j*kx*nlinspec)
    sol = lin+nlin
    rhs = np.zeros_like(sol, dtype='complex')
    sol -= rhs
    sol = np.fft.ifft(sol).real

    return sol

def kssol(u0):

    u1 = np.ones((2*Mx,), dtype='complex')
    #u1 = 100.*u0
    u = scipy.optimize.fsolve(func, u1)

    return u 

1 个答案:

答案 0 :(得分:0)

scipy.optimize.fsolve从R n ↦R找到函数的根。你的函数lsof -i:3306 似乎是C n ↦R,特别是起点brew install mysql 具有明确的复杂类型(虽然它的值是真实的),而这正是错误所讨论的内容。

如果您的输入始终是真实的,只需在func中设置u1即可。否则,您必须使用不同的功能进行优化,例如来自同情的mpmath.findroot