import scipy as sp
from scipy import integrate # not included in basic scipy
import matplotlib as mpl # As of July 2017 Bucknell computers use v. 2.x
import matplotlib.pyplot as plt
# Following is an Ipython magic command that puts figures in the notebook.
# For figures in separate windows, comment out following line and uncomment
# the next line
# Must come before defaults are changed.
%matplotlib notebook
#%matplotlib
# As of Aug. 2017 reverting to 1.x defaults.
# In 2.x text.ustex requires dvipng, texlive-latex-extra, and texlive-fonts-recommended,
# which don't seem to be universal
# See https://stackoverflow.com/questions/38906356/error-running-matplotlib-in-latex-type1cm?
mpl.style.use('classic')
# M.L. modifications of matplotlib defaults using syntax of v.2.0
# More info at http://matplotlib.org/2.0.0/users/deflt_style_changes.html
# Changes can also be put in matplotlibrc file, or effected using mpl.rcParams[]
plt.rc('figure', figsize = (6, 4.5)) # Reduces overall size of figures
plt.rc('axes', labelsize=16, titlesize=14)
plt.rc('figure', autolayout = True) # Adjusts supblot parameters for new size
def func1(x): # Continuous function
return x**3
def func2(x): # Discontinuous function
if x< 2:
return x**2
if x>2:
return x**2
def func3(x): # Function with a singluarity
return sp.sin(x-2)/(x-2)
value, error = sp.integrate.quad(func1,1,2)
value, error
If there are discontinuities or singularities, quad will fail, eg.,
value, error = sp.integrate.quad(func2,1,3)
value, error
Specify troublesome points:
value, error = sp.integrate.quad(func2,1,3,points=[2,])
value, error
value, error = sp.integrate.quad(func3,0,4,points=[2,])
value, error
With $g$, $h$, $q$, and $r$ defined normally:
def func4(z,y,x): # ORDER OF ARGUMENTS IMPORTANT
return 1
def g(x):
return 0
def h(x):
return sp.sqrt(xulim**2-x**2)
def q(x,y):
return 0
def r(x,y):
return sp.sqrt(xulim**2-x**2-y**2)
xllim = 0
xulim = 2
value, error = sp.integrate.tplquad(func4, xllim, xulim, g, h, q, r)
8*value, error, 4*sp.pi*xulim**3/3.
With $g$, $h$, $q$, and $r$ defined more concisely:
g = lambda x: 0
h = lambda x: sp.sqrt(xulim**2-x**2)
q = lambda x,y: 0
r = lambda x,y: sp.sqrt(xulim**2-x**2-y**2)
xllim = 0
xulim = 2
value, error = sp.integrate.tplquad(func4, xllim, xulim, g, h, q, r)
8*value, error, 4*sp.pi*xulim**3/3.
Or even more concisely:
xllim = 0
xulim = 2
value, error = sp.integrate.tplquad(func4, xllim, xulim, \
lambda x:0, lambda x:sp.sqrt(xulim**2-x**2), \
lambda x,y:0, lambda x,y:sp.sqrt(xulim**2-x**2-y**2))
8*value, error, 4*sp.pi*xulim**3/3.
def func5(phi,theta,r):
return r**2*sp.sin(theta)
rllim = 0
rulim = 2
value, error = sp.integrate.tplquad(func5, rllim, rulim, \
lambda theta:0, lambda theta:sp.pi, \
lambda theta,phi:0, lambda theta,phi:2.*sp.pi)
value, error, 4*sp.pi*xulim**3/3.
version_information is from J.R. Johansson (jrjohansson at gmail.com) See Introduction to scientific computing with Python: http://nbviewer.jupyter.org/github/jrjohansson/scientific-python-lectures/blob/master/Lecture-0-Scientific-Computing-with-Python.ipynb for more information and instructions for package installation. If version_information has been installed system wide (as it has been on linuxremotes), continue with next cell as written. If not, comment out top line in next cell and uncomment the second line.
%load_ext version_information
#%install_ext http://raw.github.com/jrjohansson/version_information/master/version_information.py
version_information scipy, matplotlib