在python中绘制梯形逼近误差

时间:2015-11-26 21:15:03

标签: python-3.x

我试图编写一个函数,用于绘制复合梯形法则与步长的误差。

显然,这并不好看,因为我刚刚开始学习这些东西。

无论如何我设法得到了情节和一切,但我应该得到一个斜坡2的情节,所以我需要帮助找出我出错的地方。

from  scipy import *
from  pylab import *
from matplotlib import *



def f(x):                               #define function to integrate       
    return exp(x)
a=int(input("Integrate from? "))        #input for a
b=int(input("to? "))                    #inpput for b
n=1                                     

def ctrapezoidal(f,a,b,n):              #define the function ctrapezoidal
    h=(b-a)/n                           #assign h
    s=0                                 #clear sum1-value
    for i in range(n):                  #create the sum of the function
        s+=f(a+((i)/n)*(b-a))             #iterate th sum
    I=(h/2)*(f(a)+f(b))+h*s             #the function + the sum
    return (I, h)                            #returns the approximation of         the integral

val=[]                                  #start list 
stepsize=[]
error=[]

while len(val)<=2 or abs(val[-1]-val[-2])>1e-2:   
        I, h=ctrapezoidal(f,a,b,n)
        val.append(I)
        stepsize.append(h) 
        n+=1

for i in range(len(val)):
        error.append(abs(val[i]-(e**b-e**a)))
error=np.array(error)
stepsize=np.array(stepsize)
plt.loglog(stepsize, error, basex=10, basey=10)
plt.grid(True,which="both",ls="steps")
plt.ylabel('error')
plt.xlabel('h') 

0 个答案:

没有答案