Ejercicios del Tema 5

Anuncio
Ejercicios del Tema 5
En este documento encontrará cómo se puede emplear el programa Maxima para
resolver o apoyar algunos pasos de la resolución de varios de los ejercicios del
tema. Debe tener en cuenta que:
• En esencia se utilizan los comandos que aparecen en la bibliografı́a básica
de la asignatura. Pero aparecen algunos más que pueden resultarle interesantes para resolver ejercicios y apoyar sus cálculos actuales y futuros.
• En muchas ocasiones existe más de una forma de llegar al mismo resultado,
es decir, se pueden utilizar distintos comandos o los comandos en orden
diferente.
• Le animamos a experimentar con el programa. Tiene los comandos escritos
y solamente debe ejecutarlos para comprobar la salida. Pero ¿qué ocurre
si cambia los datos? ¿Obtiene lo que esperaba?
• La forma ideal de trabajar con este documento es.
– Primero leer el enunciado del ejercicio y tratar de resolverlo sin ayuda
de Maxima.
– Si encontramos dificultades en las que creemos que Maxima nos puede
ayudar o queremos verificar el resultado, intentar utilizar el programa
para realizar esas tareas.
– Finalmente recurrir a la información de este documento para comprobar la solución y ver qué sugerencias de resolución o apoyo aparecen.
1
Ejercicio 193
El producto escalar entre dos vectores se realiza en Maxima con un ”.” Es importante dejar espacios antes y después del punto para distingirlo del punto
decimal. En las siguientes instrucciones de Maxima, primero definimos los vectores y después calculamos su producto escalar.
-->
v1:[0,1,2];
v2:[-3,-4,2];
v1 . v2;
(%o1) [0, 1, 2]
(%o2) [−3, −4, 2]
(%o3) 0
Como el resultado es cero los vectores resultan ser ortogonales.
1
2
Ejercicios 194 y 196
Definimos los vectores u y v.
-->
u:[-1,1];
v:[2,3];
(%o4) [−1, 1]
(%o5) [2, 3]
Calculamos sus normas (recordemos que la norma de un vector es la raı́z cuadrada
del producto escalar del vector por sı́ mismo), su suma y la norma de su suma.
-->
normu:sqrt(u . u);
normv:sqrt(v . v);
u+v;
sqrt(% . %);
√
(%o6)
2
√
(%o7)
13
(%o8) [1, 4]
√
(%o9)
17
Calculamos el vector 3u y su norma.
-->
3*u;
sqrt(% . %);
(%o10) [−3, 3]
√
(%o11) 3 2
Calculamos el coseno del ángulo que forman u y v.
-->
(u . v)/(normu*normv);
1
(%o12) √ √
2 13
El ángulo formado por los vectores se consigue aplicando la función arco coseno
al valor anterior.
-->
acos(%);
1
(%o13) acos √ √
2 13
Si deseamos conocer el valor numérico aproximado utilizamos el comando ”float”.
2
-->
float(%);
(%o14) 1.373400766945016
Para expresar u en coordenadas polares utilizamos las ecuaciones que relacionan
estas coordenadas con las coordenadas cartesianas. Las componentes del vector
u se denotan por u[1] y u[2] en Maxima.
-->
rho=sqrt(u . u);
solve(tan(theta)=u[2]/u[1],theta);
√
(%o15) ρ = 2solve : usingarc−trigf unctionstogetasolution.Somesolutionswillbelost.
π
(%o16) [θ = − ]
4
Maxima nos avisa de que ha utilizado la función arco tangente para resolver
la ecuación y que es posible que se hayan perdido soluciones. En este caso
efectivamente se ha perdido la solución que nos interesa. El vector u está en el
segundo cuadrante y el valor buscado es el que da Maxima más 2pi.
3
Ejercicio 197
Utilizamos las ecuaciones que relacionan coordenadas cilı́ndicas y cartesianas.
-->
kill(all);
u:[1,1,1];
rho=sqrt([u[1],u[2]] . [u[1],u[2]]);
solve(tan(theta)=u[2]/u[1],theta);
z=u[3];
(%o0) done
(%o1) [1, 1, 1]
√
(%o2) ρ = 2solve : usingarc−trigf unctionstogetasolution.Somesolutionswillbelost.
π
(%o3) [θ = ]
4
(%o4) z = 1
En este caso, puesto que el vector (1,1) está en el primer cuadrante, la solución
que nos propone Maxima para theta es la que buscábamos.
4
Ejercicio 198
Nuestro primer objetivo es calcular las coordenadas cilı́ndricas del vector (1,2,1). Limpiamos la memoria del programa e introducimos el vector.
3
-->
kill(all);
u:[1,2,-1];
(%o0) done
(%o1) [1, 2, −1]
Ahora reutilizamos el código del ejercicio anterior para calcular las coordenadas
cilı́ndricas.
-->
rho=sqrt([u[1],u[2]] . [u[1],u[2]]);
solve(tan(theta)=u[2]/u[1],theta);
z=u[3];
√
(%o2) ρ = 5solve : usingarc−trigf unctionstogetasolution.Somesolutionswillbelost.
(%o3) [θ = atan (2)]
(%o4) z = −1
Las coordenadas buscadas son las que aparecen porque el vector (1,2) pertenece
al primer cuadrante. Podemos aproximar numéricamente el valor de theta.
-->
theta=atan(2.0);
(%o5) θ = 1.10714871779409
Pasemos ahora a las coordenadas esféricas. Resolviendo con el comando ”solve”
las ecuaciones que relacionan las coordenadas esféricas con las cartesianas.
-->
rho=sqrt(u . u);
solve(tan(theta)=u[2]/u[1],theta);
solve(sin(phi)=u[3]/sqrt(u . u));
√
(%o6) ρ = 6solve : usingarc−trigf unctionstogetasolution.Somesolutionswillbelost.
(%o7) [θ = atan (2)]solve : usingarc−trigf unctionstogetasolution.Somesolutionswillbelost.
1
(%o8) [φ = −asin √ ]
6
5
Ejercicios 204 y 205
Maxima tiene un comando para representar las curvas de nivel de una función.
Se llama ”contour plot” y lo utilizamos a continuación.
-->
wxcontour_plot(x^2-y^2/3+8, [x, -4, 4], [y, -4, 4])$
4
(%t9)
-->
wxcontour_plot(x^2-y, [x, -4, 4], [y, -5, 5])$
(%t10)
6
Ejercicio 206
Maxima no calcula lı́mites de funciones de varias variables. Pero podemos calcular con Maxima los lı́mites reiterados porque se definen a partir de lı́mites de
una variable.
-->
kill(all);
f(x,y):=(x^2+y^3)/(x^2+y^2);
(%o0) done
(%o1) f (x, y) :=
x2 + y 3
x2 + y 2
Definimos los lı́mites reiterados anidando dos sentencias ”limit”, es decir poniendo
una dentro de la otra, del modo siguiente.
5
-->
limit(limit(f(x,y),x,0),y,0);
limit(limit(f(x,y),y,0),x,0);
(%o2) 0
(%o3) 1
Como los valores no coinciden el lı́mite no existe. Como complemento mostramos
la gráfica de la función y sus curvas de nivel.
-->
wxplot3d(f(x,y),[x,-2,2],[y,-2,2]);
wxcontour_plot(f(x,y),[x,-2,2],[y,-2,2]);
(%t4)
(%o4)
(%t5)
(%o5)
Fı́ese en cómo, debido a la no existencia de lı́mite, algunas curvas de nivel
pueden tender al mismo punto en (0,0).
6
7
Ejercicio 209
-->
kill(all);
f(x,y):=(x^2+y^2)*sin(1/(x^2+y^2));
(%o0) done
2
(%o1) f (x, y) := x + y
2
sin
1
2
x + y2
En este ejercicio se realiza un cambio a coordenadas polares y no se estudian
los lı́mites laterales. Calcularemos esos lı́mites aquı́.
-->
limit(limit(f(x,y),x,0),y,0);
limit(limit(f(x,y),y,0),x,0);
(%o2) 0
(%o3) 0
Observamos que el valor coincide y no obtenemos información sobre la continuidad de f en (0,0). Para calcular el lı́mite en coordenadas polares en Maxima
hacemos:
-->
limit(f(rho*cos(theta),rho*sin(theta)),rho,0);
(%o4) 0
Como complemento representamos la función y sus curvas de nivel. Hemos
utilizado la opción grid para aumentar la definición de las gráficas.
-->
wxplot3d(f(x,y),[x,-1,1],[y,-1,1],[grid, 90, 90]);
wxcontour_plot(f(x,y),[x,-1,1],[y,-1,1],[grid, 90, 90]);
(%t5)
(%o5)
7
(%t6)
(%o6)
8
Ejercicio 210
Utilizaremos este ejercicio para mostrar cómo podemos utilizar Maxima para
calcular lı́mites al tender a un punto siguiendo una determinada curva.
Queremos estudiar la continuidad en el origen de la función que para x distinto
de 0 toma el valor y^2/x y en otro caso es 0. En primer lugar nos acercamos
utilizando alguna recta del haz y=m*x.
-->
limit((m*x)^2/x,x,0);
(%o7) 0
Observamos que no depende de m. A continuación tendemos a (0,0) utilizando
alguna parábola de ecuación y=k*x^2.
-->
limit((k*x)^2/x,x,0);
(%o8) 0
Tampoco depende de k. Y no podemos afirmar nada sobre la continuidad.
Probamos con parábolas de ecuación x=l*y^2.
-->
limit(y^2/(l*y^2),y,0);
1
l
Resulta que el lı́mite depende de la parábola que utilizamos para aproximarnos
al origen y la función no es continua.
(%o9)
8
9
Ejercicio 213
En primer lugar definimos la función poniendo un apóstrofe delante del comando
”integrate” para indicar a Maxima que no deseamos que calcule la integral.
-->
kill(all);
f(x,y):=x*’integrate(s*exp(s),s,0,y);
(%o0) done
Z
(%o1) f (x, y) := x
y
s exp (s) ds
0
Calculamos el gradiente. Recuerde que es el vector formado por las derivadas
parciales.
-->
gradf=[diff(f(x,y),x),diff(f(x,y),y)];
Z y
(%o2) gradf = [
s es ds, x y ey ]
0
Veamos que si retiramos el apóstrofe llegamos al mismo resultado, pero con la
integral calculada.
-->
f(x,y):=x*integrate(s*exp(s),s,0,y);
gradf=[diff(f(x,y),x),diff(f(x,y),y)];
Z y
(%o3) f (x, y) := x
s exp (s) dsIsypositive, negative, orzero?p;
0
(%o4) gradf = [(y − 1) ey + 1, x ((y − 1) ey + ey )]
Al ejecutar el comando Maxima nos pregunta el signo de y. Para indicárselo
escribimos la inicial p y después pulsamos mayúsculas + enter.
10
Ejercicio 214 y 216
En primer lugar definimos la función y calculamos las derivadas parciales.
-->
kill(all);
f(x,y):=y*tan(exp(x))+(cos(x+y))^2;
g(x,y):=log(x*y);
(%o0) done
2
(%o1) f (x, y) := y tan (exp (x)) + cos (x + y)
(%o2) g (x, y) := log (x y)
9
Ahora calculamos la expresión del gradiente en un punto arbitrario.
-->
gradf:[diff(f(x,y),x),diff(f(x,y),y)];
gradg:[diff(g(x,y),x),diff(g(x,y),y)];
2
(%o3) [ex sec (ex ) y−2 cos (y + x) sin (y + x) , tan (ex )−2 cos (y + x) sin (y + x)]
1 1
(%o4) [ , ]
x y
Por último, evaluamos esa expresión en el punto (0,0).
-->
at(gradf,[x=0,y=0]);
at(gradg,[x=2,y=3]);
(%o5) [0, tan (1)]
1 1
(%o6) [ , ]
2 3
Otra opción para calcular el gradiente es utilizar el paquete linearalgebra que
contiene el comando jacobian.
-->
load(linearalgebra);
jacobian([f(x,y)],[x,y]);
at(%,[x=0,y=0]);
jacobian([g(x,y)],[x,y]);
at(%,[x=2,y=3]);
(%o7) C : /P ROGRA 2/M AXIM A 1.0/share/maxima/5.27.0/share/linearalgebra/linearalgebra.mac
(%o8) ex sec (ex )2 y − 2 cos (y + x) sin (y + x) tan (ex ) − 2 cos (y + x) sin (y + x)
(%o9) 0 tan (1)
(%o10) x1 y1
(%o11) 12 13
11
Ejercicio 217
Comenzamos limpiando la memoria y definiendo la función.
-->
kill(all);
f(x,y,z):=x^2+y^3+z^2-2*z;
(%o0) done
(%o1) f (x, y, z) := x2 + y 3 + z 2 + (−2) z
10
Calculamos el gradiente.
-->
gradf:[diff(f(x,y,z),x),diff(f(x,y,z),y),diff(f(x,y,z),z)];
(%o2) [2 x, 3 y 2 , 2 z − 2]
Resolvemos el sistema que resulta de igualar a cero cada una de las componentes
del gradiente.
-->
solve([gradf[1]=0,gradf[2]=0,gradf[3]=0]);
(%o3) [[z = 1, y = 0, x = 0]]
Por lo tanto el punto en el que se anula el gradiente es (0,0,1).
12
Ejercicio 218 y 219
Definimos la función utilizando el comando ”if”.
-->
kill(all);
f(x,y):=if ([x,y]=[0,0]) then (0) else (x*y)^2/(x^2+y^2);
(%o0) done
2
(%o1) f (x, y) := if[x, y] = [0, 0]then0else
(x y)
x2 + y 2
A continuación calculamos las derivadas parciales.
-->
dfdx:diff(f(x,y),x);
dfdy:diff(f(x,y),y);
(%o2)
2 x y2
2 x3 y 2
−
2
2
2
y +x
(y 2 + x2 )
(%o3)
2 x2 y
2 x2 y 3
−
2
2
2
y +x
(y 2 + x2 )
Para comprobar que las expresiones dadas por Maxima son las mismas que
aparecen en el libro podemos utilizar el comando factor.
-->
(%o4)
(%o5)
factor(dfdx);
factor(dfdy);
2 x y4
2
(y 2 + x2 )
2 x4 y
2
(y 2 + x2 )
11
Las expresiones que obtenemos para las derivadas parciales no están definidas
en (0,0). Utilizamos la definición para calcularlas en ese punto.
-->
limit((f(0+h,0)-f(0,0))/h,h,0);
limit((f(0,0+h)-f(0,0))/h,h,0);
(%o6) 0
(%o7) 0
En el ejercicio 219 nos piden estudiar la continuidad de las derivadas parciales.
Para hacerlo realizamos primero un cambio a polares y después calculamos el
lı́mite haciendo tender rho a 0.
-->
at(dfdx,[x=rho*cos(theta),y=rho*sin(theta)]);
limit(%,rho,0);
3
2
(%o8)
2 ρ3 cos (θ) sin (θ)
2
2
ρ2 sin (θ) + ρ2 cos (θ)
−
2 ρ5 cos (θ) sin (θ)
2
2
2
ρ2 sin (θ) + ρ2 cos (θ)
2
(%o9) 0
Los cálculos anteriores son para la derivada parcial con respecto a x. Para el
caso de la derivada parcial con respecto a la variable y hacemos.
-->
at(dfdy,[x=rho*cos(theta),y=rho*sin(theta)]);
limit(%,rho,0);
2
2
(%o10)
2 ρ3 cos (θ) sin (θ)
2
2
ρ2 sin (θ) + ρ2 cos (θ)
−
2 ρ5 cos (θ) sin (θ)
2
3
2
ρ2 sin (θ) + ρ2 cos (θ)
2
(%o11) 0
13
Ejercicio 220
Limpiamos la memoria y definimos la función que queremos verificar que es
solución de la ecuación de ondas.
-->
kill(all);
u(x,t):=sin(x-t);
(%o0) done
(%o1) u (x, t) := sin (x − t)
Necesitamos calcular las derivadas parciales segundas con respecto a x y con respecto a t; y después comprobar que son iguales. Maxima calcula estas derivadas
de orden superior directamente con el comando ”diff”.
12
-->
diff(u(x,t),x,2);
diff(u(x,t),t,2);
(%o2)
− sin (x − t)
(%o3)
− sin (x − t)
14
Ejercicio 221
Maxima dispone de un comando especı́fico para calcular la matriz hessiana de
una función: ”hessian”.
-->
kill(all);
f(x,y,z):=cos(x)+y^2/2;
(%o0) done
y2
2
El comando hessian es similar a ”diff” o ”jacobian”. Primero aparece la función
y después las variables con respecto a las que se deriva.
(%o1) f (x, y, z) := cos (x) +
-->
(%o2)
hessian(f(x,y,z),[x,y,z]);


