Erro, используя genlaguerre в python? - PullRequest
0 голосов
/ 03 февраля 2020

Я пытаюсь построить графики следующего уравнения в Python.

Решение радиального дифференциального уравнения двумерного квантового кольца

Бета-параметр

enter image description here

Это была моя попытка

    import numpy as np
from scipy.special import gamma, genlaguerre
import matplotlib.pyplot as plt
from scipy import exp, sqrt

m = 0.067*9.1*10E-31
R = 5E-9
r = np.linspace(0, 20E-9)
#Definição do parâmetro beta

def beta(gama):
    flux = np.linspace(0,1.0)
    beta = sqrt((m-flux)**2+(gama**4)/4)
    return beta

def Rn(n,gama):

    raiz = sqrt((gamma(n+1)/((2**beta(gama)) * gamma(n+beta(gama)+1))))
    eval_g = genlaguerre((n,beta(gama)),((gama * r/R)**2/2))
    exp_g = exp(-((gama * r/R)**2)/4)


    return  (1/R) * raiz * (gama * r/R)**beta(gama) * exp_g * eval_g

sol1 = Rn(0,1.5)
sol2 = Rn(0,2.0)
sol3 = Rn(0,2.5)
sol4 = Rn(0,3.0)


fig, ax = plt.subplots()
ax.plot(r/R, sol1, color = 'red', label = '$\gamma$ = 1.5')
ax.plot(r/R, sol2, color = 'green', label = '$\gamma$ = 2.0')
ax.plot(r/R, sol3, color = 'blue', label = '$\gamma$ = 2.5')
ax.plot(r/R, sol4, color = 'black', label = '$\gamma$ = 3.0')
ax.legend()
ax.set_xlabel('R/r')
ax.set_ylabel('$R_0(r)$')

erro с использованием genlaguerre

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Здесь ссылка на статью

Ответы [ 2 ]

0 голосов
/ 21 марта 2020

Извини! Радиальная волновая функция изделия неверна! Я сделал расчеты и нашел правильный ответ. Следующий код правильный

import numpy as np
from scipy.special import genlaguerre, gamma
import numpy as np
import matplotlib.pyplot as plt

m = 0 # magnetic number
flux = 0  # Phi in eqn 8
R = 5  # nm
r = np.linspace(0, 6 * R)

rho = r / R

def R0(n, gama):
    beta = np.sqrt((m - flux)**2 + gama**4/4)
    return (gama/R*
            np.sqrt(gamma(n+ 1) / ( 2**beta * gamma(n + beta + 1))) *
            (gama * rho)**beta *
            np.exp(-gama**2 * rho**2 / 4) *
            genlaguerre(n, beta)(gama**2 * rho**2 / 2))


sol1 = R0(0, 1.5)
sol2 = R0(0, 2.0)
sol3 = R0(0, 2.5)
sol4 = R0(0, 3.0)

plt.plot(rho, sol1, rho, sol2, rho, sol3, rho, sol4)
plt.legend(['$\gamma = 1.5$', '$\gamma = 2$', '$\gamma = 2.5$', '$\gamma = 3$'])
plt.ylabel('$R_{0}(r)$')
plt.xlabel('$r/R$')
plt.show()
0 голосов
/ 03 февраля 2020

Я не в эту топи c, но на самом деле есть по крайней мере следующие ошибки (я предполагаю, что установка молча n = 0 была специально):

  1. В отличие от опубликованных В образе бета-функции вы добавили деление на 4 в своем определении функции.
    Правильная версия:
    def beta(gama): 
        return np.sqrt((m-flux)**2+(gama**4))

Это не причина для распределения вместо фиксированных пиков, но я говорю то, что вижу здесь.

Продукт вместо деления из-за отсутствия паратезов в определении амплитудной функции: Правильная версия:
    def amplitude(gama):
        return np.sqrt(gamma(1)/((2**beta(gama)*gamma(beta(gama)+1))))
В определении функции Rn отсутствует введение 1 / R.

Однако все это, к сожалению, не меняет пиков, которые должны происходить при равных положениях х ...

...