Sunteți pe pagina 1din 12

Cónicas y cuádricas

Álgebra con MATLAB: Práctica 4

Curso 2006-2007

Reducción de la ecuación de una cónica


Vamos a utilizar MATLAB para pasar a forma reducida la cónica de
ecuación
x2 + y 2 − 2xy + 2x − 1 = 0.
Como muchos de los cálculos que estamos aprendiendo a hacer con MATLAB,
éste se puede plantear de forma numérica o simbólica. Vamos a hacerlo
simbólicamente y de paso aprenderemos algunos de los comandos que se
utilizan para reducir o expandir expresiones algebraicas.
Como siempre, seguiremos los mismos pasos que darı́amos para resolver
el problema a mano. Escribimos la ecuación de la cónica de la forma
  
 1 −1 x
x y + 2x − 1 = 0
−1 1 y
Creamos una variable matricial (simbólica) que contenga la matriz de
los términos cuadráticos
>> T=sym([1 -1 ; -1 1])
T =
[ 1, -1]
[ -1, 1]
Calculamos autovectores y autovalores de T
>> [a,b]=eig(T)
a =
[ 1, -1]
[ 1, 1]
b =
[ 0, 0]
[ 0, 2]
Los autovalores son 0 y 2; los autovectores correspondientes están en a pero
vienen en columnas, y los necesitamos por filas, ası́ que lo primero que
hacemos es trasponer a

1
>> a=a’
a =
[ 1, 1]
[ -1, 1]

y a continuación dividimos cada fila por su norma para obtener una base
ortonormal de autovectores

>> a(1,:)=a(1,:)/sqrt(a(1,:)*a(1,:)’)
a =
[ 1/2*2^(1/2), 1/2*2^(1/2)]
[ -1, 1]
>> a(2,:)=a(2,:)/sqrt(a(2,:)*a(2,:)’)
a =
[ 1/2*2^(1/2), 1/2*2^(1/2)]
[ -1/2*2^(1/2), 1/2*2^(1/2)]

El primer paso de la reducción (la eliminación del término en xy) consiste


en cambiar a una base ortonormal de autovectores de T; es decir, aplicarle
a la ecuación de la cónica un cambio de la forma

x y = x0 y 0 M
 
(1)

donde M es una matriz 2 × 2 cuyas filas forman una base ortonormal de


autovectores de T, es decir, nuestra matriz a. Vamos a crear una variable
simbólica que contenga la ecuación de la cónica, para hacer la sustitución
por las nuevas variables. Llamaremos x e y a las variables originales x e y; X
e Y a las nuevas x0 e y 0 (no podemos usar el apóstrofe como parte del nombre
de una variable de MATLAB). Las declaramos como simbólicas

>> syms x y X Y

Ahora almacenamos en una variable la ecuación de la cónica

>> f=[x y]*T*[x;y]+2*x-1


f =
(x-y)*x+(-x+y)*y+2*x-1

Vemos que MATLAB agrupa automáticamente los términos. Para reconocer


mejor la expresión la podemos desarrollar; esto se hace con el comando
expand:

>> f=expand(f)
f =
x^2-2*x*y+y^2+2*x-1

2
En esta ecuación tenemos que sustituir [x y] por [X Y]*a, según la ecuación
(1). Se puede hacer en un solo paso, pero la notación se complica debido
a que estamos manejando variables simbólicas. Entonces vamos a cambiar
primero la x y después la y. La x se obtiene como [X Y] multiplicada por la
primera columna de a, que es a(:,1). Para sustituir cualquier variable en
una expresión simbólica por otra variable, número o expresión simbólica se
utiliza el comando subs. Ası́

>> subs(f,x,[X Y]*a(:,1))

significa: sustituir en la expresión simbólica f la variable x por la expresión


simbólica [X Y]*a(:,1). MATLAB devuelve (en la variable ans si no le
hemos indicado otra, como es el caso) el resultado de hacer esta sustitución.
Sobre este resultado hacemos la otra

>> subs(ans,y,[X Y]*a(:,2))

Obtenemos una respuesta (de nuevo guardada en ans) que claramente ne-
cesita una simplificación. El comando que usamos para eso es simplify

