Комплексная функция реальных аргументов - PullRequest
0 голосов
/ 10 мая 2019

Я решаю физическую задачу, в которой мне приходится работать с неограниченным радиальным решением уравнения Шредингера в присутствии точечной заряженной частицы Zeff.

Я определяю функцию UNBRWAVE в python как:

import numpy as np
import math as mh
from mpmath import *
a0 = 1/3.7 #edited new
Zeff = 1.0 #edited new

def UNBRWAVE(r, k, L, n, l):
      return (2.0*np.pi)**(3.0/2.0)*(2.0*k*r)**L*(np.sqrt(2.0/np.pi)*np.abs(mh.gamma(L+1.0-(1j*Zeff)/(k*a0)))*np.exp(np.pi*Zeff/(2.0*k*a0)))/nh.gamma(2.0*L+1.0+1.0)*np.exp(-1j*k*r)*hyp1f1(L+1.0-(1j*Zeff)/(k*a0), 2.0*(L+1.0), 2.0*1j*k*r)

Где Zeff = 1, 1j - мнимая единица, а hyp1f1 - гипергеометрическая функция 1F1. Входными параметрами являются r (действительное число), k (действительное число), L (целое число), n (целое число), l (целое число). Всякий раз, когда я вызываю эту функцию, как в

UNBRWAVE(10.0, 5.0, 5, 1, 0) 

Я получаю сообщение об ошибке

TypeError: невозможно преобразовать сложное в float

Я новичок в python, поэтому я хотел бы знать, как лучше кодировать эту сложную функцию реальных аргументов для получения значений и выполнения операций с ними.

1 Ответ

0 голосов
/ 10 мая 2019

Используйте scipy.special.gamma () вместо math.gamma(). Последний не поддерживает сложный аргумент и жалуется, что не может преобразовать сложный в плавающее.

Следование совету @ devesh-kumar-singh поможет вам найти проблемную часть длинного выражения.

В коде отсутствует определение a0, а nh.gamma содержит опечатку.

...