0

I want to plot the integration results as described below , but it seems turned out to be a blank sheet, what' s the reason ? please help me!

# -*- coding: utf-8 -*-
import matplotlib.pylab as plt
import numpy as np
import scipy as sp
from scipy.integrate import quad, dblquad, tplquad

x = np.arange(0,1,0.1) 
print ("x = ", x)

def f(x):
    return x
print ("f(x) = ", f(x))

x_lower = 0
for x_upper in x :

  val, abserr = quad(f, x_lower, x_upper)
  print ("integral value =", val, ", x_upper = ", x_upper ,", absolute error =", abserr)
  plt.plot(x_upper, val, ' b--' )

plt.show()

The output, but plot is blank!

x =  [ 0.   0.1  0.2  0.3  0.4  0.5  0.6  0.7  0.8  0.9]
f(x) =  [ 0.   0.1  0.2  0.3  0.4  0.5  0.6  0.7  0.8  0.9]
integral value = 0.0 , x_upper =  0.0 , absolute error = 0.0
integral value = 0.005000000000000001 , x_upper =  0.1 , absolute  error = 5.551115123125784e-17
integral value = 0.020000000000000004 , x_upper =  0.2 , absolute  error = 2.2204460492503136e-16
integral value = 0.04500000000000001 , x_upper =  0.3 , absolute error = 4.996003610813205e-16
integral value = 0.08000000000000002 , x_upper =  0.4 , absolute error = 8.881784197001254e-16
integral value = 0.125 , x_upper =  0.5 , absolute error = 1.3877787807814457e-15
integral value = 0.18000000000000005 , x_upper =  0.6 , absolute error = 1.998401444325282e-15
integral value = 0.24500000000000005 , x_upper =  0.7 , absolute error = 2.720046410331634e-15
integral value = 0.32000000000000006 , x_upper =  0.8 , absolute error = 3.552713678800502e-15
integral value = 0.40499999999999997 , x_upper =  0.9 , absolute error = 4.496403249731884e-15

2 Answers2

2

The reason you do not see anything in the plot is that you are plotting several line plots of only one single point. Since lines would need a start and and end (meaning at least two points) the graph stays blank.

The easiest way of showing your points would be to replace ' b--' in your call to plt.plot() by marker="o":

plt.plot(x_upper, val, marker="o", color="b")

A different option is to first collect all the integration results in a list, and then plot the complete list in a line plot:

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

x = np.arange(0,1,0.1) 

def f(x):
    return x

x_lower = 0
vals = []
for x_upper in x :
    val, abserr = quad(f, x_lower, x_upper)
    vals.append(val)

plt.plot(x, vals, "b--")

plt.show()
ImportanceOfBeingErnest
  • 321,279
  • 53
  • 665
  • 712
0

I find the answer perhaps, for each time you plot only one dot, but not lines . If you set 'bs' ,then you find it really not a blank, but some dots.