Я решаю физическую задачу, в которой мне приходится работать с неограниченным радиальным решением уравнения Шредингера в присутствии точечной заряженной частицы 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, поэтому я хотел бы знать, как лучше кодировать эту сложную функцию реальных аргументов для получения значений и выполнения операций с ними.