graficas 3d matlab

47
PRÓLOGO MATLAB es un programa que nos permite desarrollar numerosas aplicaciones al cálculo, la representación y la programación. En este manual, inspirado en el libro A MATLAB companion for Multivariable Calculus, de Jeery M. Cooper, pretendemos complementar la asignatura de Cálculo Diferencial tratando la mayoría de los puntos del temario desde un punto de vista informático, 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 básicos para el manejo del programa sobre tratamiento de vectores: representación, posición relativa de dos planos, introducción a dimensión superior; curvas en el plano: curvas paramétricas, tangencias a curvas paramétricas, giros; funciones de dos y tres variables: declaración, representación, funciones polares, supercies de funciones de tres variables; resolución de ecuaciones: método de Newton, intersección de curvas y supercies y por último problemas de optimización. Además hemos apoyado las explicaciones con numerosos ejemplos y guras ge- neradas por MATLAB para que ilustren y ayuden a la hora de reproducir casos similares. Hemos utilizado algunas funciones no predeterminadas cuyo código puede en- contrarse en la página 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 cálculo multivariable y que anime a los compañeros a ver el ordenador como una máquina capaz de ayudarnos en el trabajo matemático. Por último, agradecemos a nuestro tutor, el profesor José María Martínez Anse- mil, la ayuda prestada para realizar este trabajo. Mario Díaz-Romeral Ruiz y Juan Jesús Tebar Moreno Alumnos de Matemáticas becarios de excelencia de la CAM CURSO 2005/06 1

Upload: thaniafpm

Post on 02-Oct-2015

74 views

Category:

Documents


4 download

DESCRIPTION

Tutorial para hacer gráficos en 3D en Matlab

