простой вопрос получения значений для печати для каждой итерации в течение l oop? - PullRequest
0 голосов
/ 11 февраля 2020

Мой код работает так, как я хочу, но для одной небольшой проблемы: строка 'print' показывает только значения для Bn для первой итерации (n = 2), но не для (n = 5 или 20) .

import numpy as np
from matplotlib import pyplot as plt
import scipy.integrate as integrate
from scipy.integrate import quad

#unique depending on the problem
y = lambda t: 3*t   
T = 4      #period
w = 2*np.pi/T #angular frequency
print('Angular Frequency [rad]:',w)
n_list = np.array([2,5,20])

#for loop for multiple n values:
for n in n_list:

    Bn = (2/T)*quad(lambda t: y(t)*np.sin(n*w*t), -T/2, T/2)[0]  #for odd functions  
    An = (2/T)*quad(lambda t: y(t)*np.cos(n*w*t), -T/2, T/2)[0]  #for even
    A0 = (1/T)*quad(lambda t: y(t), -T/2, T/2)[0]   #vertical shift

    y = lambda t: A0+An*np.cos(n*w*t)+Bn*np.sin(n*w*t) #total equation

    t = np.linspace(-6, 6)
    plt.plot(t,y(t))
    plt.title('n = %d'%n)
    print('Coefficients [V]:', 'Bn:',Bn, 'An:', An,'A0:', A0)
    plt.show() 

1 Ответ

0 голосов
/ 11 февраля 2020

Строка печати print('Coefficients [V]:', 'Bn:',Bn, 'An:', An,'A0:', A0) выполняется до выполнения строки plt.show(), поэтому строка печатается, когда n = 2, после чего открывается окно. Проблема заключается в том, что вы не можете продолжать цикл в for l oop, пока этот метод plt.show() все еще работает. Если вы попытаетесь закрыть открытое окно, вы увидите сообщение для n = 5.

Если вы хотите, чтобы был напечатан полный результат массива, вы можете сохранить их в переменной и напечатать это после окончания l oop. Или вы можете найти альтернативный способ реализации plt.show().

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