PRÓLOGO - medicinaycomplejidad.org · Otro comando muy usado que sirve para hacer figuras es...

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

Transcript of PRÓLOGO - medicinaycomplejidad.org · Otro comando muy usado que sirve para hacer figuras es...

PRÓLOGO

MATLAB es un programa que nos permite desarrollar numerosas aplicacionesal cálculo, la representación y la programación. En este manual, inspirado en ellibro A MATLAB companion for Multivariable Calculus, de Jeffery M. Cooper,pretendemos complementar la asignatura de Cálculo Diferencial tratando la mayoríade los puntos del temario desde un punto de vista informático, 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

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 tresvariables: declaración, representación, funciones polares, superficies de funciones detres variables; resolución de ecuaciones: método de Newton, intersección de curvasy superficies y por último problemas de optimización.Además 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 código puede en-

contrarse en la página 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 cálculo multivariable y que anime a loscompañeros a ver el ordenador como una máquina capaz de ayudarnos en el trabajomatemá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 MorenoAlumnos de Matemáticas 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 euclídea .Podemos destacar los siguientes comandos para pintar vectores con punto de

aplicación común, es decir, si tenemos dos vectores v, w y el punto p0, utilizamos elcomando arrow y arrow3 (para dimensión 3)

%EJEMPLO 1.1%nos muestra gráficamente la resta (lo mismo pasaría 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 solución (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 también las funciones dot(v, w) o también v ∗w0 para hacer el productoescalar de dos vectores; y para el producto vectorial (en tres dimensiones) está lafunción 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 %declaración de variables simbólicasv=[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*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 sólo 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.)También podemos pintar los puntos de las rectas con plot3(x, y, z, 0 ∗ 0).Obsérvese 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 triángulo%en caso contrario une los vértices 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 función 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 estádibujado el vector normal.

%EJEMPLO 1.6%aquí dibujaremos un plano apoyándonos en la función 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 intersección de dos planos, siempre y cuando éstos se corten.

%EJEMPLO 1.7%dibujamos dos planos que al tener un punto en común%y los vectores normales a ambos son diferentes, se cortan%a lo largo de una rectap0=[1 3 6];%punto comúnN1=[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 intersección 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. Gráficos tridimensionales

Es usual cambiar el punto de vista en gráficos tridimensionales, en MATLAB sehace dando dos ángulos, (azimut y elevación). Para cambiar dicho punto de vista,por ejemplo a 40 grados de azimut y 50 de elevación, 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 botón izquierdo

y rotando la figura, la elevación y el azimut van apareciendo en la pantalla. Conrotate3doff se finaliza el comando.

7

2. CURVAS EN EL ESPACIO

2.1. Representación paramétrica de curvas.

MATLAB reconoce y permite representar curvas dadas en forma paramétrica,esto es, funciones sobre cada una de las componentes del vector salida por un pa-rámetro real t.

%EJEMPLO 2.1%División del intervalo [0,2*pi] en 1000 partes iguales y,%por expresión paramétrica y representación de la circunferencia unidad%centrada en el origen.t=linspace(0,2*pi,1000);x=cos(t);y=sin(t);plot(x,y)%También podemos declarar las funciones del parámetro%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 parámetro como una incógnita simbólicasyms tx=cos(t);y=sin(t);ezplot(x,y)%El comando ezplot viene con un argumento que es%el intervalo de definición del parámetro.%MATLAB toma por defecto t en [0,2*pi]

8

-1-0.5

00.5

1-1

-0.5

0

0.5

1

-101

También en el caso tridimensional podemos representar curvas paramétricas dela forma (x(t), y(t), z(t)) con t el parámetro real con el que venimos trabajando. Unejemplo clásico es la hélice circular.

%EJEMPLO 2.2%Se define el rango del parámetro. Se declaran%las variables en función del mismo y, por la%instrucción ’plot3’%dibuja la hélice 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 parámetro simbólicamente podemos%representar la hélice circular a través de la%instruccién ’ezplot3’syms tx=cos(t);y=sin(t);z=t/(2*pi);ezplot3(x,y,z,[0,4*pi])%Se explicita el dominio del parámetro, 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 paramétrica.

Nos planteamos ahora el problema de las tangencias a curvas paramétricas, ycómo 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 continuación:

%EJEMPLO 2.3%Declaramos la hélice circular como hemos visto%anteriormente y tras ello (por medio de ’hold on’%para sobreescribir en la misma imagen), toma un nuevo%parámetro ’s’ que divide el dominio, de forma que%calculamos los vectores tangentes a la hélice%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 dirección. Con la instrucción ’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 instrucción view cambia el punto de vista.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Dibujamos la hélice circular con un punto rojo recorriéndola%a una velocidad proporcional al módulo 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 1 1.5

0

0.5

1

1.5

2

2.5

También resulta representativo el estudio de algún caso en el que la derivada seanule.

%EJEMPLO 2.4%En este ejemplo vemos una curva paramétrica 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 comprensión de estos códigos 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 cálculo de la longitud de un segmento recto no plantea excesivas complicacio-nes. Basta con calcular el módulo 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 polígono.

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 también conocer la expresión de la longitud de una curva paramétrica

que aporta el cálculo integral:

Z b

a

kv(t)k dt =Z b

a

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 aproximación%por segmentos rectos.%Hallamos la longitud de la curva C(t)=[t^2,2*t,exp(t)]%1<=t<=2n=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 partición 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);

enddisp(’Este es el valor de la longitud de la curva’);sumdisp(’La hemos dividido en’);n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Otra forma de resolver el problema es empleando la fórmula%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 numéricas%de integrales entre los extremos de la variable indicados.%OBSERVACIÓN:Usar ’help quad8’ para considerar una

13

%diferencia de sintaxis según definamos la función%en línea o por un archivo *.m%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Por último podemos emplear un algoritmo simbólico.%Consideramos un límite de integración (el superior%en este caso), como una variable simbólica.%Empleamos la fórmula 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 código dos comandos nuevos:%int(S,a,b) calcula la integral de la expresión simbólica S%entre ’a’ y ’b’. pretty(S) da a la expresión simbólica S%un formato matemático mas inteligible.

2.4. Geometría de las curvas.

Estudiaremos en este apartado la definición de tres vectores característicos ala curva paramétrica en un punto donde exista diferencial, que surgen a partir delvector tangente a la curva en el punto en cuestión. 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 sumódulo)

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

métrica lo que es el cuadro de Frenet sobre cuatro valores del parámetro.

2.5. Rotaciones en el plano.

Las rotaciones en el plano euclídeo son una herramienta muy valiosa en geome-tría. Aplicándolas al estudio de curvas paramétricas, podemos usar MATLAB paracalcular la imagen de una de ellas por una rotación respecto a cualquier punto y concualquier argumento usando técnicas similares a las empleadas en álgebra.

Si tenemos un punto (x, y) del plano y queremos realizar una rotación de centroel origen y argumento 0 ≤ θ ≤ 2π, la matriz

R =

·cos θ − sin θsin θ cos θ

¸Es lo que se llama una matriz de rotación, 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 paramétrico:

q(s) = Rr(s) = [x(s) cos θ − y(s) sin θ, x(s) sin θ + y(s) cos θ]

Donde s es el parámetro que define la curva sobre el plano. De esta forma,podemos trabajar en MATLAB con estos conceptos:

% EJEMPLO 2.6%Rotamos una curva paramétrica 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 término.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 gráfico.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. Representación.

Hay dos formas de definir funciones en MATLAB.a) Programándola como un archivo ∗.m

