0

我想把积分结果画成如下图,结果好像是一张白纸,是什么原因?请帮我!

# -*- 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
4

2 回答 2

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()
于 2017-01-14T20:19:03.300 回答
0

我可能会找到答案,因为每次您只绘制一个 dot 而不是 lines 。如果你设置'bs',你会发现它真的不是一个空白,而是一些点。

于 2017-01-14T20:24:35.467 回答