GDIDP_AMAT_16_Ejercicios_Practica4

hace 381 días por etlopez16

Normas de entrega:

 

 

  1. Compartir esta hoja de Sage con el profesor: etlopez16.
  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 Practica4_NombreGrupo.pdf
  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 INTERPOLACIÓN DE CURVAS

A continuación se cargan las funciones auxiliares spline3 y curvaTrozos

%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 
       

Sean a, b, c, d las cuatro últimas cifras de la suma de los DNI de los componentes del grupo.

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

 
       

Ejercicio 2. Calcula la curva de Bezier dada por los nodos $(0,0)$ y $(0,0)$ (el mismo punto repetido) y puntos de control $(2,2)$ y $(-2,2)$. ¿Se puede conseguir que la curva obtenida sea cerrada y diferenciable (es decir, que no tenga "picos")? Razona la respuesta.

 
       

Problema.

Interpola la curva paramétrica definida a continuación mediante splines. Para ello elige al menos 40 puntos para interpolar y aplica el método anterior. 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))