%EJEMPLO 3.1.1function z=f(x,y)z=x.^2+y;

b) Introduciéndola directamente sobre la pantalla de ejecución.

%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 método también es sencillo programar funciones de mayor comple-jidad

%EJEMPLO 3.2% vamos a programar la función 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 rectángulo en el plano x, ycon a < x < b, c < y < dMATLAB divide el rectángulo en las partes indicadas mediante el comando

meshgrid.

17

%EJEMPLO 3.3.1%-1<=x<=2 ; 2<=y<=4 con separación 0.5x=-1:.5:2;y=2:.5:4;[X,Y]= meshgrid (x,y)X =

-1.0000 -0.5000 0 0.5000 1.0000 1.5000 2.0000-1.0000 -0.5000 0 0.5000 1.0000 1.5000 2.0000-1.0000 -0.5000 0 0.5000 1.0000 1.5000 2.0000-1.0000 -0.5000 0 0.5000 1.0000 1.5000 2.0000-1.0000 -0.5000 0 0.5000 1.0000 1.5000 2.0000

Y =2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.00002.5000 2.5000 2.5000 2.5000 2.5000 2.5000 2.50003.0000 3.0000 3.0000 3.0000 3.0000 3.0000 3.00003.5000 3.5000 3.5000 3.5000 3.5000 3.5000 3.50004.0000 4.0000 4.0000 4.0000 4.0000 4.0000 4.0000

%Tenemos el rectángulo dividido, ahora representamos la funciónf2=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.00010.0005 0.0005 0.0005 0.0005 0.0005 0.0005 0.00050.0081 0.0081 0.0081 0.0081 0.0081 0.0081 0.00810.2090 0.2090 0.2090 0.2090 0.2090 0.2090 0.20908.8861 8.8861 8.8861 8.8861 8.8861 8.8861 8.8861

%ahora el gráfico se hace con el comando SURFsurf(X,Y,Z)

18

-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 rectángulo para representar dichas funcionesprogramando una aplicación específica.

