TypeError:通过调用fsolve,只能将length-1数组转换为Python标量

时间:2015-03-19 11:04:02

标签: python optimization scipy

我正在尝试使用scipy.optimization中的fsolve来解决复数空间中的一组6个非线性方程。 不幸的是,我总是得到错误:

TypeError: only length-1 arrays can be converted to Python scalars

使用以下代码

import numpy as np
from scipy.optimize import fsolve

U_1  = 465
R_1  = 0.007255
R_21 = 0.006906607
M    = 585.3
p    = 2
f_1  = 91
omega_1 = np.pi*f_1
X_1sig = omega_1 * 2.0979e-4
X_2sig = omega_1 * 1.5016923e-4
X_m = omega_1 * 5.074 

def equations(p):
    P_el, P_m, I_1, I_2, s, n = p
    return (
    -P_el + 3*np.real(U_1*np.conjugate(I_1)),
    -P_el + 3*(I_1*np.conjugate(I_1)*R_1 + I_2**2*R_21/s),
    -P_m  + 3*I_2**2*R_21*(1-s)/s,
    -P_m  + M/(2*np.pi*n),
    -s    + 1 - p*n/f_1,
    -I_1  + U_1/(R_1 + 1j*X_1sig + 1j*X_m*(R_21/s+1j*X_2sig)/(1j*X_m + R_21/s + 1j*X_2sig))
    )

P_el, P_m, I_1, I_2, s, n = fsolve(equations, (180000,180000,200+80j,20,0.01,45))

我已将代码缩减为较小的示例,但随后错误消失。我听说fsolve只能解决实数空间中的问题。所以这可能是个问题。但是,我不会得到不同的错误信息吗?我仍然希望将代码用于不同的求解器(如果我找到任何复数),那么如果我先解决问题就好了。 ģ

1 个答案:

答案 0 :(得分:0)

当cel指出p时,方程(p)的参数干扰p作为全局变量。 因此解决方案是:

def equations(x0):
   P_el, P_m, I_1, I_2, s, n = x0

而不是

def equations(p):
   P_el, P_m, I_1, I_2, s, n = p