Как исправить для цикла для списка - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь создать y в виде массива, чтобы создать функцию, повторяющуюся через дзета, которая зависит от E, используя цикл for. Однако значения не добавляются в список.

Я также пытался определить переменные и математическую функцию как две разные функции кодирования

снимок экрана

import cmath

import matplotlib.pyplot as plt

a = 2*10**-15
Vo = 83*10**6
m = 1.6726*10**(-27)
pi = cmath.pi
E = []
E.append(-83*10**6)
hbar = 6.62607015*10**(-34)/ pi
K = 16.032280*10**6
y = []
y.append(51311.18131)

def variables(y, E):
    for i in range(1, 83, 1):
        alpha = cmath.sqrt(2*m*(E[i-1]+Vo)/(hbar**2))
        zeta = alpha*a
        eta = cmath.sqrt(k - zeta**2)
        y[i] = zeta*cmath.tan(zeta) - eta
        E[i] = E[i-1] + 1
    return y, E
print('E = ', E, 'Y = ', y)
plt.plot(E, y)

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

Ответы [ 2 ]

1 голос
/ 10 октября 2019

Вам не нужно, чтобы цикл был в функции, просто поместите его на верхний уровень скрипта. И используйте y.append() и E.append() для добавления в эти списки.

for i in range(1, 83):
    alpha = cmath.sqrt(2*m*(E[i-1]+Vo)/(hbar**2))
    zeta = alpha*a
    eta = cmath.sqrt(k - zeta**2)
    y.append(zeta*cmath.tan(zeta) - eta)
    E.append(E[i-1] + 1)
0 голосов
/ 10 октября 2019

В дополнение к ответу @ Barmar ваша переменная k должна быть K (в верхнем регистре).

import cmath

import matplotlib.pyplot as plt

a = 2*10**-15
Vo = 83*10**6
m = 1.6726*10**(-27)
pi = cmath.pi
E = [0] * 83
E.append(-83*10**6)
hbar = 6.62607015*10**(-34)/ pi
K = 16.032280*10**6
y = [0] * 83
y.append(51311.18131)

for i in range(1, 83, 1):
    alpha = cmath.sqrt(2*m*(E[i-1]+Vo)/(hbar**2))
    zeta = alpha*a
    eta = cmath.sqrt(K - zeta**2)
    y[i] = zeta*cmath.tan(zeta) - eta
    E[i] = E[i-1] + 1

print('E = ', E, 'Y = ', y)
plt.plot(E, y)

Также не требуется использовать append, как иногда appendне всегда хорошо работает с поиском рассчитанного индекса. Для вас может быть лучше инициализировать списки y и E, чтобы они сначала были длиной вашего цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...