2016-12-13 17 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功能!非常感谢您的回答!! –

相关问题