2016-12-02 7 views
0

いくつかの関数をプロットし、実際の面積/積分と近似面積/積分結果(台形またはシンプソンのいずれかのルールを使用して計算)間の誤差を説明する必要があります。ここまでや他の場所を調べることから遠く離れていて、現時点では1つの三角形しか描画していません。間違った位置にあると思います。どんな入力?前もって感謝します。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軸は入れ替えられます。これを変更すると、三角形の点は正しい値になります。

ここで私が確認したコードです。 Iは、可変n_stepsが追加されたことに注意してください(これは容易にテストするために作られた):

graph result

fill_betweenによって行われるY = 0での黒線を:

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

結果は次のように見えます。計算がどのように行われるかをより明確にするために、ポイントに垂直線を配置することをお勧めします。

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

になり:

graph with vertical lines

あなたは台形をプロットした後、関数をプロットする前に、そのためのコードを追加します
関連する問題