Python.Проблемы с интегралами.Ошибка TypeEr: только массивы размера 1 могут быть преобразованы в скаляры Python - PullRequest
0 голосов
/ 21 октября 2018

Я пытаюсь найти массив встроенных функций, но у меня есть некоторые проблемы с формами и размерами.Я нашел коэффициент k, а затем я нашел энергию для интервала x = (0, a), где a = 1 и n = (-Nmax, Nmax).Я также пытался их векторизовать.Но каждый раз это дает мне новые ошибки.Я не уверен, как это исправить, потому что мне нужна эта функция интегрирования для вызова другой функции для построения графика.

def k_n(n):
    k = fsolve(lambda n : np.tan(n*a/2.) - np.tanh(n*a/2.),n)
    return(k)

def E(n):
    return(np.piecewise(n,[n<0.,n>=0.],
                        [lambda n: -k_n(n)**2 ,
                         lambda n: k_n(n)**2 ]))

def integrand1(x,n):
    return(np.sin(k_n(n)*x)**2)

def integrand2(x,n):
    return((np.sin(k_n(n)*a/2.))**2*(np.sinh(k_n(n)*(a-x)))**2/2*
np.exp(-a*k_n(n))*(np.sinh(k_n(n)*a/2.))**2)

def integrate(n): 
    integrand = spi.integrate.quad(integrand1,0,a/2,args=(n))+spi.integrate.quad(integrand2,a/2,a,args=(n)) 
    one = np.true_divide(1, integrand )
    return(one)

возможно проблема в n_r и x_r

n_r = np.arange(-Nmax, Nmax,1)
x_r = np.arange(0,a,.1)

print(k_n(n_r))
print(E(n_r))
print(integrate(n_r))`

TypeError: только Python-массивы размера 1 могут быть преобразованы в Python scalars.in _quad return _quadpack._qagse (func, a, b, args, full_output, epsabs, epsrel, limit

1 Ответ

0 голосов
/ 21 октября 2018

Вы не можете отправить массив в вашу функцию для интеграции.Ожидается, что функция quad будет иметь только один выход из функции (как вы ожидаете от математической функции).Но вы можете перебрать массив n_r:

n_r = np.arange(-Nmax, Nmax,1)
x_r = np.arange(0,a,.1)

print(k_n(n_r))
print(E(n_r))
print(np.array([integrate(n) for n in n_r]))

В результате получается двумерный массив numpy.

...