2016-12-02 36 views
0

繪製了幾個函數,現在需要說明實際面積/積分與近似面積/積分結果(使用梯形或辛普生規則計算)之間的誤差。從研究這裏/其他地方得到這些遠遠不夠,現在它只畫了一個三角形 - 我認爲這是錯誤的。任何輸入?先謝謝你。使用matplotlib說明Trapzeium/Simpson規則

N.B。如果需要的話,程序中早些時候已經計算出精確值和近似積分值。

import numpy as np 
import matplotlib.pyplot as plt 

def f1(x): 
    return np.exp(-4*x)*np.cos(6*np.pi*x) 

x = np.linspace(0, 1, 1500) 
fig = plt.figure() 
ax1 = fig.add_subplot(322) 
xstep = np.arange(0,2) 
ax1.fill_between(f1(xstep), 0, xstep, facecolor='white') # Trapezium 
ax1.plot(x, f1(x),'r-') # Function 

回答

0

是的,三角形是在錯誤的地方。

問題出在fill_between - 參數應該是(x1, y1, y2),其中y1是確定「between」之間的位置的值。如果你在代碼中增加三角形的數量,你會看到發生了什麼 - x和y軸被交換。如果您改變了三角形點的數值,那將會是正確的。

下面是我用來檢查的代碼。注意,我添加了一個可變n_steps(使它更容易測試):

import numpy as np 
import matplotlib.pyplot as plt 

def f1(x): 
    return np.exp(-4*x)*np.cos(6*np.pi*x) 

# parameters for trapezoid rule 
n_steps = 6 

# set up figure 
fig = plt.figure() 
ax1 = fig.add_subplot(111)#(322) 

# range for function 
x = np.linspace(0, 1, 1500) 
xstep = np.linspace(0, 1, n_steps) 

# plot the trapezoid 
ax1.fill_between(xstep, 0, f1(xstep), facecolor='white') 

# plot the function 
ax1.plot(x, f1(x),'r-') # Function 

plt.show() 

結果看起來像:

graph result

在y = 0的黑線是由fill_between製成。我會建議在點上放置垂直線,以便更清楚地說明計算是如何完成的。您將添加代碼爲繪製梯形後,卻繪製函數之前:

# plot vertical lines 
for xval in xstep: 
    ax1.plot((xval, xval), (0, f1(xval)), color='black') 

導致:

graph with vertical lines