【发布时间】:2015-03-19 20:07:12
【问题描述】:
我正在尝试使用 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只能解决实数空间的问题。所以这可能是问题所在。但是我不会收到不同的错误消息吗?我仍然想将代码用于不同的求解器(如果我发现任何用于复数),所以如果我先解决这个问题会很好。 G
【问题讨论】:
-
你检查过
equations(x0)的输出吗?返回的元组似乎有问题。 -
尤其是
-s + 1 - p*n/f_1,中的p似乎很可疑。
标签: python optimization scipy