Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
restrepo
GitHub Repository: restrepo/ComputationalMethods
Path: blob/master/homework/homework_2018_1_05_1216730080.ipynb
934 views
Kernel: Python 3
%pylab
Using matplotlib backend: agg Populating the interactive namespace from numpy and matplotlib
from scipy.interpolate import lagrange import sympy
xp=[3,10,21.3] yp=[8,6.5,3]
x = sympy.symbols('x')
def lagrange_basis(xpoints,i): ''' This function calculate the i-th Lagrange's cardinal base (L_i) to interpolate a array of xpoints ''' numerador=1 denominador=1 for j in range(len(xpoints)): if j!=i : numerador=numerador*(x-xpoints[j]) denominador=denominador*(xpoints[i]-xpoints[j]) base_i=numerador/denominador return base_i
basis=[] for i in range(len(xp)): l_i=lagrange_basis(xp,i) basis.append(l_i)
#Para construir el polinomio se hace el producto punto del arreglo de bases de Lagrange #y las componentes en 'y' de los puntos. poly=np.dot(basis,yp)
#Se desarrollan los productos y se suman tèrminos semejantes. Lagrange_poly=sympy.expand(poly)
print(Lagrange_poly)
-0.00521578136549847*x**2 - 0.146480556534234*x + 8.48638370189219
#Usando la interpolaciòn de Scipy pol=lagrange(xp,yp) print(pol)
2 -0.005216 x - 0.1465 x + 8.486
#Evaluando la i-èsima base de Lagrange en la i-èsima coordenada x. evaluation=[] for i in range(len(xp)): l=basis[i].evalf(subs={x:xp[i]}) evaluation.append(l)
print(evaluation)
[1.00000000000000, 1.00000000000000, 1.00000000000000]
#Evaluando la primera base de Lagrange en la segunda coordenada x. basis[1].evalf(subs={x:xp[2]})
-0.e-141