Как вы воссоздаете сигма-нотацию, используя Numpy? - PullRequest
2 голосов
/ 27 февраля 2020

Мне нужно построить следующую функцию, используя Python, numpy и matplotlib:

See function in image:

для значений N = 5, 20 и 60.

Я создал список нечетных чисел, используя:

def odd(n):
nums = []
for i in range(1, 2*n, 2):
    nums.append(i)
return nums

Но я не знаю, как использовать это в сигма-функции, потому что мне нужно варьировать свои значения x и суммировать по функция для диапазона нечетного (n).

Ответы [ 3 ]

1 голос
/ 27 февраля 2020

Код без чистых Python петель:

def Psi(x, N=7):
    """Note: N should be odd """
    _s = np.arange(1, int((N + 1) / 2) + 1) 
    return 2 * np.sum(np.where(_s % 2, 1, -1) * np.sin((2 * _s - 1) * x)) / (N + 1)
1 голос
/ 27 февраля 2020

Если вы хотите построить (т.е. визуализировать) функцию для некоторого N, то процедура выглядит следующим образом:

  1. Создайте массив значений x. В этом случае имеет смысл выбрать диапазон от -pi до pi.
  2. Напишите al oop, который вычисляет один sin () за раз, и суммируйте результат в другом массиве, который мы называем Psi.
  3. Наконец, умножьте Psi на константу 2 / (N + 1).
  4. График результата
import numpy as np
import matplotlib.pyplot as plt

# x is 100 equally spaced points from -pi to pi, inclusive
x = np.linspace(-np.pi, np.pi, 100) 
Psi = 0*x # now Psi is an array of zeros

N = 60
# second input of range is N+1 since our index n satisfies 1 <= n < N+1
# third input makes n increment by 2 each loop instead of the default 1
for n in range(1, N+1, 2):
    Psi += -1**((n-1)/2) * np.sin(n*x)

Psi *= 2/(N+1)

plt.plot(x, Psi)

N=5 N=20 N=60

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

Этот код не имеет циклов и должен работать для любых значений x и N.

x должен быть массивом или списком с более чем 1 элементом

import numpy as np
from numpy import matlib
import matplotlib.pyplot as plt

def psi(x,N):
   n=np.arange(0,N,2)+1 
   sigma = matlib.repmat((-1)**((n-1)/2),len(x),1).T*np.sin(matlib.repmat(n,len(x),1).T*x)
   PSI = (2/(N+1))*np.sum(sigma,axis=0)
   return PSI
x=np.linspace(0,2*np.pi,50)
N=5
y = psi(x,N)
plt.plot(y)

enter image description here

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