>> simplify(ans)
ans =
2*Y^2+X*2^(1/2)-Y*2^(1/2)-1

Esta ecuación depende de las nuevas variables X e Y y no tiene término en XY.


Si todavı́a nos resulta difı́cil de leer, podemos pedirle a MATLAB que nos
la enseñe en un formato parecido al que nosotros usarı́amos para escribirla,
mediante el comando pretty

>> pretty(ans)

2 1/2 1/2
2 Y + X 2 - Y 2 - 1

No es mala idea hacer una “copia de seguridad” de la ecuación en este punto,


por si nos equivocamos en lo que sigue

>> g=ans
g =
2*Y^2+X*2^(1/2)-Y*2^(1/2)-1

A continuación completaremos los cuadrados (en este caso, un solo cuadra-


do) para eliminar términos lineales. Vamos a llamar de nuevo x e y a las
variables de la ecuación reducida, en vez de x’’ e y’’ que no están permi-
tidas como nombres de variables.
En un caso general al llegar a este punto tendrı́amos una ecuación de
la forma aX 2 + bY 2 + cX + dY + f = 0. Para eliminar los términos en

3
X y en Y, completando cuadrados, harı́amos los cambios de variable x =
X + c/2a, y = Y + d/2b (comprobadlo).
En√este caso sólo tenemos cuadrado en Y. Con la notación de√ arriba,
d = − 2 y b = 2. Tenemos que hacer el cambio√de variable y=Y− 2/4, es
decir, en la ecuación hay que sustituir Y por y+ 2/4.

>> subs(ans,Y,y+sqrt(2)/4)
ans =
2*(y+1/4*2^(1/2))^2+X*2^(1/2)-(y+1/4*2^(1/2))*2^(1/2)-1
>> simplify(ans)
ans =
2*y^2-5/4+X*2^(1/2)
>> pretty(ans)

2 1/2
2 y - 5/4 + X 2

En el caso general ya habrı́amos acabado, al reducir los términos en X e


Y . Pero en este caso, como se trata de una parábola, no podemos reducir
el término en X y a cambio podemos absorber el término independiente.

Claramente eso se consigue√definiendo la variable x=X−5/(4 2), es decir,
sustituyendo X por x+5/(4 2)

>> subs(ans,X,x+5/(4*sqrt(2)))
ans =
2*y^2-5/4+(x+5/8*2^(1/2))*2^(1/2)
>> simplify(ans)
ans =
2*y^2+2^(1/2)*x
>> pretty(ans)

2 1/2
2 y + 2 x

que es la ecuación reducida buscada (igualada a cero, claro está).

Ejercicio
Si m y n son respectivamente la cifra de las decenas y la de las unidades
del número de tu D. N. I., selecciona los términos cuadráticos (la primera
mitad de la ecuación) del apartado (m) de los que siguen, y completa la
ecuación con la segunda mitad que aparece en el apartado (n).
Calcula la forma reducida de la ecuación resultante usando MATLAB,
de forma simbólica, siguiendo el método indicado en esta práctica.

4
(0) 5x2 + 5y 2 − 6xy · · · · · · − 4x − 4y − 4 = 0

(1) 2x2 − 4xy − y 2 · · · · · · + 5x − 7y − 3 = 0

(2) x2 + 2xy + y 2 · · · · · · − 6x + 2y + 4 = 0

(3) 5x2 + 5y 2 + 2xy · · · · · · − 6x = 0

(4) x2 + y 2 − xy · · · · · · − 2x + 4 = 0

(5) x2 + y 2 + 10xy · · · · · · − 6x − 6y + 2 = 0

(6) 6y 2 + 8xy · · · · · · − 8x + 4y − 8 = 0

(7) x2 + 4y 2 − 4xy · · · · · · + 4y + 1 = 0

(8) x2 + 4y 2 + 4xy · · · · · · − 4x + 2y + 10 = 0

(9) 2xy · · · · · · + 4x − 1 = 0

Gráficas sencillas en MATLAB


