# test_deriv.py simple test from deriv import deriv print "test_deriv.py running" # deriv(order, npoints, point): # return a[] bb # compute the exact coefficients to numerically compute a derivative # of order 'order' using 'npoints' at ordinate point, # where order>=1, npoints>=order+1, 0 <= point < npoints, # 'a' array returned with numerator of coefficients, # 'bb' returned with denominator of h^order order = 2 npoints = 7 # point = 3 for point in range(npoints): bb = 0 a=[0 for i in range(npoints)] # numerator of terms returned print "a,bb = deriv(", print order, print ",", print npoints, print ",", print point, print ")" # a,bb = deriv(order, npoints, point) print "bb=", bb print "a[0]=", a[0] print "a[1]=", a[1] print "a[2]=", a[2] print "a[3]=", a[3] print "a[4]=", a[4] print "a[5]=", a[5] print "a[6]=", a[6] print " " print "deriv f(x[npoint]) = (a[0]*f(x[0]) +...+ a[points-1]*f(x[points-1]))/" print " (bb*h*h)" h=0.1 x=[0.0 for i in range(npoints)] # x values y=[0.0 for i in range(npoints)] # y = f(x) df=[0.0 for i in range(npoints)] # df(x)/dx = f'(x) ddf=[0.0 for i in range(npoints)] # d^2f(x)/dx = f''(x) for i in range(npoints): x[i] = i*h print "x[", i, "]=", x[i] print " " print "y = f(x) = x^3 + 2x^2 + 3x +4 " for i in range(npoints): y[i] = x[i]*x[i]*x[i]+2.0*x[i]*x[i]+3.0*x[i]+4.0 print "y[", i, "]=", y[i] print " " print "df(x)/dx = 3.0*x^2 + 4.0*x + 3.0" for i in range(npoints): df[i] = 3.0*x[i]*x[i]+4.0*x[i]+3.0 print "df[", i, "]=", df[i] print " " print "ddf(x)/dx = 6.0*x + 4.0" for i in range(npoints): ddf[i] = 6.0*x[i]+4.0 print "ddf[", i, "]=", ddf[i] print " " for point in range(npoints): print "check derivative at point ", point a,bb = deriv(order, npoints, point) sum = 0.0 for i in range(npoints): y[i] = x[i]*x[i]*x[i]+2.0*x[i]*x[i]+3.0*x[i]+4.0 for i in range(npoints): sum = sum + a[i]*y[i] sum = sum/(bb*h*h) print "computed derivative = ", sum, " should be =", ddf[point] print "test_deriv.py finished"