PRLOGO
MATLAB es un programa que nos permite desarrollar numerosas aplicaciones
al clculo, la representacin y la programacin. En este manual, inspirado en el
libro A MAT LAB companion f or Multivariable Calculus, de Jeery M. Cooper,
pretendemos complementar la asignatura de Clculo Diferencial tratando la mayora
de los puntos del temario desde un punto de vista informtico, para que el alumno
pueda desarrollar en el ordenador los resultados que ha visto en clase.
Este trabajo est dividido en seis secciones en las que se exponen los principios
bsicos para el manejo del programa sobre tratamiento de vectores: representacin,
posicin relativa de dos planos, introduccin a dimensin superior; curvas en el plano:
curvas paramtricas, tangencias a curvas paramtricas, giros; funciones de dos y tres
variables: declaracin, representacin, funciones polares, superficies de funciones de
tres variables; resolucin de ecuaciones: mtodo de Newton, interseccin de curvas
y superficies y por ltimo problemas de optimizacin.
Adems hemos apoyado las explicaciones con numerosos ejemplos y figuras generadas por MATLAB para que ilustren y ayuden a la hora de reproducir casos
similares.
Hemos utilizado algunas funciones no predeterminadas cuyo cdigo puede encontrarse en la pgina web:
http : //www.math.umd.edu/jec/matcomp/matcompmf iles/mf iles.html
Esperamos que este trabajo sea de utilidad a la hora de introducirse en MATLAB
como herramienta aplicable al campo del clculo multivariable y que anime a los
compaeros a ver el ordenador como una mquina capaz de ayudarnos en el trabajo
matemtico.
Por ltimo, agradecemos a nuestro tutor, el profesor Jos Mara Martnez Ansemil, la ayuda prestada para realizar este trabajo.
Mario Daz-Romeral Ruiz y Juan Jess Tebar Moreno
Alumnos de Matemticas becarios de excelencia de la CAM
CURSO 2005/06
1.
1.1.
VECTORES RECTAS Y PLANOS
Vectores en dimensiones dos y tres.
Los vectores se escriben en MATLAB de la siguiente forma: v = [a, b, c], y la
norma usada en principio es la norma eucldea .
Podemos destacar los siguientes comandos para pintar vectores con punto de
aplicacin comn, es decir, si tenemos dos vectores v, w y el punto p0 , utilizamos el
comando arrow y arrow3 (para dimensin 3)
%EJEMPLO 1.1
%nos muestra grficamente la resta (lo mismo pasara con la suma)
%de dos vectores en el plano
p0=[1,1];
v=[1 0];
arrow(p0,v)
hold on %para pintar sobre el dibujo creado
%con el arrow (sin borrarlo)
w=[2,3];
arrow(p0,w)
arrow(p0,v-w,r)
%la r es para que la solucin (v-w) salga en rojo
axis equal %son los ejes coordenados
hold off %anula hold on
-1
-2
-2
-1
Resta de vectores
Tenemos tambin las funciones dot(v, w) o tambin v w0 para hacer el producto
escalar de dos vectores; y para el producto vectorial (en tres dimensiones) est la
funcin cross(v, w).
2
%EJEMPLO 1.2
%producto escalar y vectorial de dos vectores en tres dimensiones
%producto vectorial
SYMS a b c x y z %declaracin de variables simblicas
v=[a b c];
w=[x y z];
cross(v,w)
ans =
[ b*z-c*y, c*x-a*z, a*y-b*x]
%producto escalar
v*w
ans =
a*conj(x)+b*conj(y)+c*conj(z)
dot(v,w)
ans =
conj(a)*x+conj(b)*y+conj(c)*z
1.2.
Dibujar rectas en dos y tres dimensiones
Se pueden dibujar tan slo sabiendo dos puntos ( P0 = (x0 , y0 ) y P1 = (x1 , y1 ) )
con el comando plot([x0 , x1 ], [y0 , y1 ]). Idem en tres dimensiones pero con el comando
plot3. (Para una recta poligonal daremos los cinco puntos necesarios.)
Tambin podemos pintar los puntos de las rectas con plot3(x, y, z, 0 0).
Obsrvese en los dibujos:
%EJEMPLO 1.3
%una recta poligonal
x=[1,1,1,1,1];
y=[2,2,4,5,2];
z=[1,4,3,4,2];
plot3(x,y,z)
%o con plot3(x,y,z,*) para que salga con asteriscos
4
3.5
3
2.5
2
1.5
1
5
2
1.5
1
0.5
2
Otro comando muy usado que sirve para hacer figuras es f ill (idem en 3 dimensiones.)
%EJEMPLO 1.4
%si coinciden las coordenadas x0 con x4,saldr un tringulo
%en caso contrario une los vrtices del punto (xo,yo),(x4,y4)
x=[1,7,5,3,1];y=[2,-1,4,6,2];
fill(x,y,r)%para que salga dibujada en rojo
-1
1.3.
Planos
Formas de determinar los planos en tres dimensiones:
1) por un punto del plano y su vector normal.
2) con tres puntos del plano.
3) un punto y dos vectores.
4
En este ejemplo damos dos vectores y un punto para construir el plano :
%EJEMPLO 1.5
p0=[1 1 1];
v=[1 0 0];
w=[1 3 5];
for s=-1:.5:1
for t=-1:.5:1
arrow(p0,s*v+t*w)
hold on
end
end
1
0.5
0
-0.5
-1
-1
0
1
2
3
-2
-1
Otra manera es con la funcin predefinida plane(p0 , N) en la que p0 es un punto
y N el vector normal al plano, donde sale dibujado mejor el plano, e incluso est
dibujado el vector normal.
%EJEMPLO 1.6
%aqu dibujaremos un plano apoyndonos en la funcin plane
%realizada por el autor del libro
p0=[1 1 2];
N=[1 0 3];
plane(p0,N)
2.8
2.6
2.4
2.2
1.5
1.8
1
0.5
0.5
1
1.5
Podemos dibujar la interseccin de dos planos, siempre y cuando stos se corten.
%EJEMPLO 1.7
%dibujamos dos planos que al tener un punto en comn
%y los vectores normales a ambos son diferentes, se cortan
%a lo largo de una recta
p0=[1 3 6];
%punto comn
N1=[0 3 3];
N2=[1 2 1];
plane(p0,N1)
%dibuja primer plano
hold on
plane(p0,N2)
L=cross(N1,N2);
%vector normal a N1 y N2
arrow3(p0,L)
%simula la recta interseccin de ambos planos
hold off
6.8
6.6
6.4
6.2
6
5.8
5.6
5.4
5.2
3.5
1.4.
2.5
1.5
0.5
Grficos tridimensionales
Es usual cambiar el punto de vista en grficos tridimensionales, en MATLAB se
hace dando dos ngulos, (azimut y elevacin). Para cambiar dicho punto de vista,
por ejemplo a 40 grados de azimut y 50 de elevacin, lo que hacemos es:
1)Poner view(40, 50), para revisar dicho punto de vista; [az, el] = view .
2)Dar un vector view([1 2 1]).
3)Con el comando rotate3don. Pinchando en la figura con el botn izquierdo
y rotando la figura, la elevacin y el azimut van apareciendo en la pantalla. Con
rotate3dof f se finaliza el comando.
2.
CURVAS EN EL ESPACIO
2.1.
Representacin paramtrica de curvas.
MATLAB reconoce y permite representar curvas dadas en forma paramtrica,
esto es, funciones sobre cada una de las componentes del vector salida por un parmetro real t.
%EJEMPLO 2.1
%Divisin del intervalo [0,2*pi] en 1000 partes iguales y,
%por expresin paramtrica y representacin de la circunferencia unidad
%centrada en el origen.
t=linspace(0,2*pi,1000);
x=cos(t);
y=sin(t);
plot(x,y)
%Tambin podemos declarar las funciones del parmetro
%para las variables empleando el comando inline.
t=linspace(0,2*pi,1000);
x=inline(cos(t),t);
y=inline(sin(t),t);
plot(x(t),y(t))
%Si declaramos el parmetro como una incgnita simblica
syms t
x=cos(t);
y=sin(t);
ezplot(x,y)
%El comando ezplot viene con un argumento que es
%el intervalo de definicin del parmetro.
%MATLAB toma por defecto t en [0,2*pi]
0.5
0
1
0
-0.5
-1
-1
-0.5
0.5
-1
Tambin en el caso tridimensional podemos representar curvas paramtricas de
la forma (x(t), y(t), z(t)) con t el parmetro real con el que venimos trabajando. Un
ejemplo clsico es la hlice circular.
%EJEMPLO 2.2
%Se define el rango del parmetro. Se declaran
%las variables en funcin del mismo y, por la
%instruccin plot3
%dibuja la hlice circular sobre el espacio.
t=linspace(0,4*pi,1000);
x=cos(t);
y=sin(t);
z=t/(2*pi);
plot3(x,y,z)
%Declarando el parmetro simblicamente podemos
%representar la hlice circular a travs de la
%instruccin ezplot3
syms t
x=cos(t);
y=sin(t);
z=t/(2*pi);
ezplot3(x,y,z,[0,4*pi])
%Se explicita el dominio del parmetro, ya que
%por defecto MATLAB hubiese tomado el intervalo [0,2*pi]
1.5
0.5
0
1
0.5
0
-0.5
-1
2.2.
-1
-0.5
0.5
Vectores tangentes a una curva paramtrica.
Nos planteamos ahora el problema de las tangencias a curvas paramtricas, y
cmo MATLAB lo trabaja.
Podemos conseguir representar conjuntamente la curva y los vectores tangentes
en los puntos que nos interesen, as como obtener otras aplicaciones curiosas, como
se explica a continuacin:
%EJEMPLO 2.3
%Declaramos la hlice circular como hemos visto
%anteriormente y tras ello (por medio de hold on
%para sobreescribir en la misma imagen), toma un nuevo
%parmetro s que divide el dominio, de forma que
%calculamos los vectores tangentes a la hlice
%en esos puntos. Para ello, haciendo uso de un bucle for,
%introduce en p el punto en que se aplicar el vector,
%y en v la direccin. Con la instruccin arrow3 se representa
t=linspace (0,4*pi,101);
x=inline(cos(t));
y=inline(sin(t));
z=inline(t/(2*pi));
plot3(x(t),y(t),z(t))
hold on
10
for s=linspace(0,4*pi,17);
p=[x(s),y(s),z(s)];
v=[-sin(s),cos(s),1/(2*pi)];
arrow3(p,v,r)
end
view(135,40)
%La instruccin view cambia el punto de vista.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Dibujamos la hlice circular con un punto rojo recorrindola
%a una velocidad proporcional al mdulo del vector velocidad
%en el punto por el que pasa.
syms t
x=cos(t);
y=sin(t);
z=t/(2*pi);
ezplot3(x,y,z,[0,4*pi],animate);
2.5
2
1.5
1
0.5
0
-2
-1
0
1
2
-1.5
-1
-0.5
0.5
1.5
Tambin resulta representativo el estudio de algn caso en el que la derivada se
anule.
%EJEMPLO 2.4
%En este ejemplo vemos una curva paramtrica con
11
%un punto en que la derivada no es continua. Viene
%representada junto con unos vectores tangentes por
%algunos puntos.
t=linspace(-1,1,101);
x=inline(t.^3);
y=inline(t.^2);
plot(x(t),y(t),c)
hold on
for j=linspace(-1,1,4);
p=[x(j),y(j)];
v=[3*j^2,2*j];
arrow(p,v,r)
end
3
2.5
2
1.5
1
0.5
0
-0.5
-1
-1
Para la comprensin de estos cdigos ser necesario conocer las funciones arrow
y arrow3 que se definen en los archivos del mismo nombre y que fueron programadas
por el autor.
2.3.
Longitud de arcos.
El clculo de la longitud de un segmento recto no plantea excesivas complicaciones. Basta con calcular el mdulo del vector que une los puntos extremos del mismo.
Tampoco es muy complejo calcular la longitud de un segmento poligonal, lo que se
reduce a sumar las longitudes de cada uno de los lados que conforman el polgono.
12
Ahora bien, cuando se trata de calcular la longitud de una curva entre dos extremos
definidos el problema no es en absoluto trivial. MATLAB lo tratar de varias formas
Ser til tambin conocer la expresin de la longitud de una curva paramtrica
que aporta el clculo integral:
Z
Z bp
kv(t)k dt =
x0 (t)2 + y 0 (t)2 + z 0 (t)2 dt
a
%EJEMPLO 2.5
%Resolveremos el problema de calcular el valor
%de la longitud de una curva usando la aproximacin
%por segmentos rectos.
%Hallamos la longitud de la curva C(t)=[t^2,2*t,exp(t)]
%1<=t<=2
n=input(En cuantos segmentos se quiere dividir la curva?)
t=1:(1/n):2;
x=t.^2; y=2*t; z=exp(t);
sum = 0;
%Calculamos en un bucle for el vector que separa dos puntos
%consecutivos de la particin de la curva.
for j=1:n
dx=x(j+1)-x(j);
dy=y(j+1)-y(j);
dz=z(j+1)-z(j);
dr=[dx,dy,dz];
%usando el contador sum inicializado al principio,
%sumamos las normas de los vectores que hemos calculado.
sum=sum+norm(dr);
end
disp(Este es el valor de la longitud de la curva);
sum
disp(La hemos dividido en);
n
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Otra forma de resolver el problema es empleando la frmula
%Aproximamos la curva del ejemplo anterior.
normderiv=inline(sqrt((2*t).^2+4+(exp(t)).^2),t);
quad8(normderiv,1,2)
%el comando quad8 calcula aproximaciones numricas
%de integrales entre los extremos de la variable indicados.
%OBSERVACIN:Usar help quad8 para considerar una
13
%diferencia de sintaxis segn definamos la funcin
%en lnea o por un archivo *.m
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Por ltimo podemos emplear un algoritmo simblico.
%Consideramos un lmite de integracin (el superior
%en este caso), como una variable simblica.
%Empleamos la frmula de la integral.
syms t b
r=[t.^2 2*t exp(t)];
v=diff(r)
normderiv=sqrt(v(1)^2+v(2)^2+v(3)^2);
longitud=int(normderiv, t, 1, b)
pretty(longitud)
%empleamos en este cdigo dos comandos nuevos:
%int(S,a,b) calcula la integral de la expresin simblica S
%entre a y b. pretty(S) da a la expresin simblica S
%un formato matemtico mas inteligible.
2.4.
Geometra de las curvas.
Estudiaremos en este apartado la definicin de tres vectores caractersticos a
la curva paramtrica en un punto donde exista diferencial, que surgen a partir del
vector tangente a la curva en el punto en cuestin. Forman lo que se llama cuadro
de F renet, y se definen:
T (t) =
v(t)
[x0 (t), y 0 (t), z 0 (t)]
=p
kv(t)k
x0 (t)2 + y 0 (t)2 + z 0 (t)2
El vector tangente unitario (simplemente el vector velocidad dividido por su
mdulo)
N(t) =
T 0 (t)
kT 0 (t)k
Vector unitario ortogonal a T (t) y que se denomina normal principal
B(t) = N(t) T (t)
14
El vector que completa la referencia.
Se ha desarrollado una funcin f renet, que nos dibuja sobre una curva paramtrica lo que es el cuadro de Frenet sobre cuatro valores del parmetro.
2.5.
Rotaciones en el plano.
Las rotaciones en el plano eucldeo son una herramienta muy valiosa en geometra. Aplicndolas al estudio de curvas paramtricas, podemos usar MATLAB para
calcular la imagen de una de ellas por una rotacin respecto a cualquier punto y con
cualquier argumento usando tcnicas similares a las empleadas en lgebra.
Si tenemos un punto (x, y) del plano y queremos realizar una rotacin de centro
el origen y argumento 0 2, la matriz
cos sin
R=
sin cos
Es lo que se llama una matriz de rotacin, y si consideramos ahora la imagen
por esa matriz de un vector de R2
w = Rv = [x cos y sin , x sin + y cos ]
Podemos considerar en el caso paramtrico:
q(s) = Rr(s) = [x(s) cos y(s) sin , x(s) sin + y(s) cos ]
Donde s es el parmetro que define la curva sobre el plano. De esta forma,
podemos trabajar en MATLAB con estos conceptos:
% EJEMPLO 2.6
%Rotamos una curva paramtrica en el plano, por ejemplo la elipse
%(x^2/16)+(y^2/9)=1
arg=input(Dame el argumento de giro);
t=linspace(0,2*pi,101);
x0=4*cos(t);y0=3*sin(t);
%as representamos la elipse en primer trmino.
plot(x0,y0);
hold on
15
x=cos(arg)*x0-sin(arg)*y0;
y=sin(arg)*x0+cos(arg)*y0;
%dibujamos el giro sobre el mismo grfico.
plot(x,y,r); axis equal
4
3
2
1
0
-1
-2
-3
-4
-5
16
3.
FUNCIONES DE DOS VARIABLES
3.1.
Funciones de dos variables. Representacin.
Hay dos formas de definir funciones en MATLAB.
a) Programndola como un archivo .m
%EJEMPLO 3.1.1
function z=f(x,y)
z=x.^2+y;
b) Introducindola directamente sobre la pantalla de ejecucin.
%EJEMPLO 3.1.2
f=inline(x.^2+y,x,y)
f =
Inline function:
f(x,y) = x.^2+y
%ahora podemos utilizar f de la forma habitual, por ejemplo :
f(3,5)
ans =
14
Por el primer mtodo tambin es sencillo programar funciones de mayor complejidad
%EJEMPLO 3.2
% vamos a programar la funcin f1(x,y)=exp(u-2v)*cos(3u), donde:
% u=3x^2+5y y v=3x+2y
function z=f1(x,y)
u=3*x.^2+5*y;
v=3*x+2*y;
z=exp(u-2*v)*cos(3*u);
Para representar funciones de dos variables sobre un rectngulo en el plano x, y
con a < x < b, c < y < d
MATLAB divide el rectngulo en las partes indicadas mediante el comando
meshgrid.
17
%EJEMPLO 3.3.1
%-1<=x<=2 ; 2<=y<=4 con separacin 0.5
x=-1:.5:2;y=2:.5:4;
[X,Y]= meshgrid (x,y)
X =
-1.0000
-0.5000
0
0.5000
1.0000
1.5000
-1.0000
-0.5000
0
0.5000
1.0000
1.5000
-1.0000
-0.5000
0
0.5000
1.0000
1.5000
-1.0000
-0.5000
0
0.5000
1.0000
1.5000
-1.0000
-0.5000
0
0.5000
1.0000
1.5000
Y =
2.0000
2.0000
2.0000
2.0000
2.0000
2.0000
2.5000
2.5000
2.5000
2.5000
2.5000
2.5000
3.0000
3.0000
3.0000
3.0000
3.0000
3.0000
3.5000
3.5000
3.5000
3.5000
3.5000
3.5000
4.0000
4.0000
4.0000
4.0000
4.0000
4.0000
%Tenemos el rectngulo dividido, ahora representamos la funcin
f2=inline(x+exp(y.^2),x,y)
f2 =
Inline function:
f2(x,y) = x+exp(y.^2)
Z=f2(X,Y)
Z =
1.0e+006 *
0.0001
0.0001
0.0001
0.0001
0.0001
0.0001
0.0005
0.0005
0.0005
0.0005
0.0005
0.0005
0.0081
0.0081
0.0081
0.0081
0.0081
0.0081
0.2090
0.2090
0.2090
0.2090
0.2090
0.2090
8.8861
8.8861
8.8861
8.8861
8.8861
8.8861
%ahora el grfico se hace con el comando SURF
surf(X,Y,Z)
18
2.0000
2.0000
2.0000
2.0000
2.0000
2.0000
2.5000
3.0000
3.5000
4.0000
0.0001
0.0005
0.0081
0.2090
8.8861
x 10
10
8
6
4
2
0
4
3.5
2
3
1
2.5
0
2
-1
Se puede omitir el paso de crear el rectngulo para representar dichas funciones
programando una aplicacin especfica.
%EJEMPLO 3.3.2
function salida=representacion(f, vertices)
%vamos a dar los elementos del vector corners que son cada uno de los
%puntos que el usuario ha dado como esquinas
a=vertices(1);
b=vertices(2);
c=vertices(3);
d=vertices(4);
%dividimos como antes el rectngulo en subrrectngulos
x=linspace(a,b,41);
y=linspace(c,d,31);
[X,Y]=meshgrid(x,y);
%utilizamos el comando feval para evaluar la funcin en X,Y
Z=feval(f,X,Y);
surf(X,Y,Z)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Un ejemplo de aplicacin en la pantalla de ejecucin sera
%f(x,y)=2*x*y^2/exp(x)
f=input(2*x.*y.^2./exp(x),x,y);
representacion(f,[[0 0] [0 1] [1 0] [1 1]])
3.2.
Representacin de funciones polares
19
El nico cambio significativo es que en la representacin nos interesara un dominio circular en vez de rectangular.
%EJEMPLO 3.4
%primero hacemos un rectngulo en r,t
r=linspace(0,2,16);
t=linspace(0,2*pi,16);
[R,T]=meshgrid(r,t);
%ahora "curvamos" el rectngulo en coordenadas x,y
X=R.*cos(T);
Y=R.*sin(T);
Z=f(X,Y);
surf(X,Y,Z)
%tomamos una f genrica.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%En la pantalla de ejecucin
f=input(2*x.*y./exp(x),x,y);
ejemplo3_4
20
10
-10
-20
2
1
2
1
-1
-1
-2
3.3.
-2
Curvas de nivel
MATLAB sabe representar la curva que define la interseccin entre la grfica de
una funcin de dos variables y un plano de la forma z = c
20
%EJEMPLO 3.5
%para representar unas lneas de contorno podemos utilizar el
%comando contour(X,Y,f(X,Y)),a funcin definida. Usando la funcin
%contour con otros argumentos, contour(X,Y,f(X,Y),n) nos da
%las lneas de contorno de n puntos equiespaciados en el
%intervalo (min(f),max(f)), por ltimo, podemos sustituir
%el argumento n por un vector con las coordenadas que nos interesen
x=-2:.05:2;
y=-2:.05:3;
[X,Y]=meshgrid(x,y);
f=inline(4*exp(x)+y.^2,x,y);
Z=f(X,Y);
plot3(X,Y,Z);
hold on
contour(X,Y,Z,10)
hold off
40
30
20
10
0
4
2
1
0
-1
-2
3.4.
-2
Tcnicas grficas para funciones simblicas
MATLAB incluye una serie de comandos para la representacin de funciones
simblicas de dos variables, entre ellos destacan: ezsurf , ezmesh y ezcontour. Por
ejemplo:
21
%EJEMPLO 3.6
%declaramos como variables simblicas x e y
syms x y
f=sin(x)*exp(y^2)
f =
sin(x)*exp(y^2)
ezsurf(f,[[1 1][2 1] [1 2] [2 2]])
sin(x) exp(y )
3
2
1
0
-1
-2
-3
1
0.5
1
0.5
-0.5
y
-0.5
-1
-1
Los otros dos comandos funcionan de forma similar, slo que para funciones de
mayor complejidad.
3.5.
Derivadas parciales y direccionales.
Para medir la variacin de una funcin, se considera la restriccin de f a rectas
paralelas a los ejes x e y , sobre las que se estudia el incremento en la otra variable,
que queda fija.
La definicin precisa de derivadas parciales es:
f
f (x, y0 ) f (x0 , y0 )
(x0 , y0 ) = lm
xx0
x
x x0
22
y forman el gradiente
f
f (x0 , y) f (x0 , y0 )
(x0 , y0 ) = lm
yy0
y
y y0
f
f
f (x, y) =
(x, y),
(x, y)
x
y
Las aplicaciones xslice e yslice (programadas por el autor) intersecan la funcin
con el plano y = y0 (xslice) y con un plano x = x0 (yslice)
%EJEMPLO 3.7
f=inline(6*x.^2+8*y.^3+.5,x,y);
qsurf(f,[0 2 0 2]); shading flat
%shading flat elimina la "redecilla" de la superficie.
hold on
x=linspace(0,2,51);
xslice(f,x,1)
hold off
100
80
60
40
20
0
2
1.5
2
1.5
0.5
0.5
0
3.6.
Derivadas direccionales
De forma ms general, tomamos en vez de v = [1, 0] y u = [0, 1] otro vector
w = [w1 , w2 ]
23
para realizar una derivada direccional segn la definicin:
f (x0 + hw1 , y0 + hw2 ) f (x0 , y0 )
h0
h
Du f (x0 , y0 ) = lm
La funcin mslice funciona con dos argumentos mslice(f, P ), donde f es una
funcin definida en lnea y P es un punto a partir del cual se define un vector (haciendo click en otro punto del plano) y MATLAB nos devuelve la derivada direccional
del punto en la direccin del vector.
%EJEMPLO 3.8
f
f =
Inline function:
f(x,y) = x+y.^2
P
P =
1
2
mslice(f,P)
This is a chance to enlarge the window, and rotate the figure
When you are finished, enter return
u1
u2
Duf
ans =
-0.9681
-0.2507
-1.9709
ans =
0.8904
-0.4552
-0.9305
ans =
0.9623
0.2718
2.0497
ans =
-0.8165
0.5773
1.4928
ans =
0.0104
0.9999
4.0102
24
z axis
20
10
0
3
2.5
1.5
y axis
1.5
0.5
x axis
y axis
2.5
P
2
1.5
-0.5
0.5
1
x axis
1.5
2.5
Observamos que el vector gradiente en un punto es ortogonal a la curva de nivel
que pasa por l.
3.7.
Aproximacin por un plano tangente
Es de gran utilidad aproximar por una expresin lineal (afn) una curva en dos
variables en el entorno de un punto (x0 , y0 ). El plano tangente a la curva en un
punto nos sirve a tal efecto. Viene dado por la expresin
f (x, y) = f (x0 , y0 ) + fx (x0 , y0 )(x x0 ) + fy (x0 , y0 )(y y0 ) + E
Donde E es una expresin que tiende a cero cuando (x, y) (x0 , y0 ) y fx , fy
son las derivadas parciales.
%EJEMPLO 3.9
f=inline(x.^2+sin(y),x,y);
fx=inline(2*x,x,y);
fy=inline(cos(y),x,y);
%fx y fy con las parciales de f
p(f,fx,fy,1,0)
ans =
-1+2*x+y
%mirar definicin de p despus de la figura que sigue.
25
qsurf(f,[-1,1 -1,1])
hold on
g=inline(-1+2*x+y,x,y);
qsurf(g,[-.3,.7,-.9,.1])
-2
-4
-1
-0.5
0
0.5
1
0.5
-0.5
-1
Slo queda por explicar la funcin que se ha definido p.m y que nos da el plano
tangente a la curva por un punto dndole la funcin, las derivadas parciales y el
punto. La transcripcin del cdigo es:
%funcion p
function salida=p(f,fx,fy,x0,y0)
syms x y
salida=feval(f,x0,y0)+feval(fx,x0,y0)*(x-x0)+feval(fy,x0,y0)*(y-y0);
3.8.
Reconversin de escala
En algunas ocasiones para pequeas surperficies en el pano xy , la imagen toma
valores extremos. Cuando esto ocurre la escala del grfico hace que se pierda detalle
de cmo es en realidad la grfica.Para solventarlo se pueden seccionar los valores de
la funcin ganando precisin. Por ejemplo:
%EJEMPLO 3.10
f=inline((x.^4+y.^2).^(-1)+cos(x).*sin(y),x,y)
26
f =
Inline function:
f(x,y) = (x.^4+y.^2+.01).^(-1)+cos(x).*sin(y)
[X,Y]=meshgrid(-2*pi:.1:2*pi);
Z=f(X,Y);
%esta funcin tiene un mximo muy elevado en (0,0).
%seccionamos la grfica usando la funcin caracterstica siguiente
W=(Z-4<0).*(Z-4)+4;
surf(X,Y,W);
4
3
2
-10
1
-5
0
0
5
-1
-8
3.9.
-6
-4
-2
10
El comando subplot
El comando subplot de MATLAB sirve para introducir en una misma ventana
varios grficos distintos. El comando subplot funciona con tres argumentos: los dos
primeros indican la dimensin del array, y el tercero la posicin particular de cada
uno de los grficos.
%EJEMPLO 3.11
f=inline(c*cos(3*x)+c*sin(2*y),x,y,c)
f =
Inline function:
f(x,y,c) = c*cos(3*x)+c*sin(2*y)
27
[X,Y]=meshgrid(-2:.2:2);
subplot(2,2,1)
%para c=1
surf(X,Y,f(X,Y,1))
subplot(2,2,2)
%para c=.4
surf(X,Y,f(X,Y,.4))
subplot(2,2,3)
%para c=pi
surf(X,Y,f(X,Y,pi))
subplot(2,2,4)
%para c=10^(-4)
surf(X,Y,f(X,Y,.0001))
%obsrvese la diferencia de escala
-2
2
0
-2
-2
-1
2
0
-2
x 10
10
-10
2
0
-2
-2
-4
-2
2
0
-2
28
-2
-2
4.
4.1.
FUNCIONES DE TRES VARIABLES Y SUPERFICIES PARAMTRICAS
Definicin de funciones tridimensionales. Niveles.
Las funciones de tres variables f : R3 R pueden definirse en MATLAB de
forma anloga a como se han venido definiendo en el caso unidimensional y bidimensional. As, por ejemplo, tenemos:
%EJEMPLO 4.1,
%(a)definimos funcin de tres variables sobre la pantalla de ejecucin.
F=inline((x.^2-exp(y)).*z,x,y,z)
F =
Inline function:
F(x,y,z) = (x.^2-exp(y)).*z
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%(b)definimos funcion de tres variables sobre archivo *.m
function u=f(x,y,z)
u=x.^2/(sqrt(y.^2+z.^2+1));
El grfico de una funcin de tres variables sera una superficie tridimensional
contenida en un espacio en cuatro dimensiones, lo que no puede ser visualizado. Sin
embargo, contamos con una herramienta: superficies tridimensionales de nivel. Estas
son, conjuntos de la forma
Sc = {(x, y, z) R3 : f (x, y, z) = c}
As, podremos considerar la representacin grfica de z = g(x, y) = x2 + y 2 c
Un ejemplo particular interesante de trabajar es el de las cudricas, superficies
de nivel de una funcin cuadrtica en x y z:
(a): f (x, y, z) = z x2 y 2 z = g(x, y) = x2 + y 2 + c
%EJEMPLO 4.2.1
%Representamos un paraboloide, superficie de nivel de una funcin
%como la del ejemplo (a). Se representan para c=1, c=5.
29
f=inline(x.^2+y.^2+c,x,y,c);
[X,Y]=meshgrid(-2:.2:2);
surf(X,Y,f(X,Y,1))
hold on
surf(X,Y,f(X,Y,5))
15
10
0
2
1
2
1
-1
-1
-2
-2
(b): f (x, y, z) = z x2 + y 2 z = g(x, y) = x2 y 2 + c
%EJEMPLO 4_2_2
%Paraboloide hiperblico, superficie de nivel de una funcin
%como la del ejemplo (b). Se representa para c=1, c=10.
f=inline(x.^2-y.^2+c,x,y,c);
[X,Y]=meshgrid(-2:.2:2);
surf(X,Y,f(X,Y,1))
hold on
surf(X,Y,f(X,Y,10))
30
15
10
-5
2
1
2
1
-1
-1
-2
-2
p
c 0, una rama
2
2
(c): f (x, y, z) = z +x +y z = g(x, y) = x + y c
c < 0, dos ramas
2
%EJEMPLO 4.2.3
%Un hiperboloide es la superficie de nivel de una funcin
%como la del ejemplo (c). Se representan para c=1, c=-1.
f=inline(sqrt(x.^2+y.^2-c),x,y,c);
[X,Y]=meshgrid(-2:.2:2);
plot3(X,Y,f(X,Y,1))
hold on
plot3(X,Y,-f(X,Y,1))
hold off
plot3(X,Y,f(X,Y,-1))
hold on
plot3(X,Y,-f(X,Y,-1))
31
3
2
1
0
-1
-2
-3
2
1
2
1
-1
-1
-2
-2
x2 y 2
x2 y 2 z 2
(d): f (x, y, z) = 2 + 2 + 2 z =
+ 2 d (c2 )
a
b
c
a2
b
%EJEMPLO 4.2.4
%Un elipsoide es la superficie de nivel de una funcin
%como la del ejemplo (d). Para k=1,k=2 (caso a=2,b=3,c=1)
f=inline(sqrt(-x.^2/4-y.^2/9+k),x,y,k);
[X,Y]=meshgrid(-2:.2:2);
plot3(X,Y,f(X,Y,1))
hold on
plot3(X,Y,f(X,Y,2))
32
1.5
0.5
0
2
0
-2
-1
Muchas veces, sin embargo, ser difcil o incluso imposible despejar una variable
en funcin de las otras dos en una ecuacin del tipo f (x, y, z) = c. El autor del
libro nos deja la funcin impl.m, que tomar valores z = z0 y trazar, empleando el
comando contour, curvas de nivel de la superficie de nivel que buscamos intesecada
con el plano z = z0 .
4.2.
Secciones planas de un slido.
Supongamos una funcin f : R3 R que asigna a cada punto del espacio
una caracterstica numrica (por ejemplo temperatura, densidad, presin). Podemos
dibujar planos paralelos a los coordenados que representarn mediante un ndice
de color el valor de la imagen. Esta representacin es muy til en casos donde no
se pueda despejar una variable como anteriormente. Nos aportar una informacin
comparativa muy ilustrativa, y ser tambin vlida para detectar extremos relativos.
Ser clave en este apartado el uso del comando slice, que precisamente realiza la
tarea anteriormente descrita.
%EJEMPLO 4.3
f=inline(log(x.^2+0.1)+sin(y).*cos(z),x,y,z);
x=0:.2:2;
y=0:.2:2;
z=0:.2:4;
[X,Y,Z]=meshgrid(x,y,z);
W=f(X,Y,Z);
slice(X,Y,Z,W,1,1,2)
colormap(hot)
33
colorbar
2
1.5
1
3
0.5
0
-0.5
1
-1
-1.5
0
2
-2
1.5
2
1.5
0.5
0.5
0
4.3.
-2.5
-3
El espacio vectorial gradiente.
Podemos definir el espacio vectorial gradiente como el conjunto de los vectores
gradiente en cada punto del espacio por una funcin f : R3 R . Por ejemplo,
programamos para la funcin
f (x, y, z) =
x3 3y 2 3z
+
+
3
2
2
%EJEMPLO 4.4
[X,Y]=meshgrid(0:.5:2);
U=-X.^2;
V=Y*3;
W=3/2+0*X;
for z=[-1,0,1]
Z=1.5*z+0*X;
quiver3(X,Y,Z,U,V,W)
end
34
2
1
5
0
-1
-2
-0.5
0.5
1.5
Vectores gradiente
35
-5
5.
RESOLUCIN DE ECUACIONES
Veremos cmo resolver sistemas no lineales de dos ecuaciones con dos incgnitas
5.1.
f (x, y) = 0
g(x, y) = 0
Soluciones simblicas
Explicaremos con un ejemplo el procedimiento a seguir para resolver la interseccin de dos curvas:
f (x, y) = x2 + y 2 2
g(x, y) = x2 y
Nos apoyaremos en las grficas de nivel :
f (x, y) = 0
g(x, y) = 0
%EJEMPLO 5.1
syms x y
f=x^2-2*y;
g=x^2+3*y;
[a,b]=solve(f,g);
double([a,b])
ans =
0 0
0 0
Estas grficas tienen una interseccin doble en el (0, 0).
36
1.5
0.5
-0.5
-1
-1.5
-2
-1.5
-1
-0.5
0.5
1.5
Doble interseccin
5.2.
Soluciones de ecuaciones de una variable
Un algoritmo muy conocido para la resolucin de ecuaciones es el mtodo de
Newton
0
xn+1 = xn f (xn )/f (xn )
Esta sucesin converge bien a la solucin buscada cuando f (xn ) 6= 0 aunque
0
tambin es utilizada para encontrar las races f (x) = 0 con f (x) = 0 (en este caso,
si converge, ser lentamente). Vamos a escribir un programa para obtener las races
de una funcin basndonos en ste algoritmo
%EJEMPLO 5.2
valorinicial=input(introduce el valor inicial)
N=input(introduce el nmero de iteraciones deseadas)
x=zeros(N,1) %vector de ceros
x(1)=valorinicial;
for n=1:n-1
x(n+1)=x(n)-f(x(n))/df(x(n));
end
[x,f(x)]
Donde f es la funcin deseada y df , su derivada, son dos funciones que se tienen
que programar en MATLAB, devolviendo ambas un valor.
37
Si tenemos una situacin en la que hay dos races y damos un valor ms cercano
a una (sin que ste sea un mximo o un mnimo relativo), el mtodo de Newton
converger a la raz, si por el contrario es un mximo (o mnimo), no converger
En MATLAB el comando f zero tambin sirve para encontrar races de la forma
f (x) = 0 ; la forma de usarlo es la siguiente:
%EJEMPLO 5.3
f=inline(cos(3*x)+.5*x,x);
raiz=fzero(f,[-2,2])
%encontraremos las races en el intervalo [-2 2]
Zero found in the interval: [-2, 2].
raiz =
-0.4483
5.3.
Resolucin de una ecuacin de dos variables
Si no se puede resolver la ecuacin planteada, podemos dar una aproximacin.
Si tenemos un punto (x0 , y0 ) tal que f (x0 , y0 ) = 0 y fy (x0 , y0 ) 6= 0 por el teorema
de la funcin implcita sabemos que para los x cercanos a x0 la curva de nivel
f (x, y) = 0 es la grfica de una funcin y = g(x), ahora s podemos encontrar los
valores de la y en funcin de los de las x .
Hay que tener en cuenta que el comando f zero slo se utiliza en funciones de una
variable ; si queremos que evale ms de una variable lo que haremos ser considerar
todas las variables menos una como parmetros.
Vamos a ver un ejemplo con la funcin:
f (x, y) = 3 sin(x) + exp(y 2 ) en el intervalo [0, 1] [1, 3]
%EJEMPLO 5.4
function z=f(y,x) %hemos intercambiado f(y,x)
z=3*sin(x)+y.*exp(y^2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
x=-.2:.05:1.05;
y=zeros(size(x));
y(1)=fzero(f,exp(1),[],-.2);
for n=2:120
y(n)=fzero(f,y(n-1),[],x(n));
end
38
0.5
-0.5
-1
-0.2
0.2
0.4
39
0.6
0.8
1.2
6.
6.1.
OPTIMIZACIN.
Puntos crticos. Evaluacin de la segunda derivada.
Un punto crtico de una funcin bidimensional f (x, y) es un punto (x0 , y0 ) del
dominio en el que f es diferenciable y en el que su diferencial es nula. Un punto
crtico puede ser extremo local de f o no.
Para encontrar los puntos crticos de una funcin debemos resolver el sistema:
fx (x, y) = 0
fy (x, y) = 0
donde fx fy son las derivadas parciales de f . Hay diversos caminos para encontrar
soluciones a estas ecuaciones.
Una vez que el gradiente es nulo, debemos observar las derivadas de orden mayor,
para discutir el comportamiento de f en un entorno de los puntos crticos (recordar
los resultados al respecto en funciones de una variable).
0
-0.5
-2
-1
-1.5
-1
-2
2
0
1
1
0
-1
-2
f (x, y) = xy
p
3 x 2 y2
Para extender el concepto de evaluacin de un punto crtico por la segunda
derivada del clculo de variable real, se introduce la matriz hessiana,
fxx (x, y) fxy (x, y)
H(x, y) =
fyx (x, y) fyy (x, y)
Esta matriz ser simtrica cuando f C 2 .
Ahora, el resultado que determinar la naturaleza del punto crtico ser:
40
Si
Si
Si
Si
det(H(x0 , y0 ))
det(H(x0 , y0 ))
det(H(x0 , y0 ))
det(H(x0 , y0 ))
>
>
<
=
0
0
0
0
y fxx (x0 , y0 ) > 0 (x0 , y0 ) es un mnimo local.
y fxx (x0 , y0 ) < 0 (x0 , y0 ) es un mximo local.
(x0 , y0 ) es un punto de ensilladura.
No podemos llegar a una conclusin.
Como curiosidad notamos que en los puntos de ensilladura, al hacer intersecciones con planos horizontales, se tiende hacia un comportamiento hiperblico en
el punto en cuestin.
1.5
1
0.5
0
-0.5
-1
-1.5
-2
-2
-1.5
-1
-0.5
f (x, y) = xy
0.5
1.5
p
3 x 2 y2
%EJEMPLO 6.1
f=inline(x.*y.*sqrt(3-x.^2-y.^2),x,y);
x=-2:.4:2;
y=-2:.4:2;
[X,Y]=meshgrid(x,y);
Z=f(X,Y);
contour(X,Y,Z,25);
Este es el cdigo MATLAB que lleva al resultado grfico superior.
41
6.2.
Estimacin de mximos y mnimos.
MATLAB tiene algunas herramientas que nos ayudarn en el clculo de extremos
en un intervalo del dominio. Veamos un ejemplo en una variable:
%EJEMPLO 6.2
f=inline((x.^(-2)+.01).*sin(x),x);
[M,i]=max(f(x))
M =
14.2747
i =
24
xmax=x(i)
xmax =
0.0700
[m,j]=min(f(x))
m =
-49.9969
j =
23
xmin=x(j)
xmin =
-0.0200
Los comandos max f (x) y mn f (x) funcionan dndonos los extremos que ha
obtenido evaluando en f los valores de x que le hemos especificado. En el ndice nos
dan la posicin de la muestra en que se encuentra este valor de la variable, y por
ltimo le pedimos que nos d cul es el valor de x para el que obtenemos el extremo.
Un caso multivariable:
%EJEMPLO 6.3
f=inline(x.^4-exp(.05*y),x,y);
x=-2:.09:2;
y=-2:.09:2;
[X,Y]=meshgrid(x,y);
[fila,col]=max(f(X,Y));
%Guardamos los mximos de cada columna
[maxf,j]=max(fila)
%Hallamos el mximo del vector de mximos
maxf =
42
15.0952
j =
1
x0=x(j)
x0 =
-2
y0=y(col(j))
y0 =
-2
As, tenemos que f (2, 2) f (xj , yj ) para cualquier punto (xj , yj ) de la matriz.
Vamos por ltimo a realizar un ejemplo de bsqueda de extremos en una funcin
bidimensional.
%EJEMPLO 6.4
f=inline(x.^2+y.^2,x,y);
x=-2:.09:2;
y=-2:.09:2;
[X,Y]=meshgrid(x,y);
surf(X,Y,f(X,Y))
syms x y
fx=2*x;
fy=2*y;
[a,b]=solve(fx,fy)
a =
0
b =
0
double([a,b])
ans =
0
0
fxx=diff(fx,x);
fxy=diff(fx,y);
fyy=diff(fy,y);
D=fxx*fyy-fxy^2
D =
4
subs(D,[x,y],[a,b])
ans =
4
%subs sustituye variables simblicas por nmeros.
43
subs(fxx,[x,y],[a,b])
ans =
2
%det(H(0,0))>0,fxx(0,0)>0 -------> f tiene un mnimo en (0,0).
0
2
1
2
1
-1
-1
-2
6.3.
-2
Funciones de tres variables.
Como en el caso bidimensional, los puntos crticos son aquellos del dominio en
los que f es diferenciable y
f (x0 , y0 , z0 ) = (0, 0, 0).
Las soluciones de este sistema son candidatos a extremos relativos de la funcin.
Para hacernos una idea, como se explic anteriormente; podemos emplear la instruccin slice. Ser fcil intuir posibles extremos a la luz de la representacin por
planos paralelos a los coordenados que han sido coloreados segn la imagen de cada
punto. Por ejemplo.
%EJEMPLO 6.5
f=inline(exp(sqrt(abs(x-y+z))),x,y,z);
x=linspace(-2,2,43);
y=linspace(-2,2,43);
z=linspace(-2,2,43);
[X,Y,Z]=meshgrid(x,y,z);
44
W=f(X,Y,Z);
slice(X,Y,Z,W,[-1 0 1],0,0);
colorbar
11
10
-1
-2
6
5
4
0
3
-1
-2
-2
-1
Podemos intuir que habr un mnimo en (0, 0, 0), que valdr aproximadamente 1. Efectivamente,
%EJEMPLO 6.6
corners=[-2,2,-2,2,-2,2];
subplot(2,2,1)
impl(f,corners,1.75)
title(c=1.75)
subplot(2,2,2)
impl(f,corners,1.45)
title(c=1.45)
subplot(2,2,3)
impl(f,corners,1.20)
title(c=1.20)
subplot(2,2,4)
impl(f,corners,1.000000000000000000001)
title(c=1.000000000000000000001)
45
c=1.75
c=1.45
0
z
0
-2
2
-2
2
0
y
-2
-2
c=1.2
-2
-2
c=1.000000000000000000001
2
2
0
-2
2
2
0
0
y
-2
-2
0
-2
2
0
y
-2
-2
Cada vez nos acercamos ms al valor del mnimo, por lo tanto, el par de
planos que representan la superficie de nivel para un valor de c cualquiera, van
estando ms prximos. En el valor lmite, los planos sern coincidentes.
46
47