Vamos a aprender a hacer gráficas 2D y 3D en MATLAB, aunque sólo
veremos una parte de los comandos disponibles. Los que queráis ampliar
conocimientos sobre las considerables capacidades gráficas de MATLAB, o
producir una gráfica concreta que plantee más problemas de los que apren-
deremos a solucionar aquı́, podéis consultar la bibliografı́a, la ayuda del
programa, o cualquiera de los numerosı́simos tutoriales que hay disponibles
en Internet.

Curvas en el plano
La forma más “artesanal” de generar gráficas 2D en MATLAB es usando
el comando plot. Vamos a representar, por ejemplo, la función f (x) =
sen x−cos2 x en el intervalo [−5, 5]. Primero tenemos que crear dos variables
vectoriales: una, que llamaremos por ejemplo x, y que almacenará los valores
de x ∈ [−5, 5] en los que evaluaremos la función f , y otra, que podemos
llamar y, en el que se almacenarán las evaluaciones de f en esos puntos. En
definitiva, se trata simplemente de crear una tabla de valores.
Habitualmente los valores de x se escogen equiespaciados entre los dos
extremos del intervalo. Como sabemos, si tecleamos

>> x=-5:0.5:5;

la variable x almacenará valores entre −5 y 5, cada uno a una distancia 00 5


del siguiente.
Evaluamos la función en esos puntos:

5
>> y=sin(x)-cos(x).^2;

Notar que cos(x) es una matriz fila y queremos elevarla al cuadrado en el


único sentido posible, es decir, elemento a elemento; de ahı́ que antepon-
gamos un punto al carácter ^. Ahora sólo queda pedirle al programa que
represente los puntos (x,y) en un sistema de ejes coordenados. Esto se hace
simplemente escribiendo

>> plot(x,y)

Vemos que se abre una ventana gráfica con la representación de la función.


La gráfica no es muy satisfactoria: es una lı́nea poligonal. Lo que hace el
comando plot es pintar los puntos (x,y) que hemos creado y unirlos con
segmentos de lı́nea recta. Para que la gráfica aparezca más suave, por lo
tanto, hay que tomar los puntos de x más cercanos unos de otros. Por ejemplo

>> x=-5:0.1:5;

crea un array con puntos desde −5 hasta 5 espaciados 00 1 (fijaos en el Works-


pace). Evaluando de nuevo la función en los puntos de x

>> y=sin(x)-cos(x).^2;
>> plot(x,y)

se crea una gráfica más suave.

Esta nueva curva sustituye a la anterior en la ventana gráfica.


El comando plot se utiliza preferentemente para la representación de
gráficas de funciones. Ese no es el caso, como sabemos, de prácticamente
ninguna curva de la familia de las cónicas. Si queremos representar la cónica
x2 + 2xy − 3x + 1 = 0, podremos utilizar plot ya que la ecuación permite
despejar y en función de x fácilmente,

6
>> x=[-5:.1:5];
>> y=(3*x-x.^2-1)./(2*x);
Warning: Divide by zero.
>> plot(x,y)
Pero si tenemos que representar una cónica cuya ecuación tiene todos los
términos, como por ejemplo 4x2 + 3y 2 − 5xy + 4x + 4y − 3 = 0, al despejar y
en función de x, o viceversa, obtenemos expresiones más complicadas y en
general, con dos valores distintos para cada coordenada una vez fijamos la
otra (la curva ya no es la gráfica de una función).
En realidad la forma más cómoda de representar cualquier curva que
venga dada en forma implı́cita es utilizar el comando simbólico ezplot. En
este caso escribirı́amos
>> ezplot(’4*x^2+3*y^2-5*x*y+4*x+4*y-3’)

’4*x^2+3*y^2-5*x*y+4*x+4*y-3’ es una cadena de caracteres que MAT-


LAB ha de interpretar como la expresión analı́tica de una función. Las ca-
denas de caracteres (strings) han de introducirse entre apóstrofes.
Este comando pinta por defecto el trozo de gráfica contenido en el
rectángulo [−2π, 2π] × [−2π, 2π]. Si queremos indicar nosotros el recuadro
del plano donde nos interesa la gráfica, lo añadimos como argumento:
>> ezplot(’4*x^2+3*y^2-5*x*y+4*x+4*y-3’,[-6 2 -1 1])
dibuja los puntos de la gráfica que están contenidos en el rectángulo [−6, 2]×
[−1, 1].
El comando ezplot también se puede utilizar para representar gráficas
de funciones. Por ejemplo: para dibujar la función f (x) = exp(sen(x)) − 1
en el intervalo [0, 10] basta teclear

