GDI_AMAT_18_Ejercicios_P3P4

233 days ago by etlopez18

Interpolación y Splines


Normas de entrega

  1. Compartir esta hoja de Sage con el profesor.
  2. En el desplegable "File" de la parte superior de la página, elegir "Print"
  3. Imprimir la página resultante como pdf. Nombrarla como GrupoABCD_Practica3.pdf (elegir un nombre para el grupo)
  4. Subirla al campus virtual antes de la fecha límite. Cada día a partir de la fecha límite, la nota sobre la que se puntúa la práctica bajará en un punto.

 

 

 Ejercicios

1. $a,b,c, d$ son las cuatro últimas cifras de la suma de los DNI de los componentes del grupo. Calcula el polinomio de interpolación de los puntos $(-1,a),(0,b),(1,c),(2,d)$ con los tres métodos vistos.

 
       


2. Calcula el spline lineal que interpola $(-1,a),(0,b),(1,c),(2,d)$

 
       

3. Pinta en una misma gráfica los puntos del ejercicio anterior, el polinomio de interpolación, el spline lineal y el  spline cúbico natural. ¿Qué valores toma cada uno de ellos (el polinomio y los dos splines) en el punto x=2? ¿Deberían tomar los mismos valores?

 
       

4. ¿Crees que cambiando los valores de a, b, c y d podría darse el caso de que el polinomio de interpolación de los puntos anteriores, el spline lineal y el spline cúbico fuesen exactamente iguales?

(Razona la respuesta: si crees que no, explica por qué; si crees que sí, muestra un ejemplo en que se pueda dar)

 
       

5. Obtén la interpolación polinomial de la curva que pasa por los puntos $(-1,a)$, $(0,b)$, $(1,c)$, $(-0.5,d)$ en los tiempos $0,1,2,3$ y dibújala.


 
       

Problema.

Interpola la curva paramétrica definida a continuación mediante splines. Para ello elige al menos 40 puntos para interpolar. Elige el tipo de splines que consideres más adecuado para esta interpolación. Dibuja los puntos y la interpolación conseguida.

#Curva a interpolar cx(t)=sin(t)*(e^(cos(t))-2*cos(4*t)-sin(t/12)^5) cy(t)=cos(t)*(e^(cos(t))-2*cos(4*t)-sin(t/12)^5) parametric_plot((cx(t),cy(t)),(t,-pi,pi)) 
       
 
       

Funciones auxiliares spline3 y curvaTrozos (se cargan solas)

%auto # Función para calcular los splines. Recibe un vector de puntos y devuelve el spline que interpola los puntos # Tiene un parametro metodo que puede tomar los valores lineal, natural (cúbico) o periodico (cúbico) def spline3(puntos,metodo='natural'): if metodo=='lineal': MP=Matrix(puntos) n=MP.dimensions()[0] s=Piecewise([([(MP[k,0],MP[k+1,0]),MP[k,1]+(x-MP[k,0])*(MP[k+1,1]-MP[k,1])/(MP[k+1,0]-MP[k,0])]) for k in range(n-1) ]) return s else: MP=Matrix(puntos) n=MP.dimensions()[0]-1 A=matrix(RDF,4*n) b=vector(RDF,4*n) # Rellenamos las condiciones de los puntos extremos A[0,0:4]=matrix(RDF,[[1,MP[0,0],MP[0,0]^2,MP[0,0]^3]]) b[0]=MP[0,1] A[1,(4*n-4):(4*n)]=matrix(RDF,[[1,MP[n,0],MP[n,0]^2,MP[n,0]^3]]) b[1]=MP[n,1] if metodo=='natural': A[2,0:4]=matrix(RDF,[[0,0,2,6*MP[0,0]]]) b[2]=0 A[3,(4*n-4):(4*n)]=matrix(RDF,[[0,0,2,6*MP[n,0]]]) b[3]=0 elif metodo=='periodico': A[2,0:4]=matrix(RDF,[[0,1,2*MP[0,0],6*MP[0,0]]]) A[3,0:4]=matrix(RDF,[[0,0,2,6*MP[0,0]]]) b[2]=0 A[2,(4*n-4):(4*n)]=matrix(RDF,[[0,-1,-2*MP[n,0],-3*MP[n,0]^2]]) A[3,(4*n-4):(4*n)]=matrix(RDF,[[0,0,-2,-6*MP[n,0]]]) b[3]=0 else: show('No existe ese método.') # Rellenamos las condiciones intermedias for i in range(1,n): A[4*i,4*(i-1):4*i]=matrix(RDF,[[1,MP[i,0],MP[i,0]^2,MP[i,0]^3]]) b[4*i]=MP[i,1] A[4*i+1,4*i:4*(i+1)]=matrix(RDF,[[1,MP[i,0],MP[i,0]^2,MP[i,0]^3]]) b[4*i+1]=MP[i,1] A[4*i+2,4*(i-1):4*(i+1)]=matrix(RDF,[[0,1,2*MP[i,0],3*MP[i,0]^2, 0,-1,-2*MP[i,0],-3*MP[i,0]^2]]) b[4*i+2]=0 A[4*i+3,4*(i-1):4*(i+1)]=matrix(RDF,[[0,0,2,6*MP[i,0],0,0,-2,-6*MP[i,0]]]) b[4*i+3]=0 # Resolvemos el sistema c=A.solve_right(b); s=Piecewise([([(MP[k,0],MP[k+1,0]),c[4*k]+c[4*k+1]*x+c[4*k+2]*x^2+c[4*k+3]*x^3]) for k in range(n) ]) return s # Función para dibujar una curva dada por dos funciones a trozos def curvaTrozos(sx,sy): Mx=matrix(sx.intervals()) My=matrix(sy.intervals()) n=Mx.dimensions()[0] G=points((sx.functions()[0](x=Mx[0,0]),sy.functions()[0](x=My[0,0])),rgbcolor='red', pointsize=120) for i in range(0,n): G=G+points((sx.functions()[i](x=Mx[i,0]),sy.functions()[i](x=My[i,0])),rgbcolor='red', pointsize=120) G=G+parametric_plot((sx.functions()[i],sy.functions()[i]),(x,sx.intervals()[i][0],sx.intervals()[i][1]),thickness=4) G=G+points((sx.functions()[n-1](x=Mx[n-1,1]),sy.functions()[n-1](x=My[n-1,1])),rgbcolor='red', pointsize=120) return G