Sunteți pe pagina 1din 5

AMPLIACIN DE MATEMTICAS - 2o ING.

DE TELECOMUNICACIN
Dpto. Matemtica Aplicada II. Universidad de Sevilla. Curso 2009/10

Prctica II: Funciones y grficas

1. Definicin de funciones
Aunque Matlab tiene programadas un buen nmero de funciones elementales, es obvio
que a veces necesitaremos definir otras funciones. Esto se puede realizar de varias formas, as
que pasamos ahora a contar alguna de ellas.

1.1. M-archivos
La manera ms clsica de definir una funcin en Matlab es utilizar un M-archivo, o archivo
con extensin *.m. La mejor opcin para crear dicho archivo es utilizar el editor propio de
Matlab, que se abre con la siguiente instruccin:
>> edit
Para empezar, vamos a definir la funcin f (x) = x3 + 3 cos(x), con lo que escribimos las
siguientes lneas en el editor:

function y=prueba(x)
y=x^3+3*cos(x);

La primera lnea es slo una declaracin de funcin donde decimos que y va a ser la variable
de salida, mientras que x es la variable de entrada. El nombre de la funcin en Matlab ser
prueba. En la segunda lnea escribimos la definicin de la funcin. Nota que hemos puesto
punto y coma al final de la lnea para que el clculo no se vea en pantalla.
Ahora tenemos que guardar esta funcin para poder referenciarla ms adelante. Debemos
poner la extensin *.m y es una buena costumbre llamar al fichero como la funcin que hemos
definido en su interior (en este caso, prueba.m). Podemos guardar este fichero en cualquier
directorio o carpeta, pero si queremos utilizar despus la funcin, tendremos que cambiar el
directorio de Matlab por el directorio donde hemos creado la funcin. En la ventana principal
de Matlab hay una casilla que indica el directorio donde estamos trabajando y es ah donde
hemos de poner el nuevo.
Una vez guardada la funcin y seleccionado el directorio, podemos llamarla desde Matlab
para hacer algunos clculos:
>> prueba(2)
>> prueba(-3)
Si queremos calcular simultneamente las imgenes de varios valores de x podramos llamar a
la funcin con un vector, es decir:

1
>> prueba([1 2 3 4])
pero en este caso hay un problema de dimensin, ya que no hemos definido la funcin para que
sea capaz de trabajar con vectores. Sin embargo, podemos modificar la segunda lnea aadiendo
el punto a las distintas operaciones y guardar de nuevo la funcin

function y=prueba(x)
y=x.^3+3.*cos(x);

De este modo ya podremos escribir


>> prueba([1 2 3 4])
y obtener simultneamente el valor de la funcin en cada uno de los valores.
Por cierto, las variables que se utilizan dentro de la funcin no modifican, ni se ven modifi-
cadas, por los valores que pudisemos dar a unas variables con el mismo nombre en la lnea de
instrucciones. Es decir, si ejecutamos estas lneas
>> x=7; y=4;
>> prueba(-3)
>> x, y
comprobaremos que los valores de x y de y no han cambiado aunque en la funcin, internamente,
la variable x ha valido 3 y la variable y ha tomado el valor de la funcin en 3.
Para terminar con este caso, tambin es posible definir funciones con diversas variables de
entrada y salida. Por ejemplo, la siguiente funcin toma dos matrices A y B (que deben tener
dimensiones adecuadas para ser multiplicadas y obtener una matriz cuadrada, ya que en otro
caso dar error) y devuelve una variable P con el producto de las matrices y un vector v con el
determinante y la traza del producto de ambas.

function [P,v]=dettra(A,B)
P=A*B;
v=[det(P),trace(P)];

Abrimos un fichero nuevo en el editor, escribimos el texto y lo guardamos en un fichero que se


llame dettra.m. Si ahora ponemos
>> dettra([1;2;3],[4,5,6])
slo obtendremos el valor de la primera de las variables de salida, que en este caso es el producto
de los dos vectores. Si queremos obtener las dos variables de salida hemos de igualar la funcin
a dos variables. Es decir:
>> [H,Q]=dettra([1;2;3],[4,5,6])

1.2. Definicin en lnea: uso del smbolo de funcin @