7
>> ezplot(’exp(sin(x))-1’,[0 10])
Sin embargo ezplot no reemplaza a plot en todos los casos. En ocasiones
es preferible utilizar este último comando, que es menos sofisticado pero
también más versátil, sobre todo cuando la función a representar no viene
dada por una expresión analı́tica sencilla.
Se puede mejorar o modificar la gráfica desde la propia ventana gráfica,
sin introducir comandos desde la Command Window. Desde los menús Edit e
Insert, y haciendo click sobre los elementos de la gráfica que nos interesen, se
puede modificar el color de la lı́nea, su grosor, el aspecto de los ejes, ponerle
etiquetas a los ejes X e Y , darle un tı́tulo a la gráfica, insertar lı́neas, flechas,
texto... Si investigáis un poco encontraréis éstas y otras herramientas tı́picas
de un editor gráfico sencillo.

Superficies
Los comando análogos a plot para dibujar superficies son mesh y surf.
Recordemos que para usar plot primero hay que generar una tabla de va-
lores, y lo mismo ocurre con estos comandos. Vamos a usarlos para re-
presentar el paraboloide hiperbólico de ecuación 4x2 − y 2 + 2z = 0. Con-
sideramos esta superficie como la gráfica de la función de dos variables
f (x, y) = z = 21 (y 2 − 4x2 ). Vamos a pintarla para valores de x en el in-
tervalo [−1, 1] e y en el intervalo [−2, 2]. Es decir, el dominio de la función
será [−1, 1] × [−2, 2]. Los puntos donde vamos a evaluar la función formarán
ahora una malla bidimensional, es decir, los vértices de un casillero. Primero
determinamos una serie de puntos equiespaciados en [−1, 1] y guardamos el
resultado en una variable, por ejemplo rx
>> rx=-1:.05:1;
y después hacemos algo parecido en el intervalo [−2, 2]
>> ry=-2:.05:2;
Los puntos donde vamos a evaluar la función serán aquéllos cuya primera
coordenada sea una de las contenidas en rx y la segunda, una de las de ry, es
decir, el producto cartesiano de estos dos conjuntos de valores. Para generar
todos estos puntos MATLAB dispone del comando meshgrid. Basta escribir
>> [x,y]=meshgrid(rx,ry);
y se crean dos variables matriciales x e y, del mismo tamaño. Examinándolas
en el Workspace veréis que x es constante por columnas, y toma como valores
los puntos rx generados en el intervalo [−1, 1]; análogamente, y es constante
por filas y toma como valores los puntos de ry. Si emparejáramos las x con las
y que están en la misma posición obtendrı́amos todos los puntos de la malla
donde queremos representar la función. Por supuesto eso lo hará MATLAB
por nosotros. Ahora evaluamos la función en esos puntos

8
>> z=.5*y.^2-4*x.^2;
(se crea una variable z, del mismo tamaño que x e y, con las evaluaciones
de la función, es decir, las cotas de los puntos) y representamos la superficie
correspondiente a esa tabla de valores mediante
>> mesh(x,y,z)

Se obtiene una gráfica de la superficie en forma de retı́cula de lı́neas de colo-


res, vista en perspectiva. El coloreado lo hace automáticamente MATLAB,
de forma proporcional a la coordenada z de los distintos puntos. Si queremos
que la superficie tenga un aspecto más “sólido” teclearemos en cambio
>> surf(x,y,z)
que pinta, también con distintos colores, las distintas caras de la retı́cula
(ver página siguiente).
En ambos casos funciona un algoritmo de eliminación de lı́neas ocultas,
aunque en un primer momento no nos demos cuenta de ello: según el punto
de vista, habrá zonas que en principio tendrı́an que estar representadas pero
han de quedar ocultas tras los pliegues que pueda formar la superficie. Más
importante: el punto de vista se puede cambiar fácilmente en la propia ven-
tana gráfica, haciendo click en el botón de la flecha circular y posteriormente