TRANSCRIPT

  • PRLOGO

    MATLAB es un programa que nos permite desarrollar numerosas aplicacionesal clculo, la representacin y la programacin. En este manual, inspirado en ellibro A MATLAB companion for Multivariable Calculus, de Jeffery M. Cooper,pretendemos complementar la asignatura de Clculo Diferencial tratando la mayorade los puntos del temario desde un punto de vista informtico, para que el alumnopueda 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 tresvariables: declaracin, representacin, funciones polares, superficies de funciones detres variables; resolucin de ecuaciones: mtodo de Newton, interseccin de curvasy superficies y por ltimo problemas de optimizacin.Adems hemos apoyado las explicaciones con numerosos ejemplos y figuras ge-

    neradas por MATLAB para que ilustren y ayuden a la hora de reproducir casossimilares.Hemos utilizado algunas funciones no predeterminadas cuyo cdigo puede en-

    contrarse en la pgina web:

    http : //www.math.umd.edu/jec/matcomp/matcompmfiles/mfiles.html

    Esperamos que este trabajo sea de utilidad a la hora de introducirse en MATLABcomo herramienta aplicable al campo del clculo multivariable y que anime a loscompaeros a ver el ordenador como una mquina capaz de ayudarnos en el trabajomatemtico.Por ltimo, agradecemos a nuestro tutor, el profesor Jos Mara Martnez Anse-

    mil, la ayuda prestada para realizar este trabajo.

    Mario Daz-Romeral Ruiz y Juan Jess Tebar MorenoAlumnos de Matemticas becarios de excelencia de la CAMCURSO 2005/06

    1

  • 1. VECTORES RECTAS Y PLANOS

    1.1. Vectores en dimensiones dos y tres.

    Los vectores se escriben en MATLAB de la siguiente forma: v = [a, b, c], y lanorma 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 elcomando 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 planop0=[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 rojoaxis equal %son los ejes coordenadoshold off %anula hold on

    -2 -1 0 1 2 3 4 5-2

    -1

    0

    1

    2

    3

    4

    Resta de vectores

    Tenemos tambin las funciones dot(v, w) o tambin v w0 para hacer el productoescalar de dos vectores; y para el producto vectorial (en tres dimensiones) est lafuncin cross(v, w).

    2

  • %EJEMPLO 1.2%producto escalar y vectorial de dos vectores en tres dimensiones%producto vectorialSYMS a b c x y z %declaracin de variables simblicasv=[a b c];w=[x y z];cross(v,w)ans =

    [ b*z-c*y, c*x-a*z, a*y-b*x]%producto escalarv*wans =

    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 comandoplot3. (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 poligonalx=[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

    3

  • 00.5

    11.5

    2

    2

    3

    4

    51

    1.5

    2

    2.5

    3

    3.5

    4

    Otro comando muy usado que sirve para hacer figuras es fill (idem en 3 dimen-siones.)

    %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 2 3 4 5 6 7-1

    0

    1

    2

    3

    4

    5

    6

    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.5p0=[1 1 1];v=[1 0 0];w=[1 3 5];for s=-1:.5:1

    for t=-1:.5:1arrow(p0,s*v+t*w)hold on

    endend

    -1

    0

    1

    2

    3 -2-1

    01

    23

    4

    -1

    -0.5

    0

    0.5

    1

    Otra manera es con la funcin predefinida plane(p0, N) en la que p0 es un puntoy N el vector normal al plano, donde sale dibujado mejor el plano, e incluso estdibujado el vector normal.

    %EJEMPLO 1.6%aqu dibujaremos un plano apoyndonos en la funcin plane%realizada por el autor del librop0=[1 1 2];N=[1 0 3];plane(p0,N)

    5

  • 0.51

    1.5 0

    0.5

    1

    1.5

    2

    1.8

    2

    2.2

    2.4

    2.6

    2.8

    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 rectap0=[1 3 6];%punto comnN1=[0 3 3];N2=[1 2 1];plane(p0,N1)%dibuja primer planohold onplane(p0,N2)L=cross(N1,N2);%vector normal a N1 y N2arrow3(p0,L)%simula la recta interseccin de ambos planoshold off

    6

  • 00.511.522.533.5

    5.2

    5.4

    5.6

    5.8

    6

    6.2

    6.4

    6.6

    6.8

    1.4. Grficos tridimensionales

    Es usual cambiar el punto de vista en grficos tridimensionales, en MATLAB sehace 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. Conrotate3doff se finaliza el comando.

    7

  • 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 pa-rmetro 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 simblicasyms tx=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]

    8

  • -1-0.5

    00.5

    1-1

    -0.5

    0

    0.5

    1

    -101

    Tambin en el caso tridimensional podemos representar curvas paramtricas dela forma (x(t), y(t), z(t)) con t el parmetro real con el que venimos trabajando. Unejemplo 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 ezplot3syms tx=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]

    9

  • -1-0.5

    00.5

    1

    -1-0.5

    00.5

    10

    0.5

    1

    1.5

    2

    2.2. Vectores tangentes a una curva paramtrica.

    Nos planteamos ahora el problema de las tangencias a curvas paramtricas, ycmo 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, comose 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 representat=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)

    endview(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 tx=cos(t);y=sin(t);z=t/(2*pi);ezplot3(x,y,z,[0,4*pi],animate);

    -2-1

    01

    2 -1.5 -1-0.5 0

    0.5 11.5

    0

    0.5

    1

    1.5

    2

    2.5

    Tambin resulta representativo el estudio de algn caso en el que la derivada seanule.

    %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 onfor j=linspace(-1,1,4);

    p=[x(j),y(j)];v=[3*j^2,2*j];arrow(p,v,r)

    end

    -1 0 1 2 3 4-1

    -0.5

    0

    0.5

    1

    1.5

    2

    2.5

    3

    Para la comprensin de estos cdigos ser necesario conocer las funciones arrowy arrow3 que se definen en los archivos del mismo nombre y que fueron programadaspor el autor.

    2.3. Longitud de arcos.

    El clculo de la longitud de un segmento recto no plantea excesivas complicacio-nes. 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 sereduce 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 extremosdefinidos el problema no es en absoluto trivial. MATLAB lo tratar de varias formasSer til tambin conocer la expresin de la longitud de una curva paramtrica

    que aporta el clculo integral:

    Z ba

    kv(t)k dt =Z ba

    px0(t)2 + y0(t)2 + z0(t)2dt

    %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

  • %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 br=[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 ala curva paramtrica en un punto donde exista diferencial, que surgen a partir delvector tangente a la curva en el punto en cuestin. Forman lo que se llama cuadrode Frenet, y se definen:

    T (t) =v(t)

    kv(t)k =[x0(t), y0(t), z0(t)]p

    x0(t)2 + y0(t)2 + z0(t)2

    El vector tangente unitario (simplemente el vector velocidad dividido por sumdulo)

    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 frenet, que nos dibuja sobre una curva para-

    mtrica 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 geome-tra. Aplicndolas al estudio de curvas paramtricas, podemos usar MATLAB paracalcular la imagen de una de ellas por una rotacin respecto a cualquier punto y concualquier argumento usando tcnicas similares a las empleadas en lgebra.

    Si tenemos un punto (x, y) del plano y queremos realizar una rotacin de centroel origen y argumento 0 2, la matriz

    R =

    cos sin 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)=1arg=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

    -5 0 5-4

    -3

    -2

    -1

    0

    1

    2

    3

    4

    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.1function z=f(x,y)z=x.^2+y;

    b) Introducindola directamente sobre la pantalla de ejecucin.

    %EJEMPLO 3.1.2f=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 comple-jidad

    %EJEMPLO 3.2% vamos a programar la funcin f1(x,y)=exp(u-2v)*cos(3u), donde:% u=3x^2+5y y v=3x+2yfunction 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, ycon a < x < b, c < y < dMATLAB divide el rectngulo en las partes indicadas mediante el comando

    meshgrid.

    17

  • %EJEMPLO 3.3.1%-1
  • -1

    0

    1

    2

    2

    2.5

    3

    3.5

    40

    2

    4

    6

    8

    10

    x 106

    Se puede omitir el paso de crear el rectngulo para representar dichas funcionesprogramando una aplicacin especfica.

    %EJEMPLO 3.3.2function 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 esquinasa=vertices(1);b=vertices(2);c=vertices(3);d=vertices(4);%dividimos como antes el rectngulo en subrrectngulosx=linspace(a,b,41);y=linspace(c,d,31);[X,Y]=meshgrid(x,y);%utilizamos el comando feval para evaluar la funcin en X,YZ=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 domi-nio circular en vez de rectangular.

    %EJEMPLO 3.4%primero hacemos un rectngulo en r,tr=linspace(0,2,16);t=linspace(0,2*pi,16);[R,T]=meshgrid(r,t);%ahora "curvamos" el rectngulo en coordenadas x,yX=R.*cos(T);Y=R.*sin(T);Z=f(X,Y);surf(X,Y,Z)%tomamos una f genrica.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%En la pantalla de ejecucinf=input(2*x.*y./exp(x),x,y);ejemplo3_4

    -2-1

    01

    2

    -2

    -1

    0

    1

    2-20

    -10

    0

    10

    20

    3.3. Curvas de nivel

    MATLAB sabe representar la curva que define la interseccin entre la grfica deuna 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 interesenx=-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 oncontour(X,Y,Z,10)hold off

    -2-1

    01

    2

    -2

    0

    2

    40

    10

    20

    30

    40

    3.4. Tcnicas grficas para funciones simblicas

    MATLAB incluye una serie de comandos para la representacin de funcionessimblicas de dos variables, entre ellos destacan: ezsurf , ezmesh y ezcontour. Porejemplo:

    21

  • %EJEMPLO 3.6%declaramos como variables simblicas x e ysyms x yf=sin(x)*exp(y^2)f =sin(x)*exp(y^2)ezsurf(f,[[1 1][2 1] [1 2] [2 2]])

    -1-0.5

    00.5

    1

    -1

    -0.5

    0

    0.5

    1-3

    -2

    -1

    0

    1

    2

    3

    x

    sin(x) exp(y2)

    y

    Los otros dos comandos funcionan de forma similar, slo que para funciones demayor complejidad.

    3.5. Derivadas parciales y direccionales.

    Para medir la variacin de una funcin, se considera la restriccin de f a rectasparalelas 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

    x(x0, y0) = lm

    xx0f(x, y0) f(x0, y0)

    x x0

    22

  • f

    y(x0, y0) = lm

    yy0f(x0, y) f(x0, y0)

    y y0y forman el gradiente

    f(x, y) =f

    x(x, y),

    f

    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.7f=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 onx=linspace(0,2,51);xslice(f,x,1)hold off

    00.5

    11.5

    2

    0

    0.5

    1

    1.5

    20

    20

    40

    60

    80

    100

    3.6. Derivadas direccionales

    De forma ms general, tomamos en vez de v = [1, 0] y u = [0, 1] otro vectorw = [w1, w2]

    23

  • para realizar una derivada direccional segn la definicin:

    Duf(x0, y0) = lmh0

    f(x0 + hw1, y0 + hw2) f(x0, y0)h

    La funcin mslice funciona con dos argumentos mslice(f, P ), donde f es unafuncin definida en lnea y P es un punto a partir del cual se define un vector (hacien-do click en otro punto del plano) y MATLAB nos devuelve la derivada direccionaldel punto en la direccin del vector.

    %EJEMPLO 3.8ff =

    Inline function:f(x,y) = x+y.^2

    PP =

    1 2mslice(f,P)This is a chance to enlarge the window, and rotate the figureWhen you are finished, enter return

    u1 u2 Dufans =

    -0.9681 -0.2507 -1.9709ans =

    0.8904 -0.4552 -0.9305ans =

    0.9623 0.2718 2.0497ans =

    -0.8165 0.5773 1.4928ans =

    0.0104 0.9999 4.0102

    24

  • 0 0.51 1.5

    2

    11.5

    22.5

    30

    10

    20

    x axis y axis

    z a

    xis

    x axis

    y a

    xis P

    -0.5 0 0.5 1 1.5 2 2.51.5

    2

    2.5

    Observamos que el vector gradiente en un punto es ortogonal a la curva de nivelque pasa por l.

    3.7. Aproximacin por un plano tangente

    Es de gran utilidad aproximar por una expresin lineal (afn) una curva en dosvariables en el entorno de un punto (x0, y0). El plano tangente a la curva en unpunto 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 , fyson las derivadas parciales.

    %EJEMPLO 3.9f=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 fp(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 ong=inline(-1+2*x+y,x,y);qsurf(g,[-.3,.7,-.9,.1])

    -1-0.500.51

    -1

    -0.5

    0

    0.5

    1

    -4

    -2

    0

    2

    Slo queda por explicar la funcin que se ha definido p.m y que nos da el planotangente a la curva por un punto dndole la funcin, las derivadas parciales y elpunto. La transcripcin del cdigo es:

    %funcion pfunction salida=p(f,fx,fy,x0,y0)syms x ysalida=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 tomavalores extremos. Cuando esto ocurre la escala del grfico hace que se pierda detallede cmo es en realidad la grfica.Para solventarlo se pueden seccionar los valores dela funcin ganando precisin. Por ejemplo:

    %EJEMPLO 3.10f=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 siguienteW=(Z-4

  • [X,Y]=meshgrid(-2:.2:2);subplot(2,2,1)%para c=1surf(X,Y,f(X,Y,1))subplot(2,2,2)%para c=.4surf(X,Y,f(X,Y,.4))subplot(2,2,3)%para c=pisurf(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

    -20

    2

    -20

    2-2

    0

    2

    -20

    2

    -20

    2-1

    0

    1

    -20

    2

    -20

    2-10

    0

    10

    -20

    2

    -20

    2-2

    0

    2

    x 10-4

    28

  • 4. FUNCIONES DE TRES VARIABLES Y SU-PERFICIES PARAMTRICAS

    4.1. Definicin de funciones tridimensionales. Niveles.

    Las funciones de tres variables f : R3 R pueden definirse en MATLAB deforma anloga a como se han venido definiendo en el caso unidimensional y bidi-mensional. 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 *.mfunction 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 tridimensionalcontenida en un espacio en cuatro dimensiones, lo que no puede ser visualizado. Sinembargo, contamos con una herramienta: superficies tridimensionales de nivel. Estasson, 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 + y2 cUn 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 y2 z = g(x, y) = x2 + y2 + 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 onsurf(X,Y,f(X,Y,5))

    -2-1

    01

    2

    -2

    -1

    0

    1

    20

    5

    10

    15

    (b): f(x, y, z) = z x2 + y2 z = g(x, y) = x2 y2 + 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 onsurf(X,Y,f(X,Y,10))

    30

  • -2-1

    01

    2

    -2

    -1

    0

    1

    2-5

    0

    5

    10

    15

    (c): f(x, y, z) = z2+x2+y2 z = g(x, y) = px2 + y2 c

    c 0, una ramac < 0, dos ramas

    %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 onplot3(X,Y,-f(X,Y,1))hold offplot3(X,Y,f(X,Y,-1))hold onplot3(X,Y,-f(X,Y,-1))

    31

  • -2-1

    01

    2

    -2

    -1

    0

    1

    2-3

    -2

    -1

    0

    1

    2

    3

    (d): f(x, y, z) =x2

    a2+y2

    b2+z2

    c2 z =

    sx2

    a2+y2

    b2 d(c2)

    %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 onplot3(X,Y,f(X,Y,2))

    32

  • -2 -1 0 12

    -20

    2

    0

    0.5

    1

    1.5

    Muchas veces, sin embargo, ser difcil o incluso imposible despejar una variableen funcin de las otras dos en una ecuacin del tipo f(x, y, z) = c. El autor dellibro nos deja la funcin impl.m, que tomar valores z = z0 y trazar, empleando elcomando contour, curvas de nivel de la superficie de nivel que buscamos intesecadacon el plano z = z0.

    4.2. Secciones planas de un slido.

    Supongamos una funcin f : R3 R que asigna a cada punto del espaciouna caracterstica numrica (por ejemplo temperatura, densidad, presin). Podemosdibujar planos paralelos a los coordenados que representarn mediante un ndicede color el valor de la imagen. Esta representacin es muy til en casos donde nose pueda despejar una variable como anteriormente. Nos aportar una informacincomparativa muy ilustrativa, y ser tambin vlida para detectar extremos relativos.Ser clave en este apartado el uso del comando slice, que precisamente realiza latarea anteriormente descrita.

    %EJEMPLO 4.3f=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

    00.5

    11.5

    2

    0

    0.5

    1

    1.5

    20

    1

    2

    3

    4

    -3

    -2.5

    -2

    -1.5

    -1

    -0.5

    0

    0.5

    1

    1.5

    2

    4.3. El espacio vectorial gradiente.

    Podemos definir el espacio vectorial gradiente como el conjunto de los vectoresgradiente en cada punto del espacio por una funcin f : R3 R . Por ejemplo,programamos para la funcin

    f(x, y, z) = x3

    3+3y2

    2+3z

    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

  • -0.5 0 0.5 1 1.5 2-5

    0

    5

    -2

    -1

    0

    1

    2

    Vectores gradiente

    35

  • 5. RESOLUCIN DE ECUACIONES

    Veremos cmo resolver sistemas no lineales de dos ecuaciones con dos incgnitas

    f(x, y) = 0g(x, y) = 0

    5.1. Soluciones simblicas

    Explicaremos con un ejemplo el procedimiento a seguir para resolver la intersec-cin de dos curvas:

    f(x, y) = x2 + y2 2g(x, y) = x2 y

    Nos apoyaremos en las grficas de nivel :

    f(x, y) = 0

    g(x, y) = 0

    %EJEMPLO 5.1syms x yf=x^2-2*y;g=x^2+3*y;[a,b]=solve(f,g);double([a,b])ans =0 00 0

    Estas grficas tienen una interseccin doble en el (0, 0).

    36

  • -2 -1.5 -1 -0.5 0 0.5 1 1.5 2-1.5

    -1

    -0.5

    0

    0.5

    1

    1.5

    2

    Doble interseccin

    5.2. Soluciones de ecuaciones de una variable

    Un algoritmo muy conocido para la resolucin de ecuaciones es el mtodo deNewton

    xn+1 = xn f(xn)/f 0(xn)Esta sucesin converge bien a la solucin buscada cuando f

    0(xn) 6= 0 aunque

    tambin es utilizada para encontrar las races f(x) = 0 con f0(x) = 0 (en este caso,

    si converge, ser lentamente). Vamos a escribir un programa para obtener las racesde una funcin basndonos en ste algoritmo

    %EJEMPLO 5.2valorinicial=input(introduce el valor inicial)N=input(introduce el nmero de iteraciones deseadas)x=zeros(N,1) %vector de cerosx(1)=valorinicial;for n=1:n-1x(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 tienenque programar en MATLAB, devolviendo ambas un valor.

    37

  • Si tenemos una situacin en la que hay dos races y damos un valor ms cercanoa una (sin que ste sea un mximo o un mnimo relativo), el mtodo de Newtonconverger a la raz, si por el contrario es un mximo (o mnimo), no convergerEn MATLAB el comando fzero tambin sirve para encontrar races de la forma

    f(x) = 0 ; la forma de usarlo es la siguiente:

    %EJEMPLO 5.3f=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 nivelf(x, y) = 0 es la grfica de una funcin y = g(x), ahora s podemos encontrar losvalores de la y en funcin de los de las x .Hay que tener en cuenta que el comando fzero slo se utiliza en funciones de una

    variable ; si queremos que evale ms de una variable lo que haremos ser considerartodas las variables menos una como parmetros.Vamos a ver un ejemplo con la funcin:

    f(x, y) = 3 sin(x) + exp(y2) en el intervalo [0, 1] [1, 3]%EJEMPLO 5.4function 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:120y(n)=fzero(f,y(n-1),[],x(n));end

    38

  • -0.2 0 0.2 0.4 0.6 0.8 1 1.2-1

    -0.5

    0

    0.5

    39

  • 6. OPTIMIZACIN.

    6.1. Puntos crticos. Evaluacin de la segunda derivada.

    Un punto crtico de una funcin bidimensional f(x, y) es un punto (x0, y0) deldominio en el que f es diferenciable y en el que su diferencial es nula. Un puntocrtico puede ser extremo local de f o no.Para encontrar los puntos crticos de una funcin debemos resolver el sistema:

    fx(x, y) = 0fy(x, y) = 0

    donde fx fy son las derivadas parciales de f . Hay diversos caminos para encontrarsoluciones 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 (recordarlos resultados al respecto en funciones de una variable).

    -2-1

    01

    2

    -2

    -1

    0

    1

    2

    -2

    -1.5

    -1

    -0.5

    0

    f(x, y) = xyp3 x 2 y2

    Para extender el concepto de evaluacin de un punto crtico por la segundaderivada del clculo de variable real, se introduce la matriz hessiana,

    H(x, y) =

    fxx(x, y) fxy(x, y)fyx(x, y) fyy(x, y)

    Esta matriz ser simtrica cuando f C2.Ahora, el resultado que determinar la naturaleza del punto crtico ser:

    40

  • Si det(H(x0, y0)) > 0 y fxx(x0, y0) > 0 (x0, y0) es un mnimo local.Si det(H(x0, y0)) > 0 y fxx(x0, y0) < 0 (x0, y0) es un mximo local.Si det(H(x0, y0)) < 0 (x0, y0) es un punto de ensilladura.Si det(H(x0, y0)) = 0 No podemos llegar a una conclusin.

    Como curiosidad notamos que en los puntos de ensilladura, al hacer inter-secciones con planos horizontales, se tiende hacia un comportamiento hiperblico enel punto en cuestin.

    -2 -1.5 -1 -0.5 0 0.5 1 1.5-2

    -1.5

    -1

    -0.5

    0

    0.5

    1

    1.5

    f(x, y) = xyp3 x 2 y2

    %EJEMPLO 6.1f=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 extremosen un intervalo del dominio. Veamos un ejemplo en una variable:

    %EJEMPLO 6.2f=inline((x.^(-2)+.01).*sin(x),x);[M,i]=max(f(x))M =14.2747i =24xmax=x(i)xmax =0.0700[m,j]=min(f(x))m =-49.9969j =23xmin=x(j)xmin =-0.0200

    Los comandos max f(x) y mn f(x) funcionan dndonos los extremos que haobtenido evaluando en f los valores de x que le hemos especificado. En el ndice nosdan la posicin de la muestra en que se encuentra este valor de la variable, y porltimo le pedimos que nos d cul es el valor de x para el que obtenemos el extremo.Un caso multivariable:

    %EJEMPLO 6.3f=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 mximosmaxf =

    42

  • 15.0952j =

    1x0=x(j)x0 =

    -2y0=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 funcinbidimensional.

    %EJEMPLO 6.4f=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 yfx=2*x;fy=2*y;[a,b]=solve(fx,fy)a =0b =0double([a,b])ans =

    0 0fxx=diff(fx,x);fxy=diff(fx,y);fyy=diff(fy,y);D=fxx*fyy-fxy^2D =4subs(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).

    -2-1

    01

    2

    -2

    -1

    0

    1

    20

    2

    4

    6

    8

    6.3. Funciones de tres variables.

    Como en el caso bidimensional, los puntos crticos son aquellos del dominio enlos 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 ins-truccin slice. Ser fcil intuir posibles extremos a la luz de la representacin porplanos paralelos a los coordenados que han sido coloreados segn la imagen de cadapunto. Por ejemplo.

    %EJEMPLO 6.5f=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

    -2 -10 1 2-2

    -1

    0

    1

    2-2

    -1

    0

    1

    2

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    Podemos intuir que habr un mnimo en (0, 0, 0), que valdr aproximada-mente 1. Efectivamente,

    %EJEMPLO 6.6corners=[-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

  • -20

    2-2

    02

    -2

    0

    2

    z

    c=1.75

    xy -2

    0

    2

    -2

    0

    2-2

    0

    2

    z

    c=1.45

    y x

    -20

    2

    -20

    2-2

    0

    2

    z

    c=1.2

    y x -20

    2

    -20

    2-2

    0

    2z

    c=1.000000000000000000001

    xy

    Cada vez nos acercamos ms al valor del mnimo, por lo tanto, el par deplanos que representan la superficie de nivel para un valor de c cualquiera, vanestando ms prximos. En el valor lmite, los planos sern coincidentes.

    46

  • 47