Una manera bastante reciente de poder definir funciones matemticas sin tener que recurrir
a los M-archivos es la que ahora describimos. Si queremos obtener la funcin f (x, y) = x2 +y 2 1,
de tal modo que se pueda evaluar simultneamente en varios valores hemos de poner
>> ff=@(x,y)(x.^2+y.^2-1)
En este caso hemos llamado ff a la funcin. Vemos que tras el smbolo @ ponemos las variables
entre parntesis y despus definimos la funcin tambin entre parntesis. Calculemos diversos
valores de la misma:

2
>> ff(1,-2)
>> ff([1,2,3,4],[2,3,2,3])
>> ff([1,2,3,4],[2,3])
>> ff([1,2,3,4],2)
En la tercera instruccin obtenemos un error porque las dimensiones de los vectores de entrada
no coinciden. Sin embargo, en la cuarta lnea no tenemos ese error porque Matlab interpreta
que tenemos que hacer los clculos siempre para el mismo valor de la segunda variable.
Si queremos definir una funcin con dos componentes como f (x, y) = (3x + y, y 2) slo
tenemos que escribir la funcin como un vector:
>> hrt3=@(x,y)([3*x+y; y.^2])
En este caso hemos llamado hrt3 a la funcin y hemos puesto la salida como un vector columna.
Podemos ahora calcular
>> hrt3(1,2)
>> hrt3([1,2,2],[4,-1,3])

1.3. Definicin en lnea: uso de la instruccin inline


Otra manera de definir funciones en lnea es mediante la instruccin inline. En este caso,
para definir la funcin f (x, t) = (x + 2) cos(t) hemos de poner
>> fun=inline('(x+2).*cos(t)','x','t')
En este ejemplo hemos llamado fun a la funcin. Vemos que tanto la definicin de la funcin
como las variables se ponen entre comillas. Notemos que al escribir las variables despus de la
definicin de la funcin estamos fijando el orden en que stas aparecen. El formato para llamar
a la funcin es igual que en casos anteriores:
>> fun(1,3)

2. Grficas en Matlab
En esta seccin vamos a ver cmo representar curvas y superficies con Matlab.

2.1. Curvas en el plano


La herramienta bsica de dibujo de curvas en dos dimensiones es plot. Para entender su
formato lo primero que hemos de hacer es comprender que al dibujar una curva plana con
Matlab no hacemos ms que representar una sucesin de puntos del plano, unidos o no por
segmentos. Cada uno de estos puntos tiene dos coordenadas y para representarlos utilizaremos
plot(coordenadasx,coordenadasy). Por ejemplo, si queremos dibujar la curva que pasa por
los puntos (0, 0), (1, 1), (2, 1), (3, 2), (1, 2) y (0, 3), en ese orden, escribiremos
>> plot([0,1,2,3,1,0],[0,-1,1,2,2,3])
Comprobamos que se abre una nueva ventana donde se representa dicha curva poligonal. El
programa Matlab se encarga de decidir los ejes del dibujo y las escalas numricas y marcas
del dibujo. Conviene mencionar que, salvo que se indique lo contrario, lo primero que hace
Matlab es borrar toda la informacin de una grfica anterior, si la hubiere.
Podemos tambin modificar el estilo de dibujo aadiendo unas directrices adecuadas. Me-
diante

3
>> help plot
podemos consultar algunas de las opciones que tiene dicha instruccin. Por ejemplo, prueba a
teclear
>> plot([0,1,2,3,1,0],[0,-1,1,2,2,3],'r<:')
para obtener la curva anterior en color rojo, punteada y marcando cada uno de los puntos con
un tringulo.
Para representar funciones de la forma y = f (x), debemos proceder del siguiente modo:
primero creamos un vector con un mallado del intervalo donde queramos que se mueva la
variable x, despus evaluamos f en dicho mallado y, para terminar, representamos esos valores
frente a x. Por ejemplo, para representar la parbola y = x2 + 3 en el intervalo [1, 1], con una
particin de una centsima, podemos hacer lo siguiente:
>> x=-1:0.01:1; y=x.^2+3;
>> plot(x,y)
No olvides poner el punto delante de ^ para que realice los clculos componente a componente
porque si no, la operacin dar lugar a un error de dimensin. Si queremos cambiar los ejes,
escribimos
>> axis([-2 1 2 5])
donde el vector de entrada marca los extremos de los intervalos respectivos en las direcciones
x e y. Otra herramienta que puede mejorar un grfico es
>> grid on
que muestra un mallado sobre la figura.
Las siguientes funciones permiten representar la funcin y = sen2 (x) en el intervalo [0, 2],
mostrando un mallado de la regin.
>> x=linspace(0,2*pi,100); y=(sin(x)).^2;
>> plot(x,y), grid on
Observa que Matlab no toma para la x el intervalo apropiado, sino uno ms amplio. Si
queremos evitar esto podemos poner
>> axis tight
Tambin podemos dibujar curvas definidas en paramtricas, como la elipse de centro el
origen y semiejes 3 y 5. Para ello slo tenemos que obtener los vectores x e y correspondientes.
En el ejemplo que viene a continuacin usamos a t como parmetro.
>> t=0:2*pi/100:2*pi; x=3*cos(t); y=5*sin(t);
>> plot(x,y)
Como Matlab elige el tamao relativo de los ejes, la elipse no parece tener las dimensiones
adecuadas. Para evitar esto podemos poner
>> axis equal
Una forma de dibujar varias curvas en la misma grfica es usar la orden hold. Por ejemplo,
una vez dibujada una figura, si escribimos
>> hold on
todas las grficas que representemos se unirn a la que ya tenemos, como se ve si ahora tecleamos
>> t=0:2*pi/100:2*pi; x=5*cos(t); y=3*sin(t);
>> plot(x,y,'r')
Cuando queramos dejar de superponer curvas slo tenemos que escribir
>> hold off

