GIIT_AMA_1718_T3_Tutorial_0

483 days ago by GIIT_AMA_1718

Curvas y funciones

 

 

Funciones de una variable

Comenzaremos definiendo una función (matemática) y representándo su gráfica entre $-2\pi$ y $2\pi$.

f(x)=exp(sin(x)) pf=plot(f(x),(x,-2*pi,2*pi),legend_label='$f(x)='+latex(f(x))+'$') pf 
       

Recordemos que Sage puede calcular la derivada mediante el método diff() y para calcular las derivadas sucesivas, basta escribir el número de veces que queremos derivar entre los paréntesis.

df=f.diff() ddf=f.diff(2) pdf=plot(df(x),(x,-2*pi,2*pi),color='red',legend_label="$f'(t)="+latex(df(x))+"$") pddf=plot(ddf(x),(x,-2*pi,2*pi),color='green',linestyle='--',legend_label="$f''(x)="+latex(ddf(x))+"$") pf+pdf+pddf 
       

Recordemos que la derivada de la función se anula en los extremos relativos (máximos o mínimos locales). Así que podemos calcular los ceros de la derivada para obtener los extremos. La función solve de Sage resuelve ecuaciones, pero puede que no nos de todas las soluciones (como sucede en este caso, que sólo nos da un cero de la funcion)

solve(df(x)==0,x) 
       

Afortunadamente, sabemos cuáles son todos los ceros de la derivada. Así que podemos usar esto para mostrar los máximos y mínimos (en el dibujo sólo se ha mostrado un máximo y un mínimo).

xmax=pi/2 xmin=3*pi/2 pmax=point( (xmax,f(xmax)), color='orange', size=20 ) + text(u'máximo',(xmax,f(xmax)+0.1), color='orange' ) pmin=point( (xmin,f(xmin)), color='purple', size=20 ) + text(u'mínimo',(xmin,f(xmin)+0.1), color='purple' ) pf+pdf+pmax+pmin 
       

Curvas

Vamos a ver cómo representar y estudiar curvas en el plano. Recordemos que una curva puede estar descrita en coordenadas paramétricas o mediante su ecuación implícita.

Paramétricas

La ecuación de una curva en coordenadas paramétricas consiste en dos funciones que dependen de un parámetro, una para cada coordenada, de modo que los puntos de la curva se obtienen sustituyendo los valores del parámetro en las ecuaciones. Por ejemplo, recordemos que un círculo en coordenadas paramétricas tiene como ecuación $(\cos(t),\sin(t))$, $t \in [0,2 \pi)$.

r(t)=1 circulo(t)=(r(t)*cos(t),r(t)*sin(t)) parametric_plot(circulo(t),(t,0,2*pi)) 
       

La derivada de la función nos da la dirección de la recta tangente.

tcirculo=circulo.diff(t) parametric_plot(circulo(t),(t,0,2*pi))+arrow(circulo(pi/4),circulo(pi/4)+tcirculo(pi/4)/4,color='black') 
       

Podemos dibujar otra curva y su tangente en varios puntos:

r(t)=sin(2*t) curva(t)=(r(t)*cos(t),r(t)*sin(t)) tcurva=curva.diff(t) parametric_plot(curva(t),(t,0,2*pi))+sum([arrow(curva(t0),curva(t0)+tcurva(t0)/9,color='black') for t0 in [0,pi/12..2*pi]]) 
       

Recordemos que la curva nos da la posición de cada punto en términos de un parámetro. Por tanto, es sencillo realizar cálculos sobre todos los puntos de la curva. Por ejemplo, calculemos el punto en el que la coordenada $x$ toma su valor máximo. Para ello, basta tomar la primera ecuación de la curva, que nos da la posición $x$ en términos del parámetro:

plot(curva(t)[0],(t,0,2*pi)) 
       

Ahora calculamos para qué valor del parámetro alcanza el máximo, calculando la posición del máximo de la función anterior. Esto es muy complicado hacerlo son solve (en muchas ocasiones será imposible), por eso estudiaremos métodos en este tema para reemplazar a solve. En particular, hay que obtener todas las soluciones y luego quedarnos con aquellas que están en el intervalo que nos interesa.

sposx=solve(curva(t)[0].diff()==0,t,to_poly_solve='force',solution_dict=true) ls=[k[t] for k in sposx] lsr=[k.substitute(k.variables()[0]==0) for k in ls] lsr=[ RDF(k+2*pi) if k<0 else RDF(k) for k in lsr] lsr.sort() lsr 
       

Sabemos que los máximos están en la primera y la tercera posición. Así que sustituimos en la curva para obtener los puntos correspondientes y los representamos.

parametric_plot(curva(t),(t,0,2*pi))+sum([arrow(curva(t0),curva(t0)+tcurva(t0)/9,color='black') for t0 in [lsr[0],lsr[2]]])+points([curva(lsr[0]),curva(lsr[2])],size=40,color='red') 
       

Veamos otro ejemplo de curva paramétrica. El espirografo es un juguete de Hasbro que consiste en una rueda dentada que gira en el interior de otra rueda. La rueda interior tiene varios agujeros donde se puede insertar un lápiz y así dibujar unas curvas. (Ver dibujo.)

 

La curva que produce el espirografo se puede parametrizar, obteniendo la expresión

