2015-03-19 29 views
0

我試圖使用fsolve從scipy.optimization解決一組6個非線性方程組中的複數空間。 Unfortuantely我總是得到錯誤:類型錯誤:只有長度爲1的陣列可以被轉換到Python標量,通過調用fsolve

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

你檢查'方程(X0)'的輸出?似乎返回的元組有問題。 – cel 2015-03-19 11:23:55

+1

尤其是'p'在'-s + 1 - P * N/F_1,'似乎非常可疑。 – cel 2015-03-19 11:32:45

回答

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 
相關問題