4
2.2. Curvas en el espacio
La instruccin plot3 tiene en el espacio unas caractersticas similares a plot en el plano.
Por ejemplo, mediante las siguientes instrucciones vamos a obtener una hlice elptica:
>> t=linspace(0,10*pi,300); x=cos(t); y=2*sin(t); z=t/5;
>> plot3(x,y,z)
Para ver el dibujo con la misma escala en los tres ejes slo necesitamos escribir
>> axis equal

2.3. Superficies
Para representar la superficie z = f (x, y) debemos proceder de un modo similar. La nica
diferencia es que ahora el mallado tendr que ser de una regin y, para facilitar la tarea,
usaremos la instruccin meshgrid. Ms concretamente, comenzaremos creando unas particiones
de los intervalos de dibujo en las direcciones x e y para, usando dicha instruccin, generar el
mallado de todo el rectngulo. Despus podemos representar p la superficie
p usando la instruccin
surf. Por ejemplo, representemos la funcin z = sen( x2 + y 2)/ x2 + y 2 en el rectngulo
(x, y) [8, 8] [6, 6].
>> x=-8:0.5:8; y=-6:0.5:6; [X,Y]=meshgrid(x,y);
>> r=sqrt(X.^2+Y.^2); Z=sin(r)./r;
>> surf(X,Y,Z)
Si observas bien la superficie puedes darte cuenta de que el mximo no est representado
(puedes girar la superficie, para tener un mejor ngulo de visin, mediante el botn de rotacin
tridimensional que aparece en la barra de herramientas de cada figura). El motivo es que la
funcin no est definida en el origen, ya que el denominador se anula. Una manera, entre
otras, de evitar este problema es elegir una particin del rectngulo que no contenga al origen.
Otra manera es evitar dividir por cero, cosa que se puede conseguir sumando un nmero muy
pequeo a r para evitar que se anule el denominador. El nmero ms pequeo que se puede
utilizar en Matlab se denota por eps. Por ejemplo, puedes repetir las instrucciones anteriores
pero cambiando la segunda lnea por
>> r=sqrt(X.^2+Y.^2)+eps; Z=sin(r)./r;
Como conclusin a la seccin de grficas en Matlab, vamos a representar una superficie
dada en paramtricas. Para ello slo hemos de hacer un mallado del rectngulo donde estn defi-
nidos los parmetros. Es decir, para representar la superficie dada por x = (10+2 cos(r)) cos(t),
y = (10+2 cos(r)) sen(t), z = 6 sen(r) en el rectngulo (t, r) [, ][, ] podemos escribir
>> t=linspace(-pi,pi,30); r=linspace(-pi,pi,30); [T,R]=meshgrid(t,r);
>> X=(10+2*cos(R)).*cos(T); Y=(10+2*cos(R)).*sin(T); Z=6*sin(R);
>> surf(X,Y,Z)
>> axis equal
>> shading interp, light, lighting gouraud
La ltima lnea (que es completamente innecesaria para la representacin) muestra la superficie
sin rastros de la malla, interpola para conseguir un efecto de continuidad entre los colores e
ilumina la superficie. Por lo menos queda bonito.

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