9
arrastrando sobre la superficie hasta dar con la perspectiva que nos interese.
La apariencia de la gráfica se puede cambiar en muchos sentidos, tanto desde
la ventana gráfica como utilizando comandos, pero no tenemos tiempo de
estudiar cómo; de todas formas, las operaciones sencillas se pueden aprender
enseguida a base de ensayo y error1 .

También existe un comando análogo a ezplot en superficies, que es útil


cuando no queremos complicarnos generando una malla de puntos. Se trata
de ezsurf. Por ejemplo, vamos a representar un trozo del hiperboloide de
una hoja x2 +4y 2 −9z 2 = 1. Desgraciadamente ezsurf no acepta ecuaciones
1
Para producir esta última gráfica hemos necesitado introducir y ejecutar sucesivamen-
te cinco o seis lı́neas de comando. Es común que al ejecutar una sucesión de comandos
en modo directo (que es el único que conocemos hasta ahora) nos confundamos en alguno
de ellos y esa confusión haga necesario ejecutar de nuevo todos los comandos anterio-
res. Esto se puede hacer seleccionando los comandos en la ventana de Command History,
pinchando con el botón derecho del ratón en la selección y escogiendo la opción Evalua-
te Selection del menú local que se abre. Pero está claro que la eficacia de este método
es limitada y que llegará un momento en que necesitaremos programar, es decir, empa-
quetar una secuencia de comandos en un ejecutable para que cada vez que lo llamemos
se ejecuten todos ellos, uno tras otro. Hacer esto en MATLAB es muy sencillo pero no
tenemos tiempo de explicarlo aquı́. Podéis consultarlo en cualquier manual, o en la pági-
na 21 de los apuntes de MATLAB que tenéis a vuestra disposición en la página web
http://caminos.udc.es/info/asignaturas/obras publicas/103/pdfs/matlab.pdf

10
implı́citas, al contrario que su versión bidimensional. Tendremos que despe-
jar z en función de x e y, es decir, poner la superficie como la gráfica de
una función de dos variables. Notar que, aunque es muy fácil despejar z en
este caso, la herramienta de cálculo simbólico de MATLAB puede hacerlo
por nosotros:

>> z= solve(’x^2+4*y^2-9*z^2-1’,’z’)
z =
1/3*(x^2+4*y^2-1)^(1/2)
-1/3*(x^2+4*y^2-1)^(1/2)

La superficie es simétrica respecto al plano XY , ya que salen dos valores


opuestos para cada z. Vamos a representar la parte correspondiente a las z
positivas, x entre −4 y 4 e y entre −2 y 2.

>> ezsurf(’1/3*(x^2+4*y^2-1)^(1/2)’,[-4 4 -2 2])

La gráfica que resulta no es muy satisfactoria; al menos en las zonas de la


superficie cercanas al plano horizontal, el mallado deberı́a ser más fino. Pero
eso es algo que no podemos hacer con este comando.
No siempre tenemos que resignarnos a despejar una de las coordenadas en
función de las otras. Si disponemos de una parametrización de la superficie,
podemos utilizar ezsurf sobre ella. Una parametrización de una superficie
consiste en poner todos los puntos de la misma en función de dos parámetros
reales; es una generalización de las ecuaciones paramétricas de un plano. Por
ejemplo, el hiperboloide de antes, de ecuación implı́cita x2 + 4y 2 − 9z 2 = 1,
se puede parametrizar ası́:

 x = cosh s cos t
y = (1/2) cosh s sen t
z = (1/3) senh s

Comprobad que al sustituir estos valores de x, y y z en la ecuación x2 +


4y 2 − 9z 2 = 1, se llega a una identidad. A medida que los parámetros s, t
van tomando distintos valores reales, los puntos (x, y, z) van recorriendo la
superficie.
Al ejecutar la siguiente lı́nea de comando, MATLAB representa (ver
página siguiente) el trozo de superficie que corresponde a los parámetros
s ∈ [−2, 2], t ∈ [0, 2π]:

>> ezsurf(’cosh(s)*cos(t)’,’.5*cosh(s)*sin(t)’,...
’(1/3)*sinh(s)’,[-2 2 0 2*pi])

11
12

S-ar putea să vă placă și