$( (1-k)*\cos(t)+l k \cos( (1-k)t/k , (1-k) \sin(t) - l k \sin( (1-k)t/k ),$

donde $k$ es el cociente entre los radios de las ruedas y $l$ es el cociente entre la distancia del lápiz al centro de la rueda interior y el radio de dicha rueda.

# Definimos la curva k0=2/5 l0=0.4 c(t,k,l)=( (1-k)*cos(t)+l*k*cos((1-k)*t/k) , (1-k)*sin(t)-l*k*sin((1-k)*t/k) ) 
       
# Pintamos la curva con dos valores de l, el valor l=0 nos dará el recorrido del centro de la rueda interior ps=parametric_plot(c(t,k0,l0),(t,0,2*k0.numerator()*pi),axes=false,color='red') pc=parametric_plot(c(t,k0,0),(t,0,2*k0.numerator()*pi),axes=false,color='black',linestyle='--') ps+pc+point((0,0),color=(0.15,1,0.15),size=100,faceted=true) 
       

Implícitas

Una segunda forma de definir una curva, esta más compleja, es mediante una ecuación. Esto se denomina ecuación implícita. Podemos dibujarla con Sage mediante el comando implicit_plot, pero hay que tener en cuenta que es un proceso más complicado y que puede no obtener todos los puntos de la curva.

eq_elipse(x,y)=2*x^2+3*y^2==1 implicit_plot(eq_elipse(x,y),(x,-0.9,0.9),(y,-0.6,0.6)) 
       

Para obtener los puntos de intersección de dos curvas implícitas, basta resolver el sistema formado por las dos ecuaciones. Por ejemplo, calculando la intersección con $x=0.4$ obtenemos los dos puntos en la vertical del 0.4.

i_04=[(k[x],k[y]) for k in solve([eq_elipse(x,y),x==0.4],x,y,solution_dict=true)] implicit_plot(eq_elipse(x,y),(x,-0.9,0.9),(y,-0.6,0.6))+points(i_04,size=50,color='black') 
       

También podemos encontrar la intersección de dos elipses:

eq_elipse2(x,y)=2*x^2+x+3*y^2-y==1 i_elipses=[(k[x],k[y]) for k in solve([eq_elipse(x,y),eq_elipse2(x,y)],x,y,solution_dict=true)] implicit_plot(eq_elipse(x,y),(x,-0.9,0.9),(y,-0.6,0.6))+implicit_plot(eq_elipse2(x,y),(x,-1.2,0.6),(y,-0.5,0.9),color='green')+points(i_elipses,size=50,color='black') 
       

Si queremos encontrar la intersección con una curva en paramétricas, basta sustituir las funciones coordenadas de la curva paramétrica en la ecuación implícita y obtener los valores del parámetro que lo verifican:

s_inter=solve(eq_elipse(curva(t)[0],curva(t)[1]),t,to_poly_solve='force',solution_dict=true) ls=[k[t] for k in s_inter] ls 
       

De nuevo tenemos que quitar el parámetro que nos aparece y tomar todas las soluciones entre 0 y $\pi$.

lsr=[k.substitute(k.variables()[0]==0) for k in ls]+[k.substitute(k.variables()[0]==0)+pi for k in ls] lsr=[ CDF(k+2*pi) if k<0 else CDF(k) for k in lsr] lsr 
       

Nos quedamos con los valores reales (aquellos puntos que tengan parte imaginaria pequeña, también los consideramos reales).

lsr=[abs(k) for k in lsr if abs(k.imag_part())<10^-10] lsr 
       

Ahora evaluamos la curva paramétrica en los valores anteriores para obtener los puntos.

d_inter_curvas=parametric_plot(curva(t),(t,0,2*pi),color='green')+points([curva(abs(k)) for k in lsr],color='black',size=40)+implicit_plot(eq_elipse(x,y),(x,-0.9,0.9),(y,-0.6,0.6)) d_inter_curvas 
       

Por último, podemos obtener el valor de la normal a la curva en esos puntos, simplemente derivando la ecuación.

f_elipse(x,y)=2*x^2+3*y^2 n_elipse=f_elipse.diff() d_inter_curvas+sum([arrow( curva(abs(k)) , curva(abs(k))+n_elipse(*curva(abs(k)))/10 ) for k in lsr]) 
       

Los métodos anteriores sólo son viables cuando las curvas son muy simples. Cuando las curvas se complican deberemos utilizar métodos numéricos. Y es posible tener curvas muy complicadas.

eq_rara(x,y)=exp(sin(x^2+y^2)+sin(x)+cos(y))==1 implicit_plot(eq_rara(x,y),(x,-10*pi,10*pi),(y,-10*pi,10*pi)) 
       

Practica

1. Representa la función $f(x)=(1+x)/(1+x^2)$. Representa también sus máximos, mínimos y puntos de inflexión.

2. Prueba modificar la función $r(t)$ de la ecuación en paramétricas del círculo. Por ejemplo, cambia la función por una creciente y el intervalo donde está representada por el intervalo $(0,10 \pi)$, de modo que obtengas una espiral. Añade sus tangentes en algunos puntos.

3. Encuentra el punto de la gráfica del espirografo con mayor coordenada 'y'. No resuelvas la ecuación con solve como hemos visto arriba (es difícil, aunque no imposible), sino pinta la función que controla la coordenada 'y' y su derivada 'calcula a ojo' dónde está el cero. 

4. Se considera el lugar geométrico de los puntos del plano tal que su suma de distancias a los puntos $(-2,0)$ y $(2,0)$ vale 5 (elipse). Representa esa curva.

5. Se considera el lugar geométrico de los puntos del plano tal que el producto de sus distancias a los puntos $(-2,0)$ y $(2,0)$ vale 17. Representa esa curva. Representa los puntos donde la coordenada $x$ es igual a la coordenada $y$. Representa el vector normal en esos puntos.