%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 rectángulo en subrrectángulosx=linspace(a,b,41);y=linspace(c,d,31);[X,Y]=meshgrid(x,y);%utilizamos el comando feval para evaluar la función en X,YZ=feval(f,X,Y);surf(X,Y,Z)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Un ejemplo de aplicación en la pantalla de ejecución sería%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. Representación de funciones polares

19

El único cambio significativo es que en la representación nos interesara un domi-nio circular en vez de rectangular.

%EJEMPLO 3.4%primero hacemos un rectángulo en r,tr=linspace(0,2,16);t=linspace(0,2*pi,16);[R,T]=meshgrid(r,t);%ahora "curvamos" el rectángulo en coordenadas x,yX=R.*cos(T);Y=R.*sin(T);Z=f(X,Y);surf(X,Y,Z)%tomamos una f genérica.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%En la pantalla de ejecuciónf=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 intersección entre la gráfica deuna función de dos variables y un plano de la forma z = c

20

%EJEMPLO 3.5%para representar unas líneas de contorno podemos utilizar el%comando contour(X,Y,f(X,Y)),a función definida. Usando la función%contour con otros argumentos, contour(X,Y,f(X,Y),n) nos da%las líneas 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. Técnicas gráficas para funciones simbólicas

MATLAB incluye una serie de comandos para la representación de funcionessimbólicas de dos variables, entre ellos destacan: ezsurf , ezmesh y ezcontour. Porejemplo:

21

%EJEMPLO 3.6%declaramos como variables simbólicas ’x’ e ’y’syms 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, sólo que para funciones demayor complejidad.

3.5. Derivadas parciales y direccionales.

Para medir la variación de una función, se considera la restricción 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 definición precisa de derivadas parciales es:

∂f

∂x(x0, y0) = lım

x→x0

f(x, y0)− f(x0, y0)

x− x0

22

∂f

∂y(x0, y0) = lım

y→y0

f(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 función

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 más general, tomamos en vez de v = [1, 0] y u = [0, 1] otro vectorw = [w1, w2]

23

para realizar una derivada direccional según la definición:

Duf(x0, y0) = lımh→0

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

h

La función mslice funciona con dos argumentos mslice(f, P ), donde f es unafunción definida en línea 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 dirección 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.5 1 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. Aproximación por un plano tangente

Es de gran utilidad aproximar por una expresión lineal (afín) 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 expresión

f(x, y) = f(x0, y0) + fx(x0, y0)(x− x0) + fy(x0, y0)(y − y0) +E

Donde E es una expresión 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 definición de p después 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

Sólo queda por explicar la función que se ha definido p.m y que nos da el planotangente a la curva por un punto dándole la función, las derivadas parciales y elpunto. La transcripción del código 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. Reconversión de escala

En algunas ocasiones para pequeñas surperficies en el pano xy , la imagen tomavalores extremos. Cuando esto ocurre la escala del gráfico hace que se pierda detallede cómo es en realidad la gráfica.Para solventarlo se pueden seccionar los valores dela función ganando precisión. 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 función tiene un máximo muy elevado en (0,0).%seccionamos la gráfica usando la función característica siguienteW=(Z-4<0).*(Z-4)+4;surf(X,Y,W);

-10

-5

0

5

10-8 -6 -4 -2 0 2 4 6 8

-1

0

1

2

3

4

3.9. El comando subplot

El comando subplot de MATLAB sirve para introducir en una misma ventanavarios gráficos distintos. El comando subplot funciona con tres argumentos: los dosprimeros indican la dimensión del array, y el tercero la posición particular de cadauno de los gráficos.

%EJEMPLO 3.11f=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=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))%obsérvese 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 PARAMÉTRICAS

4.1. Definición de funciones tridimensionales. Niveles.

Las funciones de tres variables f : R3 → R pueden definirse en MATLAB deforma análoga a como se han venido definiendo en el caso unidimensional y bidi-mensional. Así, por ejemplo, tenemos:

%EJEMPLO 4.1,%(a)definimos función de tres variables sobre la pantalla de ejecución.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 gráfico de una función de tres variables sería 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 representación gráfica de z = g(x, y) = x2 + y2 − cUn ejemplo particular interesante de trabajar es el de las cuádricas, superficies

de nivel de una función cuadrática 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 función%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 hiperbólico, superficie de nivel de una función%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 función%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 = ±

sµx2

a2+

y2

b2− d

¶(−c2)

%EJEMPLO 4.2.4%Un elipsoide es la superficie de nivel de una función%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 1 2-2

02

0

0.5

1

1.5

Muchas veces, sin embargo, será difícil o incluso imposible despejar una variableen función de las otras dos en una ecuación del tipo f(x, y, z) = c. El autor dellibro nos deja la función 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 sólido.

