Python: присвоение значений подмножеству массива на основе условий индекса - Квантовая механика - PullRequest
0 голосов
/ 09 апреля 2020
import numpy as np
import matplotlib.pyplot as plt
import scipy.constants as pc
import math
import sys
import matplotlib.cm as cm
import time
from scipy.sparse import csc_matrix
from scipy.sparse.linalg import splu
from scipy.sparse import spdiags
import scipy.integrate as intg
np.set_printoptions(threshold=sys.maxsize)


dx=0.05 # x step , difference between x values
x0=0
sigma=0.7 #S.D of the gaussian
k0=15 #momenta of the wave packet**strong text**
Norm=(((2*np.pi)**(1/2))*sigma)**(-1/2) #gaussian normalisation
startx=-20 #beginning x value
stopx=100 #end x value 
dt=0.001 #timestep
t0=0 #starting time

tmax=3  #code will output a wavefunction at tmax
ts=np.array([t0]) 
start=startx #beginning x value
stop=stopx #end x value  
xvalues=np.arange(start,stop,dx) #creates an array of x values spacing dx**strong text**

def potential(length):
    '''input the potential function here, returns an array of the potential values'''
    V=np.zeros(length,complex)
    height=50    #height of potential
    barrier_start=48; barrier_end=50    #values in x space
    i = int(startx + (barrier_start + 1 - startx)/dx)   #lower bound
    j = int(startx + (barrier_end + 1 - startx)/dx)    #upper bound
    for k in range(i,j):
        V[k] = height
    else: 
        V[k] = np.zeros(length,complex)

return V

Эта проблема относится к квантово-механическому моделированию волнового пакета, взаимодействующего с потенциалом, если это помогает. По сути, потенциальная функция начинается с [0,0, ..., 0], и я хочу, чтобы она стала [0,0, ... высота, высота, высота, ..., 0,0], где высота например, 5 и индексы, в которых значение есть высота, удовлетворяют неравенству, замеченному выше. Т.е. для индекса k: нижняя граница

1 Ответ

0 голосов
/ 18 апреля 2020

Вы можете создать маску непосредственно на основе значений х. Например:

x = linspace(0,1,100)
V = 1-x;                         # assign values to full array
V[x<0.5] = exp( x[x<0.5] )       # overwrite at all x satisfying the condition
...