我正在尝试使用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只能解决实数空间中的问题。所以这可能是个问题。但是,我不会得到不同的错误信息吗?我仍然希望将代码用于不同的求解器(如果我找到任何复数),那么如果我先解决问题就好了。 ģ
答案 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