from __future__ import print_function import matplotlib.pyplot as plt import numpy as np import sympy # create a bunch of symbols a, b, c, d, x, alpha, beta = sympy.symbols('a b c d x alpha beta') # create a polynomial function f(x) f = a*x**3 + b*x**2 + c*x + d # get its derivative f'(x) fp = f.diff(x) # evaluate both at x=0 and x=1 f0 = f.subs(x, 0) f1 = f.subs(x, 1) fp0 = fp.subs(x, 0) fp1 = fp.subs(x, 1) # we want a, b, c, d such that the following conditions hold: # # f(0) = 0 # f(1) = 0 # f'(0) = alpha # f'(1) = beta S = sympy.solve([f0, f1, fp0-alpha, fp1-beta], [a, b, c, d]) # print the analytic solution and plot a graphical example coeffs = [] num_alpha = 0.3 num_beta = 0.03 for key in [a, b, c, d]: print(key, '=', S[key]) coeffs.append(S[key].subs(dict(alpha=num_alpha, beta=num_beta))) xvals = np.linspace(0, 1, 101) yvals = np.polyval(coeffs, xvals) plt.plot(xvals, yvals) plt.show()