−cos (x) 0 0

0
1 0
0
0 0
Para evaluar la matriz ”hessiana” en un punto utilizamos el comando ”at” del
modo siguiente.
-->
(%o3)
15
at(%,[x=0,y=1,z=0]);


−1 0 0
 0 1 0
0 0 0
Ejercicio 223
Realizaremos con Maxima los cálculos de este ejercicio.
-->
kill(all);
load(linearalgebra);
(%o0) done
13
(%o1) C : /P ROGRA 2/M AXIM A 1.0/share/maxima/5.27.0/share/linearalgebra/linearalgebra.mac
-->
f(x,y):=x^2*y;
jacobian([f(x,y)],[x,y]);
at(%,[x=1,y=0]);
hessian(f(x,y),[x,y]);
at(%,[x=1,y=0]);
(%o2) f (x, y) := x2 y
(%o3) 2 x y x2
(%o4) 0 1
2y 2x
(%o5)
2x 0
0 2
(%o6)
2 0
16
Ejercicio 224
Comenzamos limpiado la memoria y definiendo la función.
-->
kill(all);
f(x,y):=if ([x,y]=[0,0]) then 0 else ((x^3*y-x*y^3)/(x^2+y^2));
(%o0) done
(%o1) f (x, y) := if[x, y] = [0, 0]then0else
x3 y − x y 3
x2 + y 2
Calculamos las derivadas parciales y asignamos a las expresiones obtenidas el
nombre dfdx y dfdy porque las volveremos a utilizar en el cálculo de las derivadas
parciales segundas en (0,0).
-->
dfdx:diff(f(x,y),x);
dfdy:diff(f(x,y),y);
2 x x3 y − x y 3
3 x2 y − y 3
(%o2)
−
2
y 2 + x2
(y 2 + x2 )
2 y x3 y − x y 3
x3 − 3 x y 2
(%o3)
−
2
2
2
y +x
(y 2 + x2 )
Las expresiones obtenidas no son válidas en (0,0). Utilizando la definición calculamos las derivadas parciales en (0,0).
14
-->
dfdx00:limit((f(0+h,0)-f(0,0))/h,h,0);
dfdy00:limit((f(0,0+h)-f(0,0))/h,h,0);
(%o4) 0
(%o5) 0
Con los datos obtenidos calculamos las derivadas segundas en (0,0) de la forma
siguiente.
-->
dfdxx00:limit((at(dfdx,[x=0+h,y=0])-dfdx00)/h,h,0);
dfdxy00:limit((at(dfdx,[x=0,y=0+h])-dfdx00)/h,h,0);
dfdyx00:limit((at(dfdy,[x=0+h,y=0])-dfdy00)/h,h,0);
dfdyy00:limit((at(dfdy,[x=0,y=0+h])-dfdy00)/h,h,0);
(%o6) 0
(%o7)
−1
(%o8) 1
(%o9) 0
17
Ejercicio 225
Vamos a comprobar que la derivada parcial segunda con respecto a x e y no
es continua en (0,0). Lo haremos comprobando que los lı́mites reiterados no
coinciden.
-->
kill(all);
f(x,y):=(x^3*y-x*y^3)/(x^2+y^2);
g(x,y):=diff(f(x,y),x,1,y,1);
limit(g(x,y), x, 0);
limit(g(x,y), y, 0);
(%o0) done
(%o1) f (x, y) :=
x3 y − x y 3
x2 + y 2
(%o2) g (x, y) := diff (f (x, y) , x, 1, y, 1)
(%o3)
−1
(%o4) 1
15
18
Ejercicio 226
Para calcular la derivada direccional en la dirección u debemos en primer lugar
calcular el vector unitario en la dirección u, es decir, u/norma(u).
-->
u:[sqrt(2),3,sqrt(5)];
norma_u:sqrt(u . u);
u_unit:u/norma_u;
√
√
(%o5) [ 2, 3, 5]
(%o6) 4
(%o7) [
√
1 3
5
,
,
]
3
22 4 4
Ahora debemos multiplicar escalarmente el vector obtenido por el gradiente en
el punto en el que queremos calcular la derivada direccional. Como en este caso
ese gradiente coincide con u tenemos que el valor de la derivada buscada es el
siguiente.
-->
u . u_unit;
(%o8) 4
19
Ejercicio 227
En primer lugar limpiamos la memoria y definimos la función f.
-->
kill(all);
f(x,y,z):=x*y-z;
(%o0) done
(%o1) f (x, y, z) := x y − z
Calculamos el vector unitario en la dirección y sentido de (0,1,1).
-->
u:[0,1,1];
norma_u:sqrt(u . u);
u_unit:u/norma_u;
(%o2) [0, 1, 1]
√
(%o3)
2
1
1
(%o4) [0, √ , √ ]
2
2
16
Ahora calculamos el lı́mite que define la derivada direccional.
-->
limit((f(1+h*u_unit[1],-1+h*u_unit[2],2+h*u_unit[3])-f(1,-1,2))/h,h,0);
(%o5) 0
Como complemento calculamos el lı́mite utilizando el gradiente.
-->
(%o6)
at(jacobian([f(x,y,z)],[x,y,z]),[x=1,y=-1,z=2]);
−1 1 −1
-->
% . u_unit;
(%o7) 0
20
Ejercicio 228
Limpiamos la memoria, definimos la función y calculamos su gradiente en el
punto (0,0).
-->
kill(all);
f(x,y):=x*cos(x+y);
at(jacobian([f(x,y)],[x,y]),[x=0,y=0]);
(%o0) done
(%o1) f (x, y) := x cos (x + y)
(%o2) 1 0
El coseno del ángulo formado por el gradiente que acabamos de calcular y el
vector (1,1) viene dado por la siguiente expresión.
-->
(% . [1,1])/(sqrt(% . %)*sqrt([1,1] . [1,1]));
1
(%o3) √
2
Utilizando la función arco coseno obtenemos el ángulo buscado.
-->
acos(%);
(%o4)
π
4
17
21
Ejercicio 229
La dirección de máximo crecimiento coincide con la dirección del gradiente.
Calculamos el gradiente en ese punto para después dividirlo por su norma y
obtener un vector unitario.
-->
kill(all);
f(x,y):=x^2*(x^2+y^2)^(-1);
at(jacobian([f(x,y)],[x,y]),[x=1,y=1]);
(%o0) done
(%o1) f (x, y) := x2 x2 + y 2
1
− 12
(%o2)
2
−1
Construimos el vector unitario.
-->
(%o3)
%*1/sqrt(% . %);
√1
√1
−
2
2
18
Descargar