Simple example of how to integrate a function

More information:

http://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.quad.html


In [60]:
import scipy.integrate as spi
import numpy as np
import matplotlib.pylab as plt

In [61]:
%matplotlib inline

Hello world example

Function to be integrated: $ f(x) = x² $


In [9]:
def f(x):
    return x**2

Compute the definite integral


In [15]:
spi.quad(f, 0, 4)
#-- It returns a tuple with the result and the error


Out[15]:
(21.333333333333336, 2.368475785867001e-13)

In [18]:
#--- The exact result is:
4 ** 3 / 3.


Out[18]:
21.333333333333332

Sine function inegration

Function to be integrated: $ g(x) = A \sin ( \frac{2 \pi k}{T} + \phi) $


In [63]:
##-- Function with one variable and three constants
def g(x, A = 1., k = 1, T = 1., phi = 0):
    
    #-- This is just for debugging
    print("A: {}, k:{}, T:{}, phi:{}".format(A, k, T, phi))
    
    #-- The function
    return A * np.sin(2 * np.pi * k * x / T + phi)

Function checking


In [53]:
g(1/4.)


A: 1.0, k:1, T:1.0, phi:0
Out[53]:
1.0

In [54]:
g(0)


A: 1.0, k:1, T:1.0, phi:0
Out[54]:
0.0

In [67]:
x = np.linspace(0, 1, 50)
plt.plot(x, g(x), linewidth = 2)
plt.axis([0, 1, -1.1, 1.1])
plt.grid()
plt.show()


A: 1.0, k:1, T:1.0, phi:0

In [69]:
#-- Integrate the function
spi.quad(g, a = 0, b = 1/2.)


A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
Out[69]:
(0.3183098861837907, 3.5339496460705744e-15)

In [71]:
spi.quad(g, a = 0, b = 1)


A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
A: 1.0, k:1, T:1.0, phi:0
Out[71]:
(-7.272153279333111e-18, 7.002641250699693e-15)

In [73]:
x = np.linspace(0, 1, 50)
plt.plot(x, g(x, k = 2), linewidth = 2)
plt.axis([0, 1, -1.1, 1.1])
plt.grid()
plt.show()


A: 1.0, k:2, T:1.0, phi:0

In [75]:
spi.quad(g, a = 0, b = 1/4., args = (1, 2) )  #-- k = 2


A: 1, k:2, T:1.0, phi:0
A: 1, k:2, T:1.0, phi:0
A: 1, k:2, T:1.0, phi:0
A: 1, k:2, T:1.0, phi:0
A: 1, k:2, T:1.0, phi:0
A: 1, k:2, T:1.0, phi:0
A: 1, k:2, T:1.0, phi:0
A: 1, k:2, T:1.0, phi:0
A: 1, k:2, T:1.0, phi:0
A: 1, k:2, T:1.0, phi:0
A: 1, k:2, T:1.0, phi:0
A: 1, k:2, T:1.0, phi:0
A: 1, k:2, T:1.0, phi:0
A: 1, k:2, T:1.0, phi:0
A: 1, k:2, T:1.0, phi:0
A: 1, k:2, T:1.0, phi:0
A: 1, k:2, T:1.0, phi:0
A: 1, k:2, T:1.0, phi:0
A: 1, k:2, T:1.0, phi:0
A: 1, k:2, T:1.0, phi:0
A: 1, k:2, T:1.0, phi:0
Out[75]:
(0.15915494309189535, 1.7669748230352872e-15)

TODO: Calculate the real integral and check that these results are ok