Supongamos una función f : R3 → R que asigna a cada punto del espaciouna característica numérica (por ejemplo temperatura, densidad, presión). Podemosdibujar planos paralelos a los coordenados que representarán mediante un índicede color el valor de la imagen. Esta representación es muy útil en casos donde nose pueda despejar una variable como anteriormente. Nos aportará una informacióncomparativa muy ilustrativa, y será también válida 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 función f : R3→ R . Por ejemplo,programamos para la función

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. RESOLUCIÓN DE ECUACIONES

Veremos cómo resolver sistemas no lineales de dos ecuaciones con dos incógnitas

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

5.1. Soluciones simbólicas

Explicaremos con un ejemplo el procedimiento a seguir para resolver la intersec-ción de dos curvas: ½

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

Nos apoyaremos en las gráficas 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 gráficas tienen una intersección 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 intersección

5.2. Soluciones de ecuaciones de una variable

Un algoritmo muy conocido para la resolución de ecuaciones es el método deNewton

xn+1 = xn − f(xn)/f0(xn)

Esta sucesión converge bien a la solución buscada cuando f0(xn) 6= 0 aunque

también es utilizada para encontrar las raíces f(x) = 0 con f0(x) = 0 (en este caso,

si converge, será lentamente). Vamos a escribir un programa para obtener las raícesde una función basándonos en éste algoritmo

%EJEMPLO 5.2valorinicial=input(’introduce el valor inicial’)N=input(’introduce el número 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 función deseada y df , su derivada, son dos funciones que se tienenque programar en MATLAB, devolviendo ambas un valor.

37

Si tenemos una situación en la que hay dos raíces y damos un valor más cercanoa una (sin que éste sea un máximo o un mínimo relativo), el método de Newtonconvergerá a la raíz, si por el contrario es un máximo (o mínimo), no convergeráEn MATLAB el comando fzero también sirve para encontrar raíces 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 raíces en el intervalo [-2 2]Zero found in the interval: [-2, 2].raiz =

-0.4483

5.3. Resolución de una ecuación de dos variables

Si no se puede resolver la ecuación planteada, podemos dar una aproximación.Si tenemos un punto (x0, y0) tal que f(x0, y0) = 0 y fy(x0, y0) 6= 0 por el teorema

de la función implícita sabemos que para los x cercanos a x0 la curva de nivelf(x, y) = 0 es la gráfica de una función y = g(x), ahora sí podemos encontrar losvalores de la y en función de los de las x .Hay que tener en cuenta que el comando fzero sólo se utiliza en funciones de una

variable ; si queremos que evalúe más de una variable lo que haremos será considerartodas las variables menos una como parámetros.Vamos a ver un ejemplo con la función:

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. OPTIMIZACIÓN.

6.1. Puntos críticos. Evaluación de la segunda derivada.

Un punto crítico de una función 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 puntocrítico puede ser extremo local de f o no.Para encontrar los puntos críticos de una función 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 críticos (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 evaluación de un punto crítico por la segundaderivada del cálculo 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á simétrica cuando f ∈ C2.Ahora, el resultado que determinará la naturaleza del punto crítico será:

40

Si det(H(x0, y0)) > 0 y fxx(x0, y0) > 0⇒ (x0, y0) es un mínimo local.

Si det(H(x0, y0)) > 0 y fxx(x0, y0) < 0⇒ (x0, y0) es un máximo 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 conclusión.

Como curiosidad notamos que en los puntos de ensilladura, al hacer inter-secciones con planos horizontales, se tiende hacia un comportamiento hiperbólico enel punto en cuestión.

-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 código MATLAB que lleva al resultado gráfico superior.

41

6.2. Estimación de máximos y mínimos.

MATLAB tiene algunas herramientas que nos ayudarán en el cálculo 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 mın f(x) funcionan dándonos los extremos que haobtenido evaluando en f los valores de x que le hemos especificado. En el índice nosdan la posición de la muestra en que se encuentra este valor de la variable, y porúltimo le pedimos que nos dé cuál 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 máximos de cada columna[maxf,j]=max(fila)%Hallamos el máximo del vector de máximosmaxf =

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 búsqueda de extremos en una funciónbidimensional.

%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 simbólicas por números.

43

subs(fxx,[x,y],[a,b])ans =

2%det(H(0,0))>0,fxx(0,0)>0 -------> f tiene un mínimo 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 críticos 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 función.

Para hacernos una idea, como se explicó anteriormente; podemos emplear la ins-trucción slice. Será fácil intuir posibles extremos a la luz de la representación porplanos paralelos a los coordenados que han sido coloreados según 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 -1 0 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 mínimo 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 más al valor del mínimo, por lo tanto, el par deplanos que representan la superficie de nivel para un valor de c cualquiera, vanestando más próximos. En el valor límite, los planos serán coincidentes.

46

47