2016-12-13 16 views
3

我不是很好用Python和我需要根含有內貝塞爾函數未知的公式和代碼是這樣的:函數調用的結果不是一個適當的浮點數組。 fsolve

import scipy.special as sp 
import numpy as np 
import matplotlib.pyplot as plt 
from scipy.optimize import fsolve 
import math 


eff = 50-10j     
e = 2.25     
w = 4e9*2*np.pi   
a = 7.5e-6   
c = 3e8     
p = 0.0022/100.   
L = np.sqrt(np.pi*a**2/p) 
lc= 0.05     
largo=0.38     
ancho=0.34    
prof=2./1000.    
volm=largo*ancho*prof  
volc=np.pi*a**2*lc   
volct=volm*p    
n=volct/volc    
nh=n*1e-4/(largo*ancho) 


func = lambda ec : e - (np.pi*a**2/L**2)*(2*ec*(sp.j1((ec**0.5)*w*a/c)/((ec**0.5)*w*(a/c)*sp.j0((ec**0.5)*w*a/c))))/(((((ec**0.5)*w*a/c)**2)*(sp.j1((ec**0.5)*w*a/c))/(((ec**0.5)*w*(a/c)*sp.j0((ec**0.5)*w*a/c))*np.log(L/a)))-1) - eff 


# Solver 

ec_initial_guess = 0.1 
ec_solution = fsolve(func, ec_initial_guess) 


print "Solution for ec is = %f" % ec_solution 
print "when the value of the expression is %f" % func(ec_solution) 

,我得到的錯誤:

--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
TypeError: Cannot cast array data from dtype('complex128') to dtype('float64') according to the rule 'safe' 

--------------------------------------------------------------------------- 
error          Traceback (most recent call last) 
<ipython-input-13-a9b1acf35136> in <module>() 
    40 
    41 ec_initial_guess = 1 
---> 42 ec_solution = fsolve(func, ec_initial_guess) 
    43 
    44 

/home/feliperossik/anaconda2/lib/python2.7/site-packages/scipy/optimize/minpack.pyc in fsolve(func, x0, args, fprime, full_output, col_deriv, xtol, maxfev, band, epsfcn, factor, diag) 
    144    'diag': diag} 
    145 
--> 146  res = _root_hybr(func, x0, args, jac=fprime, **options) 
    147  if full_output: 
    148   x = res['x'] 

/home/feliperossik/anaconda2/lib/python2.7/site-packages/scipy/optimize/minpack.pyc in _root_hybr(func, x0, args, jac, col_deriv, xtol, maxfev, band, eps, factor, diag, **unknown_options) 
    222    maxfev = 200 * (n + 1) 
    223   retval = _minpack._hybrd(func, x0, args, 1, xtol, maxfev, 
--> 224         ml, mu, epsfcn, factor, diag) 
    225  else: 
    226   _check_func('fsolve', 'fprime', Dfun, x0, args, n, (n, n)) 

error: Result from function call is not a proper array of floats. 

這是我的第一個問題,我很抱歉給出了這種格式,我真的不知道如何在Latex中編寫它。

我會很感激任何幫助!提前致謝!

編輯:即時通訊思想複雜是不正確的 EDIT2:本sp.j1和sp.j0是貝塞爾類函數

回答

2

fsolve()僅適用於真正的功能,並且您在ec() lambda函數的定義中使用複雜的值

eff = 50-10j 
+0

噢,生病了,必須改變功能,然後因爲我需要插入複雜的值!你有什麼建議嗎?還需要使用bessel功能!非常感謝您的回答!! –

相關問題