python quad: интегрирование по одной переменной при обработке другой переменной как константы? - PullRequest
0 голосов
/ 08 февраля 2020

Я делаю простую интеграцию, единственное, что я хочу сохранить 'n' в качестве переменной. Как я могу сделать это, все еще интегрируя по t?

import numpy as np
import matplotlib as mpl
from matplotlib import pyplot as plt
import scipy.integrate as integrate
from scipy.integrate import quad
import math as m
y = lambda t: 3*t
T = 4      #period
n = 1
w = 2*np.pi*n/T

#for odd functions
def integrand(t):
    #return y*(2/T)*np.sin(w*t)
    return y(t)*np.sin(n*w*t)
Bn = (2/T)*quad(integrand,-T/2,T/2)[0]
print(Bn)

1 Ответ

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

Используя квад, вы не можете. Возможно, вы ищете интеграцию symboli c, как если бы вы делали ручку и бумагу; sympy может помочь вам здесь:

import sympy

x = sympy.Symbol("x")
t = sympy.Symbol("t")
T = sympy.Symbol("T")
n = sympy.Symbol("n", positive=True)

w = 2 * sympy.pi * n / T
y = 3 * t

out = 2 / T * sympy.integrate(y * sympy.sin(n * w * t), (t, -T/2, T/2))
print(out)
2*(-3*T**2*cos(pi*n**2)/(2*pi*n**2) + 3*T**2*sin(pi*n**2)/(2*pi**2*n**4))/T

Если вы хотите оценить интеграл для многих n, quadpy может помочь:

import numpy as np
from quadpy import quad

y = lambda t: 3 * t
T = 4
n = np.linspace(0.5, 4.5, 20)
w = 2 * np.pi * n / T


# for odd functions
def integrand(t):
    return y(t) * np.sin(np.multiply.outer(n * w, t))


Bn = (2 / T) * quad(integrand, -T / 2, T / 2)[0]
print(Bn)
[ 2.95202424  4.88513496  4.77595051  1.32599514 -1.93954768 -0.23784853
  1.11558278 -0.95397681  0.63709387 -0.4752673   0.45818227 -0.4740128
  0.35943759 -0.01510463 -0.30348511  0.09861289  0.25428048  0.10030723
 -0.06099483 -0.13128359]
...