python科学编程为什么在绘制正确结果时出现空白?

时间:2017-01-14 19:20:31

标签: python-3.x matplotlib scipy scientific-computing quad

我想绘制如下所述的整合结果,但似乎结果是一张白纸,原因是什么?请帮我!

# -*- 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()

输出,但情节是空白的!

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 个答案:

答案 0 :(得分:2)

您在图中没有看到任何内容的原因是您正在绘制仅有一个单点的几个线图。由于线条需要一个开始和结束(意味着至少两个点),因此图形保持空白。

显示积分的最简单方法是在' b--'plt.plot()的电话中替换marker="o"

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

另一种选择是首先在列表中收集所有积分结果,然后在线图中绘制完整列表:

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()

答案 1 :(得分:0)

我也许找到了答案,因为每次只绘制一个点,而不是线。如果你设置了'' ,然后你发现它真的不是空白,而是一些点。