实参的复杂功能

时间:2019-05-10 13:51:30

标签: python function complex-numbers

我正在解决一个物理问题,其中我必须在存在点状带电粒子Zeff的情况下使用Schroedinger方程的无界径向解。

我在python中将UNBRWAVE函数定义为:

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:无法将复数转换为浮点数

我是python的新手,所以我想知道如何更好地编写此实参复杂函数以获取值并对其执行操作。

1 个答案:

答案 0 :(得分:0)

使用scipy.special.gamma()代替math.gamma()。后者不支持复杂参数,并抱怨无法将复杂参数转换为浮点数。

遵循@ devesh-kumar-singh建议将帮助您找到长表达式中有问题的部分。

该代码缺少a0的定义,并且nh.gamma包含一个错字。