You are on page 1of 39

DEPARTAMENTO DE

Matematica Aplicada
UNIVERSIDAD COMPLUTENSE DE MADRID
PR

ACTICAS.
C

ALCULO COMPUTACIONAL EN QU

IMICAS
Licenciatura de Ciencias Qumicas
Prof.: Rosa Pardo San Gil
David Usero
Departamento de Matematica Aplicada
C

ALCULO COMPUTACIONAL.
Licenciatura en Qumica (Curso 2008-09)
Matrices Practica 1
1. Introduccion
En esta practica vamos a profundizar un poco en las capacidades de Matlab para trabajar con matrices. Veremos
en primer lugar algunas operaciones y comandos basicos y no tan basicos que tiene el programa para trabajar con
matrices.
2. Matrices en Matlab
Para introducir una matriz en Matlab se procede de la forma siguiente. Si por ejemplo tenemos la matriz
A =
_
1 2 3 4
5 6 7 8
_
se introduce como:
>>A=[1 2 3 4; 5 6 7 8]
A =
1 2 3 4
5 6 7 8
O bien,
>>A=[1,2,3,4;5,6,7,8];
Observemos que unas matrices especiales son los vectores, de esta forma, el vector la v = (1.0, 1.1,1.2,1.3, . . . ,
1.9,2.0), se escribe en Matlab como
>>v=[1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0]
3. Operaciones y comandos para Matrices
Hemos visto como se introducen las matrices en Matlab. Veamos un ejemplo para introducir algunos de los
comandos basicos:
Ejemplo 1 Operaciones Elementales
Denimos dos matrices:
>>A=[2 1;3 2]
A =
2 1
3 2
>>B=[3 4;-1 5]
B =
3 4
-1 5
Para sumar las dos matrices:
>>A+B
ans =
5 5
2 7
Para multiplicar una matriz por un escalar:
>>3*A
ans =
6 3
9 6
Producto de matrices:
>>C=A*B
C =
5 13
7 22
Siempre que los tama nos de las matrices sean los adecuados. Para saber cual es el tama no de una matriz con
la que estamos trabajando,
>>size(A)
ans =
2 2
Que quiere decir, evidentemente, 2 las y 2 columnas.
Para calcular la matriz transpuesta:
>>A
ans =
2 3
1 2
Ejercicio 1 Utilizando las matrices denidas en el ejemplo anterior, comprobar que (AB)
t
= B
t
A
t
. (A
t
es la
transpuesta de A).
Ejemplo 2 Operaciones termino a termino: .* ./ .^
Matlab tiene tres operaciones, que las llamaremos operaciones con punto, que permiten
i) multiplicar matrices termino a termino: .*
ii) dividir matrices termino a termino: ./
ii) elevar los terminos de una matriz a una cierta potencia: .^
Si v es el vector denido en la Seccion 2, explorar que hace la orden
>>v.^2
Por otra parte, si A y B son las matrices denidas anteriormente, explorar que hacen las ordenes
>>A.*B
>>A./B
Estas operaciones con punto son esenciales en el calculo numerico y se utilizan para representar funciones
numericamente.
Ejemplo 3 Matrices especiales con Matlab
Para generar la matriz identidad cuadrada,
>>eye(3)
ans =
1 0 0
0 1 0
0 0 1
Por que habran elegido el nombre eye?
Una matriz 3 2 llena de unos,
>>ones(3,2)
Y si queremos que este llena de ceros,
>>zeros(3,2)
Para generar una matriz con n umeros aleatorios uniformemente distribuidos entre 0 y 1,
>>rand(3,2)
Si se usa el comando randn los n umeros aleatorios son normalmente distribuidos, siguiendo la Normal Estandar
N(0, 1).
Ejemplo 4 Rango, Inversa y Determinante
Denimos la matriz,
>>X=[2 3 4; 1 -1 0]
X =
2 3 4
1 -1 0
Para calcular su rango,
>>rank(X)
ans =
2
Supongamos que tenemos denida la siguiente matriz,
H =
8 1 6
3 5 7
4 9 2
Para calcular su inversa,
>>inv(H)
ans =
0.1472 -0.1444 0.0639
-0.0611 0.0222 0.1056
-0.0194 0.1889 -0.1028
Y si queremos ver el resultado en forma racional,
>>format rational
>>inv(H)
ans =
53/360 -13/90 23/360
-11/180 1/45 19/180
-7/360 17/90 -37/360
(Para ver todas las opciones del comando format hacer help format)
Para calcular el determinante de la matriz anterior H,
>>det(H)
ans =
-360
Ejercicio 2 Generar una matriz cualquiera, por ejemplo 2525, y calcular su inversa, su rango y su determinante.
(No imprimirla!) Que ocurre con el determinante de la matriz y el de su inversa?
Ejemplo 5 Los comandos especiales rref y rrefmovie
El comando rref produce la forma reducida escalonada por las de una matriz usando la eliminacion de
Gauss-Jordan, es decir, haciendo ceros por debajo y por encima de la diagonal principal sin mover las columnas.
Por ejemplo, denimos la matriz,
>>A=[-1 2 -1;2 1 2;2 4 2]
A =
-1 2 -1
2 1 2
2 4 2
Ahora escribimos el comando aplicado a la matriz,
>>R=rref(A)
R =
1 0 1
0 1 0
0 0 0
Ejercicio 3 a) Calcular el rango de la matriz siguiente utilizando el comando rref
A =
_
_
_
_
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
_
_
_
_
b) Si una matriz H es cuadrada y no singular, es decir det(H) ,= 0, cual sera la matriz R = rref(H)?
c) Como podemos utilizar estos comandos para calcular la inversa de una matriz invertible? Aplicarlo a la
matriz,
B =
_
_
8 1 6
3 5 7
4 9 2
_
_
Para vericar el resultado se puede calcular la inversa directamente con inv(B).
4. Matrices dispersas
Ejemplo 6 A veces usamos matrices con muchos ceros. MatLab tiene una forma de trabajar con ellas usando
menos bytes con el comando sparse. Veamoslo con un ejemplo:
Introducimos una matriz:
>>A=[0 0 0 3;0 0 -1 2;3 0 0 1;0 0 0 -2];
- Para convertirla a matriz dispersa
>>s=sparse(A)
Si preguntamos whos" vemos que s ocupa menos que A.
- Para recuperar la matriz inicial
>>full(s)
Se pueden generar directamente matrices sparse:
>>sparse(i,j,s,m,n)
donde: i,j son los subndices de los elementos no nulos (i,j son vectores)
s es un vector con los valores de los elementos no nulos
(m,n) es el tama no de la matriz.
De modo que, en el ejemplo anterior, para generar s deberamos escribir:
>>i=[1 2 2 3 3 4];
>>j=[4 3 4 1 4 4];
>>s=[3 -1 2 3 1 -2];
>>m=4;n=4;
>>sparse(i,j,s,m,n)#
Y obtenemos s. Para obtener la matriz inicial >>full(s)
Ejercicio 4 Utilizando el comando sparse, generar la matriz 20 20
_
_
_
_
_
_
_
_
_
0 1 0 0 . . . 0 0
1 0 1 0 . . . 0 0
0 1 0 1 . . . 0 0
.
.
.
.
.
.
.
.
.
0 0 0 0 . . . 0 1
0 0 0 0 . . . 1 0
_
_
_
_
_
_
_
_
_
(Visualizarla para comprobar que esta bien.)
Departamento de Matematica Aplicada
C

ALCULO COMPUTACIONAL.
Licenciatura en Qumica (Curso 2008-09)
Sistemas de ecuaciones lineales Practica 2
En esta practica vamos a ver como se pueden resolver sistemas de ecuaciones lineales utilizando Matlab.
1. Sistemas de ecuaciones lineales
Un sistema de ecuaciones lineales,
_

_
a
11
x
1
+a
12
x
2
+. . . +a
1n
x
n
= b
1
a
21
x
1
+a
22
x
2
+. . . +a
2n
x
n
= b
2
.
.
.
a
m1
x
1
+a
m2
x
2
+. . . +a
mn
x
n
= b
m
con m ecuaciones y n incognitas se puede escribir en forma matricial,
Ax = b
donde,
A =
_
_
_
_
_
a
11
a
12
. . . a
1n
a
21
a
22
. . . a
2n
.
.
.
a
m1
a
m2
. . . a
mn
_
_
_
_
_
; x =
_
_
_
_
_
x
1
x
2
.
.
.
x
n
_
_
_
_
_
y b =
_
_
_
_
_
b
1
b
2
.
.
.
b
m
_
_
_
_
_
Vamos a ver mediante algunos ejemplos y ejercicios como se pueden resolver los sistemas de ecuaciones lineales
utilizando algunos de los comandos de Matlab descritos anteriormente.
Ejemplo 1 Consideremos el sistema,
_

_
2x y +z = 3
x +y = 3
y 3z = 7
entonces, siguiendo la notacion anterior,
A =
_
_
2 1 1
1 1 0
0 1 3
_
_
, x =
_
_
x
y
z
_
_
y b =
_
_
3
3
7
_
_
Como se trata de un sistema con solucion unica, ya que el determinante de A es distinto de cero,
>>det(A)
ans =
-8
Una forma de resolver el sistema es escribir la matriz orlada (o ampliada)
>>Ab=[A b]
y hacer rref(Ab) con lo que obtenemos
_
_
1 0 0 1
0 1 0 2
0 0 1 3
_
_
es decir, la solucion es x = 1, y = 2, z = 3.
Otra forma de resolver el sistema consiste en despejar x,
x = A
1
b,
sin mas que escribir
>>x=inv(A)*b
x =
1
2
3
Hay otra forma de hacerlo, utilizando lo que en Matlab se denomina como division matricial a la izquierda:
>>x=A\b
x =
1
2
3
En este caso, el resultado es el mismo, pero es diferente la forma en la que trabaja el ordenador. En este segundo
caso el metodo que utiliza es el de la factorizacion LU, que es una modicacion de la eliminacion gaussiana.
Vamos a ver como resuelve Matlab, internamente, el sistema cuando se utiliza la opci on: >>x=A\b. El proceso
se puede dividir en tres etapas:
1) Calcula una matriz triangular inferior L, una matriz triangular superior U y una matriz de permutaci on P
tales que PA = LU. P es simplemente la matriz identidad I con sus las cambiadas de orden.
2) Resuelve Ly = Pb.
3) Por ultimo, se resuelve Ux = y.
La primera etapa es lo que se conoce con el nombre de factorizacion LU y es el paso mas importante.
Por lo tanto, en Matlab sera equivalente utilizar:
>>x=A\b
que utilizar el siguiente proceso:
>>[L,U,P]=lu(A); % Este es el comando que calcula las matrices L, U, P
>>B=P*b;
>>y=L\B;
>>x=U\y
Ejercicio 1 Resolver el siguiente sistema utilizando los tres procedimientos anteriormente descritos y comprobar
que se obtiene la misma solucion.
_
_
_
_
1 1 0 3
2 1 1 1
3 1 1 2
1 2 3 1
_
_
_
_
_
_
_
_
x
1
x
2
x
3
x
4
_
_
_
_
=
_
_
_
_
4
1
3
4
_
_
_
_
Ejercicio 2 El metodo >>x=A\b funciona si hay distinto n umero de ecuaciones que incognitas utilizando el metodo
de los mnimos cuadrados.
Sea A una matriz mn, el metodo busca x que minimiza
f(x) = |Ax b|
2
=

i
((Ax)
i
b
i
)
2
=

i
_
_
_
_
_

j
a
ij
x
j
_
_
2
2b
i

j
a
ij
x
j
+b
2
i
_
_
_,
para ello calculamos sus derivadas parciales
f
x
k
= 2

i
_
_

j
a
ij
x
j
_
_
a
ik
2

i
b
i
a
ik
, k = 1, , n
y
f
x
k
= 0, k = 1, , n si y solo si

ij
a
ij
a
ik
x
j
=

i
b
i
a
ik
, k = 1, , n
es decir >>x=A\b resuelve el sistema lineal A
T
Ax = A
T
b, que ahora tiene el mismo n umero de ecuaciones n que
de incognitas n y minimiza la distancia |Ax b|.
Cuando el rango de A es k < n, o hay menos ecuaciones que incognitas, m < n, tenemos un sistema con
innitas soluciones (o ninguna), Matlab nos da una solucion que tiene ceros para algunas de las incognitas, al
menos n k.
Aplicando lo anterior encontrar las soluciones de los sistemas
a)
_

_
x +y = 1
x y = 1
2x +y = 2
b)
_
x +y +z = 3
x y +z = 2
Ejercicio 3 Con otro comando, >>x=pinv(A)*b se obtiene una solucion del sistema por el metodo de los mnimos
cuadrados tal que la norma eucldea de x es la mas peque na de todas las posibles. Es siempre unica esta solucion
con longitud mnima? Investigar que hace el comando >>pinv(A) para los ejemplos anteriores
Ejercicio 4 Si resolvemos el siguiente sistema con Matlab
_

_
x +y = 1
2x + 2y = 2
3x + 3y = 3
_
x + 2y + 3z = 1
x + 2y + 3z = 5
1. Utiliza los metodos A\b y pinv(A)*b para resolver los sistemas
2. Resuelve el sistema A
T
Ax = A
T
b con los dos metodos anteriores
3. Utiliza el comando rref para resolver los dos sistemas anteriores
4. Que hemos obtenido con los comandos A\b y pinv(A)*b?
Ejercicio 5 Estudiar el sistema
_

_
x +y +z = 1
x y z = 2
3x + 3y + 3z = 1
x y +z = 1
Que obtenemos con los comandos A\b y pinv(A)*b? Es correcto?
Que responde Matlab al comando rref([A,b])?
Y a los comandos x=inv(A)*b, lu(A)?
Que conclusion sacas de esto?
Ejercicio 6 Crear las matrices A=rand(200) y b=rand(200,1). Vamos a resolver el sistema Ax = b con MatLab
de varias formas, y vamos a contar el tiempo de CPU que se utiliza para resolver el sistema utilizando cuatro
metodos. Para ello vamos a utilizar el comando cputime. Primero poner el contador a cero. Segundo resolver el
sistema de una de las formas y tercero contar el tiempo, escribiendo
>>t=cputime; rref([A b]); trref=cputime-t
y repetir la operacion resolviendolo de otra forma.
>>t=cputime; metodo; tmet=cputime-t
En cual de los tres casos se utilizan menos tiempo de cpu?
i) >>t=cputime; x=rref([A b]); trref=cputime-t
ii) >>t=cputime; x=pinv(A)*b; tpinv=cputime-t
iii) >>t=cputime; x=inv(A)*b; tinv=cputime-t
iv) >>t=cputime; x=A\b; t=cputime-t
Comprobar que
t<tinv<tpinv<trref
Nota: De aqu se concluye que, en general, para resolver sistemas, resulta mas conveniente utilizar la division
matricial a la izquierda, x=A\b. No resulta conveniente utilizar la pseudoinversa salvo que realmente estemos bus-
cando la solucion de norma mnima.
2. Sistemas homogeneos y su aplicacion al ajuste de reacciones qumi-
cas
Un sistema de ecuaciones lineales
_

_
a
11
x
1
+a
12
x
2
+. . . +a
1n
x
n
= b
1
a
21
x
1
+a
22
x
2
+. . . +a
2n
x
n
= b
2
.
.
.
a
m1
x
1
+a
m2
x
2
+. . . +a
mn
x
n
= b
m
con m ecuaciones y n incognitas se llama homogeneo, si todas las constantes b
1
, b
2
,...,b
m
son cero. Es decir, el
sistema general homogeneo esta dado por
_

_
a
11
x
1
+a
12
x
2
+. . . +a
1n
x
n
= 0
a
21
x
1
+a
22
x
2
+. . . +a
2n
x
n
= 0
.
.
.
a
m1
x
1
+a
m2
x
2
+. . . +a
mn
x
n
= 0
En un sistema homogeneo, siempre existe la solucion trivial (o solucion cero):
x
1
= x
2
= ... = x
n
= 0
Por tanto, en un sistema homogeneo caben dos posibilidades:
- o bien solo existe la solucion trivial;
- o bien existe un n umero innito de soluciones, ademas de la trivial, llamadas soluciones no triviales.
Ejemplo 2 Un sistema homogeneo que tiene solo la solucion trivial:
_

_
3x
1
+ 4x
2
+ 6x
3
= 0
4x
1
+ 5x
2
+ 6x
3
= 0
3x
1
+x
2
2x
3
= 0
Si escribimos la matriz ampliada
_
_
3 4 6 0
4 5 6 0
3 1 2 0
_
_
,
y aplicamos el comando rref, obtendremos
_
_
1 0 0 0
0 1 0 0
0 0 1 0
_
_
,
lo que quiere decir que la unica solucion es la trivial,
x
1
= x
2
= x
3
= 0.
Ejemplo 3 Un sistema homogeneo con un n umero innito de soluciones:
_

_
x
1
+ 2x
2
x
3
= 0
3x
1
3x
2
+ 2x
3
= 0
x
1
11x
2
+ 6x
3
= 0
Haciendo lo mismo que en el ejemplo anterior (y poniendo el resultado en formato racional, format rational,)
obtenemos
_
_
_
_
_
_
_
_
1 0
1
9
0
0 1
5
9
0
0 0 0 0
_
_
_
_
_
_
_
_
,
lo que quiere decir que, son soluciones todas las ternas de n umeros reales de la forma
_
1
9
x
3
,
5
9
x
3
, x
3
_
,
para cualquier valor de x
3
. En particular, para x
3
= 0, obtenemos la solucion trivial; para x
3
= 1, obtenemos la
solucion
_
1
9
,
5
9
, 1
_
,
para x
3
= 9, la solucion
(, 5, 9).
Ejemplo 4 Un sistema homogeneo con mas incognitas que ecuaciones tiene un n umero innito de soluciones:
Resolvemos el sistema:
_
x
1
+x
2
x
3
= 0
4x
1
2x
2
+ 7x
3
= 0
como en los ejemplos anteriores, escribiendo la matriz ampliada y haciendo rref, para obtener
_
_
_
_
1 0
5
6
0
0 1
11
6
0
_
_
_
_
,
lo cual quiere decir que son soluciones todas las ternas de n umeros reales de la forma
_
5
6
x
3
,
11
6
x
3
, x
3
_
, x
3
IR
Observacion: Si en estos tres ejemplos hubieramos escrito la matriz sin ampliar y hubieramos hecho rref,
habramos visto las soluciones mas rapidamente:
En el primer ejemplo, puesto que el determinante de la matriz del sistema no era nulo, el resultado era la matriz
identidad (solucion unica.) En el segundo caso, aparece una la de ceros. Y en el tercer caso, que sucede?: lo que
sucede siempre que hay un sistema homogeneo con mas incognitas que ecuaciones, que tiene un n umero innito de
soluciones.
Ejercicio 7 Resolver el sistema homogeneo
_

_
x
1
2x
2
+x
3
+x
4
= 0
3x
1
+ 2x
3
2x
4
= 0
4x
2
x
3
x
4
= 0
5x
1
+ 3x
3
x
4
= 0
Ejercicio 8 Resolver el sistema
_

_
25x
1
16x
2
+ 13x
3
+ 33x
4
57x
5
= 0
16x
1
+ 3x
2
+x
3
12x
5
= 0
8x
2
+ 16x
4
26x
5
= 0
Este estudio de los sistemas homogeneos se puede aplicar al ajuste de reacciones qumicas:
Ejemplo 5 Para ajustar la reaccion
Fe
2
O
3
(s) +C(s) Fe(l) +CO(g)
que se produce cuando calentamos mineral de oxido de hierro con un exceso de carbono para obtener hierro puro,
procedemos de la siguiente manera:
Fe : 2x
1
= x
3
O : 3x
1
= x
4
C : x
2
= x
4
Es decir, se trata de resolver el siguiente sistema homogeneo de 3 ecuaciones con 4 incognitas (que, como
acabamos de ver, siempre tiene solucion no trivial):
_

_
2x
1
x
3
= 0
3x
1
x
4
= 0
x
2
x
4
= 0
(1)
O lo que es lo mismo, si consideramos x
4
como un parametro (x
4
= ) tratamos de resolver el siguiente sistema
de 3 ecuaciones con 3 incognitas
_

_
2x
1
x
3
= 0
3x
1
=
x
2
=
obteniendo la solucion
x
4
= , x
2
= , x
1
=

3
, x
3
= 2

3
De modo, que podemos decir que el sistema tiene las innitas soluciones:
x
1
=

3
, x
2
= , x
3
= 2

3
, x
4
=
para cualquier valor de IR.
En nuestro caso, solo nos interesa la solucion de n umeros enteros positivos x
1
, x
2
, x
3
, x
4
que no tengan divisor
com un diferente de 1, es decir, para = 3:
x
1
= 1, x
2
= 3, x
3
= 2, x
4
= 3,
de modo que la reaccion ajustada es
Fe
2
O
3
+ 3C 2Fe + 3CO
Ejercicio 9 Ajustar las siguientes reacciones qumicas:
1. CO
2
+H
2
O C
6
H
12
O
6
+O
2
2. AgNO
3
+K
2
CrO
4
Ag
2
CrO
4
+KNO
3
3. Mg +HCl MgCl
2
+H
2
Ejercicio 10 Ajustar la siguiente reaccion qumica en la que el permanganato de cromo oxidara violentamente a
la azida de plomo:
Pb(N
3
)
2
+Cr(MnO
4
)
2
Cr
2
O
3
+MnO
2
+Pb
3
O
4
+NO
Ejercicio 11 Ajustar la siguiente serie de reacciones qumicas que se utilizan para producir clorato de sodio:
1. KMnO
4
+HCl KCl +MnCl
2
+H
2
O +Cl
2
2. Cl
2
+Ca(OH)
2
Ca(ClO
3
)
2
+CaCl
2
+H
2
O
3. Ca(ClO
3
)
2
+Na
2
SO
4
CaSO
4
+NaClO
3
Departamento de Matematica Aplicada
C

ALCULO COMPUTACIONAL.
Licenciatura en Qumica (Curso 2008-09)
Polinomios. Practica 3
1. Introduccion
Matlab maneja los polinomios como vectores cuyas componentes son los coecientes del polinomio. Para intro-
ducir un polinomio
P(x) = x
3
2x
2
+ 1,
escribimos
>>p=[1 -2 0 1]
Para visualizarlo con la variable independiente:
>>poly2sym(p,x)
Para evaluarlo en un punto:
>>polyval(p,4)
Tambien es posible evaluar el polinomio en una matriz:
>>A=[4 4;1 0];
>>polyval(p,A)
>>polyvalm(p,A)
Ejercicio 1 Hemos visto que un polinomio puede evaluarse en una matriz utilizando dos comandos: polyval y
polyvalm. Que hace exactamente cada uno de estos comandos? Se pueden aplicar a cualquier matriz sea o no
cuadrada? Por que?
2. Operaciones
Ejemplo 1 Sean los polinomios P(x) = 4x
5
8x
2
10x + 2 y Q(x) = x
2
x + 1
>>p=[4 0 0 -8 -10 2];q=[1 -1 1];
Para multiplicarlos:
>>m=conv(p,q),poly2sym(m,x)
Para dividir P(x) entre Q(x):
>>[c,r]=deconv(p,q)
>>cociente=poly2sym(c,x)
>>resto=poly2sym(r,x)
Ejercicio 2 Que habra que hacer para sumar dos polinomios? Sumar los polinomios P(x) = x
3
3x
2
5x +2 y
Q(x) = 4x
5
3x
2
+ 8x + 2.
Sugerencia: Sea >>p=[1 -3 -5 2]; reescribe p para igualar el tama no de los vectores p q y as poder sumarlos
>>p=[zeros(...) p];
Ejercicio 3 Dividir el polinomio P(x) = x
5
8x
4
10x
3
+ 10x
2
x + 6 entre Q(x) = x + 3. Comprobar que
Dividendo = DivisorCociente +Resto
Vericar que se cumple el teorema del resto, es decir, que el resto de dividir P(x) entre (xa) es igual a P(a).
3. Races
Para calcular las races del polinomio
P(x) = x
5
2x
4
10x
3
+ 20x
2
+ 9x 18
introducimos el polinomio,
>>p=[1 -2 -10 20 9 -18];
y escribimos:
>>r=roots(p)
Tambien es posible reconstruir el polinomio a partir de sus races:
>>p=poly(r);poly2sym(p,x)
Ejemplo 2 Races enesimas de la unidad. Se llaman races enesimas de la unidad a las soluciones (complejas)
de la ecuacion
z
n
= 1
Para calcular las races quintas de la unidad, tenemos que calcular las races del polinomio P(x) = x
5
1.
Introducimos el polinomio:
>>p=[1 0 0 0 0 -1]
Calculamos las races:
r=roots(p)
Estas races se pueden representar utilizando el comando
>>compass(r)
Ejercicio 4 Calcular y dibujar las races sextas de la unidad.
Ejercicio 5 Escribir un programa de tipo function que, tomando como dato de entrada el valor de n, calcule y
dibuje las races enesimas de la unidad.
Con el programa anterior, calcular y dibujar el caso n = 8.
4. Gracas de polinomios
Ejemplo 3 Dibujar la graca del polinomio
y = x
3
x
en el intervalo [2, 2].
Introducimos el polinomio:
>>p=[1 0 -1 0];
Generamos una tabla de valores para x:
>>x=linspace(-2,2,1000);
sustituimos en el polinomio:
>>y=polyval(p,x);
y representamos los puntos con el comando
>>plot(x,y)
Ejercicio 6 Escribir un programa de tipo function que , tomando como dato de entrada el valor de n, dibuje la
graca de la curva y = x
n
en el intervalo [1, 1].
Con el programa anterior, dibujar y = x
10
y el caso y = x
13
.
Departamento de Matematica Aplicada
C

ALCULO COMPUTACIONAL.
Licenciatura en Qumica (Curso 2008-09)
Gracas 2D. Practica 4
1. Introduccion
Con el programa MATLAB podemos dibujar gracas de curvas y funciones en el plano en m ultiples formatos
y con diferentes presentaciones. Funciones en coordenadas cartesianas, dadas en forma explcita, es decir, de la
forma y = f(x); sin embargo, no se pueden dibujar directamente curvas en forma implcita, es decir, de la forma
g(x, y) = 0. Tambien curvas en forma parametrica, es decir, de la forma r(t) = (x(t), y(t)) con a t b. Y tambien
curvas en coordenadas polares, de la forma r = r() con
1

2
.
2. Comandos basicos para gracos 2D
Para dibujar una graca 2D con MATLAB se puede utilizar el comando ezplot, por ejemplo,
>>ezplot(sin(x))
Tambien se puede generar una tabla de valores para la x y para la y de la funcion a dibujar, por ejemplo,
>>x=linspace(0,2*pi,30);
>>y=sin(x);
A continuacion utilizar un comando para dibujar, que puede ser,
>>plot(x,y)
El color y el estilo de las lneas que se utilizan para hacer las gracas se pueden modicar, por ejemplo, con el
comando
>>plot(x,y,r:)
obtenemos la graca en color rojo y punteada, en lugar de con lnea continua. Para ver los colores y estilos
disponibles consultar el comando plot:
>>help plot
3. Coordenadas cartesianas
Ejemplo 1 Dibujar la graca de la funcion
y =
_
_
_
x
2
si x < 0
0 si 0 < x < 1
_
3(x 1) si x > 1
Creamos una tabla de valores:
>>x=linspace(-3,3,1000);
>>y=x.^2.*(x<0)+0*((x>0)&(x<1))+sqrt(3*(x-1)).*(x>1);
Y ahora utilizamos alguno de los comandos de dibujo, por ejemplo,
>>plot(x,y,m)
que producira una graca en color magenta.
Ejercicio 1 Dibujar las gracas de las siguientes funciones eligiendo, en cada caso, una tabla de valores adecuada
para que aparezcan los aspectos mas representativos de la funcion:
a) f(x) =
_
x
2
si x < 0
1 si x 0
b) f(x) =
_

_
x si x < 1
1 si 0 < x < 2
x
2
si x > 2
c) f(x) =
_

1 x si x < 1
1 x
2
si 1 < x < 1

x 1 si x > 1
4. Ecuaciones parametricas
Ejemplo 2 Dibujar la graca de la curva
r(t) = (cos(t), sen(t)) ; t
En primer lugar generamos los valores de t en el intervalo indicado,
t=linspace(-pi,pi,100);
Y ahora lo podemos dibujar:
>>plot(cos(t),sin(t))
Ejercicio 2 Dibujar las curvas en parametricas siguientes, a)r(t) = (2 cos
3
t, 2 sen
3
t); t
b)r(t) = (3 sen t, 2 sen(2t)); t
c)r(t) =
_
t

_
12(
t

)
2
9
_
,
_
((
t

)
2
1)16(
t

)
2
+ 2
__
; 3 t 3
d)r(t) =
_
3
2
cos t(cos t + 1), 2 sen(2t)
_
; t
e)r(t) = (sen(2t) + sent, cos(2t) cos t); t
5. Coordenadas polares
Ejemplo 3 Dibujar la graca de
r = 2 4 cos(),
En primer lugar generamos los valores del angulo tetha:
>>tetha=linspace(-pi,pi,100);
Calculamos los valores de r:
>>r=2-4*cos(tetha);
Y dibujamos la graca,
>>polar(tetha,r)
Ejercicio 3 Dibujar las gracas de las siguientes funciones, dadas en coordenadas polares:
a)r = 7 7 sen();
b)r = 3 6 sin();
c)r = sen(6);
d)r = cos(8);
Departamento de Matematica Aplicada
C

ALCULO COMPUTACIONAL.
Licenciatura en Qumica (Curso 2008-09)
Gracas 3D Practica 5
Con MATLAB se pueden hacer gracas de funciones de dos variables en el espacio, es decir, funciones de la
forma z = f(x, y) (forma explcita). Tambien se pueden dibujar, en el espacio, curvas y ciertas supercies.
1. Curvas en el espacio
Se generan de una manera similar a las curvas en el plano, con la diferencia de que aqu se utiliza el comando
plot3
Ejemplo 1 Dibujar la curva
r(t) = (sen(t), cos(t), t) 0 t 4
y sobre ella los vectores velocidad.
Generamos los valores de t:
>>t=linspace(0,4*pi,500);
Y ahora podemos utilizar el comando plot3 que nos da el dibujo completo:
>>plot3(sin(t),cos(t),t)
Ejercicio 1 Representar las curvas siguientes en los intervalos indicados:
a)r(t) = (2 cos
3
t, 2 sen
3
t, t) 4 t 3.
d)r(t) = (e
t
4
sen(2t), e
t
4
cos(2t),
t
4
) 10 t 4,8.
2. Gracos de funciones z = f(x, y)
Para dibujar gracos de funciones de dos variables z = f(x, y), al igual que para funciones de una variable, en
primer lugar hay que generar tablas de valores para las variables x e y. En realidad ahora lo que tenemos que hacer
es generar un mallado sobre un rectangulo del plano XY . Para eso se utiliza el comando meshgrid.
Ejemplo 2 Dibuja la graca de la funcion
z = e
x
2
y
2
en la region del plano D = (x, y)/ 2 x 2, 3 y 3
Habra que efectuar los pasos siguientes:
Generamos el mallado
>>[x,y]=meshgrid(-2:.2:2,-3:.2:3);
Sustituimos en la funcion para calcular los valores de z:
>>z=exp(-x.^2-y.^2);
Y ahora podemos dibujar el graco con alguno de los siguientes comandos:
>>plot3(x,y,z)
>>mesh(x,y,z)
>>surf(x,y,z)
Para conseguir efectos de sombreados y colores diferentes se pueden consultar todas las posibilidades de los
comandos colormap y shading. Algo que resulta tambien interesante es a nadir una escala de colores al dibujo
que nos permite conocer las alturas (coordenada z) de los diferentes puntos de la graca; esto se consigue con el
comando colorbar (despues de dibujada la graca).
Las longitudes de los ejes coordenados tambien se pueden modicar con el comando:
>>axis([xmin xmax ymin ymax zmin zmax])
Ejemplo 3 Representar la graca de la funcion
z = x
2
+y
2
Dibujando algunas curvas de nivel.
Creamos el mallado:
>>[x,y]=meshgrid(-2:.1:2);
Sustitumos en la funcion, para calcular los valores de z:
>>z=x.^2+y.^2;
Ahora podemos dibujar la graca utilizando alguna de los comandos descritos en el punto relativo a los comandos
basicos de 3D.
Las curvas de nivel se pueden hacer utilizando alguno de los comandos siguientes:
>>contour(x,y,z,10) % dibuja 10 curvas de nivel
>>contour(x,y,z,1.38) % dibuja la curva de nivel z=1.38
>>contour3(x,y,z,10) % dibuja 10 curvas de nivel en el espacio
Ejercicio 2 Escribir un chero tipo script con nombre missuperficies.m que represente las gracas de las
siguientes funciones de 2 variables, utilizando alguno de los comandos descritos anteriormente.
a)z =
_
[xy[
b)z = e
(x
2
+y
2
)
Ejercicio 3 Escribir un chero tipo script con nombre miscurvasdenivel2D.m que dibuje las curvas de nivel de
las funciones del ejercicio anterior, utilizando alguno de los comandos descritos anteriormente.
3. Supercies pVT
Las ecuaciones de estado de los gases son, desde un punto de vista matematico, ecuaciones tipo z = f(x, y)
en las que las variables cartesianas (x, y, z) son sustituidas por las variables termodinamicas temperatura (T),
volumen molar (v = V/n) y presion (p).
Ejemplo 4 La ecuacion de los gases ideales
p =
R T
v
puede dibujarse de manera analoga a como lo hemos hecho con otras funciones anteriormente. Primero deberemos
generar un mallado:
>>[T,v]=meshgrid(0:4:200,2:2:20);
A continuacion sustituimos los valores en la funcion para calcular los valores de la presion:
>>p=0.082*T./v;
Y por ultimo pintamos la graca resultante con el comando mesh o con cualquier otro:
>>mesh(v,T,p)
3.1. Isotermas del Gas Ideal
En muchas ocasiones las supercies p v T del gas no son las mas interesantes debido a la dicultad de ver el
comportamiento seg un las variables. Por este motivo se suelen utilizar diagramas en dos dimensiones en los que
se muestran las variaciones de la presion (eje Y ) respecto al volumen molar (eje X) para valores constantes de la
temperatura. A estas curvas se las denomina isotermas.
Obtenidos los valores de las variables termodinamicas p, v y T con la ecuacion de estado resulta muy sencillo
en MATLAB dibujar las isotermas. Basta recordar que el comando contour(x,y,z,N) dibujaba N curvas en el
plano (x, y) para valores de z constantes. As se procede de la siguiente manera:
>>contour(v,p,T,10)
El resultado sera una graca con 10 isotermas en las que se observa la variacion de la presion (eje Y ) respecto
a la variacion del volumen molar (eje X) para valores constantes de la temperatura.
Variando los parametros del mallado podremos cambiar la region de la graca dibujada, siempre manteniendolos
dentro de los lmites admisibles. (Nunca usar temperaturas negativas, etc.)
Ejercicio 4 Cambia el orden en el que se escriben los argumentos en el comando contour() . Que obtienes
si escribes contour(v,T,p,10)? Y que obtienes si escribes contour(T,p,v,10)? Cual es su signicado ter-
modinamico?
3.2. Otras ecuaciones de Estado
La ecuacion de estado de los gases ideales, si bien resulta muy facil de manejar, no es una ecuacion valida
para ning un gas. Por lo general las moleculas de cualquier gas siempre van a sufrir interaccion entre ellas, y esto
originara que su comportamiento se desve del correspondiente a un gas ideal.
Para obtener comportamientos mas parecidos al de los gases reales se han propuesto numerosas ecuaciones de
estado que en su formulacion incluyen, en cierta medida, este tipo de interacciones.
La mas conocida fue introducida por J. D. Van der Waals en 1873:
p =
RT
v b

a
v
2
,
donde a y b son dos constantes positivas cuyo valor se puede ajustar y dependen del gas. Los mejores valores se
obtienen tomando:
a =
27R
2
T
2
c
64p
c
b =
RT
c
8p
c
donde T
c
y p
c
son los valores de la temperatura y la presion en el punto crtico. El parametro b se denomina
parametro de repulsion y representa un volumen mnimo del gas, por debajo del cual resulta imposible comprimirlo
debido al tama no de sus moleculas, mientras que el parametro a se denomina parametro de atraccion y nos da una
correccion de la ecuacion del gas ideal debido a la atraccion entre sus moleculas.
Otra ecuacion muy utilizada fue introducida en 1949 por O. Redlich y N. S. Kwong
p =
RT
v b

a
v(v +b)T
1/2
donde de nuevo a y b son constantes cuyo valor depende del gas y cuyo mejor valor es:
a =
0,42748R
2
T
5/2
c
p
c
b =
0,08664RT
c
p
c
siendo T
c
y p
c
los valores de la temperatura y la presion en el punto crtico. La principal diferencia con la ecuacion
anterior esta en que el termino que incluye la interaccion con las demas partculas del gas tiene ademas una
dependencia con la temperatura.
Ejercicio 5 En la tabla siguiente se muestran los valores crticos de la temperatura, presion y volumen molar para
diferentes sustancias.
Sustancia T
c
(K) p
c
(atm) v
c
(l/mol)
Dioxido de Carbono (CO
2
) 304.2 72.9 0.094
Oxgeno (O
2
) 154.4 49.7 0.074
Agua (H
2
O) 647.4 218.3 0.056
Helio (He) 5.2 2.26 0.060
Crea un programa function que realice los sigientes calculos: para cada una de las sustancias anteriores, obten
los parametros a y b de la ecuacion de Van der Waals y dibuja una graca con 8 isotermas. Compara las isotermas
obtenidas con las correspondientes a la ecuacion de los gases ideales, que diferencias hay?.
Ejercicio 6 Repite el ejercicio anterior para la ecuacion de Redlich-Kwong.
Ejercicio 7 Tomando como valores los de v
c
y T
c
de la tabla anterior se puede evaluar la presion en cada una de
las tres ecuaciones de estado anteriores. De esta manera es posible obtener una estimacion teorica para p
c
en cada
ecuacion.
Haz los calculos para el CO
2
, el O
2
, el H
2
O y el He. Rellena la tabla siguiente comparandolos con el exper-
imental. Porque no se obtiene el valor de p
c
experimental? (a pesar de que ha sido usado para calcular a y b).
Que ecuacion estima mejor cada uno de los valores experimentales?. Cual de las ecuaciones lo estima peor?.
Sabes decir porque?.
Sustancia p
c
Exp. p
c
Gas Id. p
c
V-W p
c
R-K
CO
2
72.9
O
2
49.7
H
2
O 218.3
He 2.26
4. Orbitales del atomo de Hidrogeno
El movimiento de un electron alrededor de un n ucleo de Hidrogeno viene descrito, siguiendo un planteamiento
cuantico, por unas funciones de onda
n,l,m
(x, y, z) cuya norma al cuadrado describe la probabilidad de encontrar
dicho electron en un punto del espacio (x, y, z) y dentro de un determinado orbital determinado por los n umeros
cuanticos n, l, m.
Al n umero cuantico n se le llama n umero cuantico principal y determina el nivel de energa correspondiente al
electron E
n
= 1/(2n
2
). Conviene recordar que a diferencia de la descripcion clasica, un electron no puede tener
cualquier energa dentro de ese potencial sino solo algunos valores puntuales que forman el espectro de energa.
Los distintos valores de n = 1, 2, 3, ... determinan la capa en la que se encuentra el electron, lo que a su vez
estara relacionado con un sinfn de propiedades qumicas del elemento.
El n umero cuantico l se le conoce como n umero cuantico azimutal y determina en momento angular del electron.
Los valores permitidos para el n umero l van desde l = 0 hasta l = n1. Los distintos valores del n umero azimutal
van a determinar los diferentes orbitales existentes dentro de cada capa. As l = 0 se corresponde con el orbital s,
l = 1 con el orbital p, l = 2 con el d, etc.
El n umero m llamado n umero cuantico magnetico determina los distintos estados para un valor de l. Determinan,
en cierto modo, la orientacion y simetra del orbital en cuestion. Sus valores van desde m = l hasta m = l. Los
diferentes valores de m originan los diferentes suborbitales. As para l = 1, (orbital p) tenemos que m = 1
corresponde al orbital p
y
, m = 0 al orbital p
z
y m = 1 al orbital p
x
. Para l = 2 tenemos los suborbitales d
xy
(m = 2), d
yz
(m = 1), d
z
2(m = 0), d
xz
(m = 1), d
(x
2
y
2
)
(m = 2).
Por ultimo existe un cuarto n umero cuantico, que no se tiene en cuenta en la descripcion de los orbitales,
conocido como n umero cuantico de spin cuyos valores pueden ser de s = 1/2. Este n umero cuantico hace posible
que en cada orbital coexistan dos electrones que solo se diferencian en este n umero cuantico de spin.
4.1. Funciones de Onda
Matematicamente hablando, las funciones de onda descritas anteriormente (x, y, z) son las soluciones de una
ecuacion diferencial en derivadas parciales conocida como ecuacion de Schrodinger estacionaria

h
2m

2
(x, y, z) +V (x, y, z)(x, y, z) = E(x, y, z)
donde V (x, y, z) es el potencial de Coulomb correspondiente a la carga del n ucleo, E es la energa del sistema y
es el operador gradiente y por tanto

2
=

2
x
2
+

2
y
2
+

z
2
.
Las soluciones de esta ecuacion se obtienen realizando una transformacion a coordenadas polares y posterior-
mente una separacion de variables de manera que para un determinado nivel de energa E
n
la funcion de onda se
puede descomponer de la forma siguiente

n,l,m
= R
n,l
(r)Y
l,m
(, ),
donde R
n,l
es una componente radial de la funcion y Y
l,m
es una componente direccional.
Escritas en coordenadas cartesianas, las funciones de onda correspondientes a los tres primeros niveles de energa
son (en unidades de a
0
):

1,0,0
=
e
r


2,0,0
=
_
1
r
2
_
e
r/2

3,0,0
=
(2r
2
18r + 27)
81
e
r/3

2,1,1
=
y
2
e
r/2

2,1,0
=
z
2
e
r/2

2,1,1
=
x
2
e
r/2

3,1,1
=
8
27

8
y
_
1
r
6
_
e
r/3

3,1,0
=
8
27

8
z
_
1
r
6
_
e
r/3

3,1,1
=
8
27

8
x
_
1
r
6
_
e
r/3

3,2,2
=
2
81

2
x y e
r/3

3,2,1
=
2
81

2
y z e
r/3

3,2,0
=
1
81

3
(3z
2
r
2
) e
r/3

3,2,1
=
2
81

2
x z e
r/3

3,2,2
=
1
81

2
(x
2
y
2
) e
r/3
donde r =
_
x
2
+y
2
+z
2
es el radio. Las componentes angulares se ponen de maniesto en la dependencia en cada
una de las variables cartesianas de las funciones de onda descritas.
Ejemplo 5 Curvas de nivel del orbital 2p
x
. Es imposible representar gracamente los orbitales ya que al
tratarse de funciones de IR
3
sobre IR necesitaramos un espacio de 4 dimensiones para representarlo. Una de las
posibilidades para hacernos una idea de los orbitales resulta el dibujar curvas de nivel de los mismos. En el presente
ejemplo vamos a representar las curvas de nivel del orbital 2p
x
en el corte con el plano z = 0. Lo mismo se puede
intentar para otros valores de z, x o y.
Para ello necesitaremos en primer lugar denir un chero con la correspondiente funcion de onda, escribiendo
en un chero:
function Psi=FdOn211(x,y,z)
%
% Funcion de Onda n=2 l=1 m=1 % orbital 2px
%
r=sqrt(x.^2+y.^2+z.^2);
Psi=x/2.*exp(-r./2)/sqrt(8*pi);
y lo guardamos con el nombre FdOn211.m. Esto nos permitir a evaluar la funcion de onda para cada punto (x, y, z)
del espacio. A continuacion escribe un chero de nombre miscurvasdenivel3D.m que
1. dena un mallado de valores de x e y, para valores comprendidos entre 20a
0
y 20a
0
:
>>[x,y]=meshgrid(-20:.1:20);
2. evalue la funcion (x, y, 0) para obtener los puntos sobre los que dibujar las curvas de nivel:
>>Psi=FdOn211(x,y,0);
3. dibuje las curvas de nivel con el comando contour:
>>contour(x,y,Psi)
4. Si queremos dibujar mas curvas de nivel basta a nadir el n umero de curvas deseadas
>>contour(x,y,Psi,16)
Ejercicio 8 Siguiendo el proceso descrito anteriormente dibuja las curvas de nivel de los orbitales
1.
3,1,1
Orbital 3p
x
2.
3,2,2
Orbital 3d
xy
3.
3,2,2
Orbital 3d
(x
2
y
2
)
Ejemplo 6 Escribe en un chero script de nombre unasuperficiesdenivel.m que dibuje una supercie de
nivel para el orbital atomico
3,2,0
.
Figura 1: Orbital 3d
z
2
[x,y,z]=meshgrid(-20:0.5:20);
Psi=FdOn320(x,y,z);
m=min(Psi(:));
M=max(Psi(:));
clf %clear figure
isovalue=(M+m)/2; %valores de Psi=isovalue
fv = isosurface(x,y,z,Psi,isovalue); % La superficie de nivel
hpatch = patch(fv);
isonormals(x,y,z,Psi,hpatch);
Alphalevel=0.5;
set(hpatch,FaceAlpha,Alphalevel,FaceColor,[0 0 1],EdgeColor,none)
daspect([1,1,1])
view(3);
axis tight
camlight left;
Ejemplo 7 Escribe en un chero script de nombre missuperficiesdenivel.m que dibuje una serie de super-
cies de nivel para el orbital atomico
3,2,0
.
Figura 2: Orbitales 3d
z
2
[x,y,z]=meshgrid(-20:0.5:20);
Psi=FdOn320(x,y,z);
m=min(Psi(:));
M=max(Psi(:));
n=5
color=[1 1 0;1 0 1; 0 1 1;0 1 0;1 0 0;0 0 1; 0 0 0]; %colores de las superficies
clf %clear figure
for i=1:n
isovalue=m+i*(M-m)/n; %valores de Psi=isovalue
fv = isosurface(x,y,z,Psi,isovalue); % La superficie de nivel
hpatch = patch(fv);
isonormals(x,y,z,Psi,hpatch);
Alphalevel=0.5;
set(hpatch,FaceAlpha,Alphalevel,FaceColor,color(i,:),EdgeColor,none)
daspect([1,1,1])
view(3);
axis tight
camlight left;
end
Ejercicio 9 Repite el ejemplo anterior para las funciones de onda citadas en el ejercicio anterior.
Ejercicio 10 Seg un la teora cuantica, la determinacion seg un los ejes cartesianos de los tres orbitales p no es
mas que una de las muchas soluciones posibles, ya que la colocacion de los ejes es arbitraria. Por lo tanto los tres
orbitales p juntos deben tener momento angular total cero, y el aspecto del orbital debe ser esferico. Comprueba
esta armacion pintando en la misma gura los tres orbitales en conjunto.
4.2. Hibridacion
Seg un la teora elemental de ecuaciones diferenciales, si una ecuacion diferencial tiene dos soluciones conocidas
x
1
y x
2
, entonces sera solucion cualquier combinacion lineal de ambas. Esto tambien es extensible al caso que
nos ocupa, de manera que dadas un conjunto de orbitales soluciones de la ecuacion de Schrodinger, cualquier
combinacion lineal de estas sera un nuevo orbital solucion de la ecuacion de Schrodinger.
En el caso que nos ocupa, este fenomeno se conoce como h

ibridacion y, aunque puede darse entre cualquier


grupo de orbitales, son especialmente conocidos los que se dan entre los orbitales s y p, y en concreto la hibridacion
sp
3
que se produce especialmente en el carbono originando cuatro orbitales que se distribuyen en el espacio en
forma de tetraedro.
Los orbitales hbridos resultantes de dicha combinacion lineal son:
[sp
3
]
1
=
1
2
(s +p
x
+p
y
+p
z
)
[sp
3
]
2
=
1
2
(s p
x
+p
y
p
z
)
[sp
3
]
3
=
1
2
(s p
x
p
y
+p
z
)
[sp
3
]
4
=
1
2
(s +p
x
p
y
p
z
)
donde los orbitales s =
2,0,0
, p
x
=
2,1,1
, p
z
=
2,1,0
y p
y
=
2,1,1
. Igualmente se pueden obtener hibridaciones
sp
3
con orbitales de la capa 3, 4, etc.
Ejercicio 11 Dibuja los orbitales hbridos [sp
3
]
1
y [sp
3
]
4
.
4.3. Orbitales Moleculares
Cuando dos atomos se aproximan el uno al otro hasta situarse convenientemente cerca, sus orbitales sufren un
solapamiento de manera que se produce algo parecido al fenomeno de hibridacion comentado anteriormente. De
esta forma, de dos orbitales que se solapen A y B, se forman otros dos, uno de menor energa llamado enlazante

E
y otro de mayor energa llamado antienlazante
A
.

E
= N(A+B)
A
= N(AB)
donde N es una constante de normalizacion. Los orbitales A y B son de atomos diferentes, y por tanto se
evaluaran en puntos diferentes del espacio. Seg un la teora de los Orbitales Moleculares, los electrones se sit uan
dentro de estos orbitales que forman las moleculas que conocemos. Si el solapamiento se realiza siguiendo la
direccion del eje de simetra de los orbitales, al orbital molecular resultante se le llama orbital , mientras que si
el solapamiento se realiza de forma perpendicular a los ejes de simetra se le llama orbital .
El solapamiento de muchos orbitales originara en los metales dos macro-orbitales que se extienden a todos los
atomos de la red metalica. Se llaman bandas de conduccion y de valencia.
Ejemplo 8 Para dibujar los orbitales moleculares enlazante y antienlazante, resultado del solapamiento de dos or-
bitales 2p
z
situados a una distancia de 6a
0
seg un el eje X habra que modicar el script llamado missuperficiesdenivel.m
de manera que eval ue el orbital enlazante
Psi=FdOn210(x,y,z)+FdOn210(x+6,y,z);
o el antienlazante
Psi=FdOn210(x,y,z)-FdOn210(x+6,y,z);.
Nota: Puedes rotar las guras resultantes para apreciar mejor los detalles.
Ejercicio 12 Dibuja cada uno de los siguientes orbitales moleculares:
a)
E
= 1s + 1s situados a una distancia de 2a
0
en el eje X.
b)
A
= 1s 1s situados a una distancia de 2a
0
en el eje X.
c)
E
= 2p
x
+ 2p
x
situados a una distancia de 8a
0
en el eje Y.
d)
A
= 2p
x
2p
x
situados a una distancia de 8a
0
en el eje Y.
Figura 3: Orbitales
E
y
A
.
Departamento de Matematica Aplicada
C

ALCULO COMPUTACIONAL.
Licenciatura en Qumica (Curso 2008-09)
Calculo Simbolico. Practica 6
1. Introduccion
En esta practica vamos a a utilizar los comandos del programa Matlab de Calculo Simbolico. En particular
vamos a ver como se pueden calcular lmites, derivadas e integrales.
2. Lmites
Ejemplo 1 Calculo de lmites.
Queremos calcular el lmite siguiente:
lm
x3
x
2
3
3x
5
+ 5x
Procedemos de la manera siguiente:
Denimos la variable simbolica x: >>syms x
Escribimos >>l=limit((x^2-3)/(3*x^5+5*x),x,3)
Ejecutamos el comando, nos dara el resultado que en este caso es
1
124
Ejercicio 1 Calcular los siguientes lmites:
a) lm
x0
e
x
1
log(1 +x)
b) lm
x0
x +sen(x)
x sen(x)
c) lm
x0
(e
x
+x)
1
x
d) lm
x0
xe
ax
x
1 cos(ax)
, (a IR)
e) lm
x

3
sen(3x)
1 2 cos x
f ) lm
x
(x
4
+ 1)
1
lnx
3. Derivadas
Ejemplo 2 Queremos calcular la derivada tercera de la funcion:
y = 4xsenx
Escribimos la funcion simbolica, despues de haber denido la variable x.
>>y=4*x*sin(x)
Escribimos el comando >>diff(y,3)
Y nos debe dar como resultado:
4xcos x 12 sen x
Si hacemos:
>>d3=diff(y,3)
>>subs(d3,x,pi/2)
Obtenemos como respuesta 12, es decir, el valor de la derivada tercera de la funcion y en x =

2
.
Ejercicio 2 Calcular las derivadas primeras y segundas de las siguientes funciones en el punto x = 2:
a)f(x) =
_
x
2
2

x
3
_
(7 5x
6
)
2
b)f(x) = (7x 5)
2
4x
3
+ 3x
(x 1)
2
c)f(x) =
dx
2
+ex +f
x
2
a
+
x
b
+
1
c
d)f(x) = (x a)(x b)(x c)
e)f(x) = (x +a)
1
3
(x a)
1
3
f )f(x) =
_
1 + (x
2
7)
1/2
4. Integrales
Ejemplo 3 Queremos calcular la integral indenida
_
x
x
2
+ 1
dx
Despues de denir la variable simbolica x, denimos la funcion:
>>y=x/(x^2+1)
Calculamos la integral con el comando >>int(y)
Nos dara la solucion:
1
2
ln(x
2
+ 1)
Ejercicio 3 Calcular las siguientes integrales indenidas:
a)
_
log x

x
dx
b)
_
arctg

xdx
c)
_
a
x
2
+b
2
dx
d)
_
x + 1
x
2
+ 4x + 5
dx
e)
_
x
2
x
2
x + 1
dx
f )
_
x
2
x
2
+x + 1
dx
Ejemplo 4 Queremos calcular la integral denida:
_
1
0
x
x
2
+ 1
dx
Una vez denida la funcion simbolica, como en el ejemplo anterior, escribimos el comando
>>int(y,0,1)
Que nos ofrece la solucion simbolica:
1/2*log(2)
Si queremos el resultado en forma numerica lo haremos con el comando quad y una funcion denida o bien con
un chero function.m o bien del siguiente modo
>>F = inline(x./(x.^2+1));
>> Q = quad(F,0,1)
Q =
0.3466
Ejercicio 4 Calcular las integrales que se calcularon en el ejercicio anterior, pero haciendolas todas ellas denidas
en el intervalo [10, 12], ofreciendo el resultado en forma algebraica y en forma numerica.
Ejemplo 5 Integrales M ultiples. Si queremos el resultado de
_
2
3
__
1
0
(x
2
+y) dx
_
dy
en forma numerica (para lmites constantes) lo haremos con el comando dblquad y una funcion denida o bien
con un chero function.m o bien
>> F=inline(x.^2+y)
o bien
>> F=inline(x.^2+y,x,y)
>> Q = dblquad(F,0,1,-3,2)
Q =
-0.8333
Se pueden calcular integrales con lmites variables haciendo que el integrando sea cero fuera de la region. Por
ejemplo,
_
2
3
_
_
10y
2
0
(x
2
+y) dx
_
dy
o bien
>>F = inline((x.^2+y).*(x<=10-y^2).*(x>=0));
>> Q = dblquad(F, 0, 10, -3, 2)
Q =
931.0119
En particular, el volumen de una semiesfera se puede calcular
>>F = inline(sqrt(max(1-x.^2-y.^2,0)),x,y); Q = dblquad(F, -1, 1, -1, 1)
Si queremos calcular integrales triples en forma numerica (para lmites constantes) lo haremos con el comando
triplequad y una funcion denida o bien con un chero function.m o bien como en el ejemplo anterior.
Ejercicio 5 Calcular las siguientes integrales m ultiples:
a)
_
2
3
_
1
0
(x
2
+y)dxdy
b)
_
1
0
_
(1x
2
)
1
2
0
dydx
c)
_
1
1
_
|x|
2|x|
e
x+y
dydx
d)
_
1
0
_
(1y
2
)
1
2
0
dxdy
e)
_
1
1
_
1
1
_
1
1
(x
2
+y
2
+z
2
)dxdydz
f )
_
1
0
_
z
0
_
y
0
(xy
2
z
3
)dxdydz
g)
_
1
0
_
y
0
_ x

3
0
x
x
2
+z
2
dzdxdy
h)
_

e
x
2
y
2
dxdy
i)Sabiendo que
_

0
_
y
0
xe
y
3
dxdy =
1
6
, calcula una aproximacion nuerica. Que ocurre?.
Comprueba que
>> Q1 = dblquad(F, 0, 1, 0, 10)
Q1 =
0.1481
>> Q2 = dblquad(F, 1, 10, 0, 10)
Q2 =
0.0186
>> Q1+Q2-1/6
ans =
-6.1393e-006
5. Polinomios de Taylor
Ejemplo 6 Calcular el Polinomio de Taylor de grado 6 de la funcion f(x) = sin(x) en x =

2
.
>>taylor(sin(x),pi/2,6)
ans=
1-1/2*(x-1/2*pi)^2+1/24*(x-1/2*pi)^4
Pero tambien podemos hacer >>taylortool y seguir las indicaciones.
Ejercicio 6 Sea la funcion f(x) = e
x
:
a) Calcular los polinomios de McLaurin de grados n=2,4,10 y representarlos, utilizando ezplot, junto a la
graca de la funcion.
b) Calcular los polinomios de Taylor en torno a x = 1 para los grados n=2,4,10 y representarlos junto a la
graca de la funcion.
Ejercicio 7 Sea la funcion f(x) = sen(x):
a) Calcular los polinomios de McLaurin de grados n = 3, 5, 11 y representarlos junto a la funcion.
b) Calcular los polinomios de Taylor en x =

2
para los grados n = 3, 5, 11 y representarlos junto a la funcion.
c) Utilizar el polinomio de McLaurin con n = 3 y el polinomio de Taylor, tambien con n = 3, en torno a x =

2
para calcular aproximadamente en valor de sen(0,1). Compararlo con los valores reales. Lo mismo con el valor de
sen(1,5). En que casos nos se obtiene una mejor aproximacion? Por que?
Ejercicio 8 Investigar que hace el comando >>funtool
Hacer help y resolver el problema que se plantea en el: (The Demo button poses the following challenge...)
Departamento de Matematica Aplicada
C

ALCULO COMPUTACIONAL.
Licenciatura en Qumica (Curso 2008-09)
Analisis de Datos Practica 7
1. Mnimos Cuadrados.
El Metodo de ajuste por Mnimos Cuadrados sirve para encontrar una funcion y = f(x,
1
,
2
, . . . ,
m
), en la
que habra que calcular los parametros
1
,
2
, . . . ,
m
. Esta funcion debe ser la que se ajuste lo mejor posible a una
tabla de valores que relaciona las dos variables x e y obtenida experimentalmente:
x x
1
x
2
. . . x
n
y y
1
y
2
. . . y
n
Para calcular los parametros se impone la condicion de que sea mnima la funcion
S(
1
,
2
, . . . ,
m
) =
n

i=1
[f(x
i
,
1
,
2
, . . . ,
m
) y
i
]
2
Como S(
1
,
2
, . . . ,
m
) es una funcion de m variables, una condicion necesaria para que tenga un valor extremo
en un punto es que sus derivadas parciales en ese punto sean todas nulas. De aqu obtenemos un sistema de m
ecuaciones, con m incognitas:
S

1
= 0,
S

2
= 0, . . . ,
S

m
= 0
cuyas soluciones, los parametros
1
,
2
, . . . ,
m
nos indican como es la funcion que mejor se ajusta a los datos,
es decir, f(x,
1
,
2
, . . . ,
m
).
La funcion f(x,
1
,
2
, . . . ,
m
) puede ser de cualquier tipo, teoricamente, sin embargo, en la practica, con
programas como MATLAB (o Matlab) solo se pueden calcular (directamente) cuando la funcion es un polinomio.
En otros casos, que veremos en los ejercicios, habra que modicar ligeramente el problema para que se pueda tratar
con el ordenador.
Para realizar estos calculos MATLAB dispone del comando polyfit. Veamos en un ejemplo como se puede
ajustar una recta con Mnimos Cuadrados:
Ejemplo 1 Dada la tabla de valores,
x 1 2 3 4
y 2,1 4,3 6 7,8
Encontrar la funcion de la forma y = ax +b que mejor se ajuste a los datos.
Como se trata de una funcion polinomica se puede hacer directamente.
Introducimos primero la tabla de valores en dos variables:
>>x=[1 2 3 4]
>>y=[2.1 4.3 6 7.8]
El comando a utilizar es polyfit(x,y,k), donde k es el grado del polinomio que queremos obtener. Por lo
tanto para obtener una recta k = 1:
>>c=polyfit(x,y,1)
Que nos da como resultado los coecientes de la recta:
c =
1.8800 0.3500
Es decir, que la recta que hemos encontrado es,
y = 1,88x + 0,35
Para representar la informacion obtenida gracamente:
Primero dibujamos la tabla de valores, por ejemplo:
>>plot(x,y,*)
De esta forma conseguimos que dibuje solo los puntos, con asteriscos o con cualquier otro formato.
Para dibujar la recta, lo hacemos como para dibujar cualquier funcion. Generamos una tabla, (que llamaremos
con un nombre diferente de x para no borrar la tabla de los datos del problema):
>>xp=linspace(1,4,20);
Para para calcular los valores de xp en la recta y = 1,88x + 0,35 podemos utilizar el comando polyval que
eval ua el polinomio utilizando los coecientes, que tenamos en la variable c:
>>yp=polyval(c,xp);
>>hold on % para mantener el dibujo anterior
Y, por ultimo,
plot(xp,yp)
1 1.5 2 2.5 3 3.5 4
2
3
4
5
6
7
8
y=1.88x+0.35
Figura 4: Tabla y Recta y = 1,88x + 0,35
El error que se comete al aproximar la funcion emprica (tabla inicial) por la funcion teorica (recta) se puede
cuanticar de varias formas.
Una manera es precisamente calcular la suma de las desviaciones en cada punto de la tabla al cuadrado, es
decir, el valor de la funcion: S(
1
,
2
, . . . ,
m
):
Primero calculamos los valores de f(x
i
,
1
,
2
, . . . ,
m
):
>>fxi=polyval(c,x)
fxi =
2.2300 4.1100 5.9900 7.8700
Y ahora sustituimos en la formula:
>>error=sum((fxi-y).^2)
error =
0.0580
Otra forma consiste en calcular lo que se llama Error Cuadratico Medio, que viene dado por la expresion:
=

_
1
n
n

i=1
[f(x
i
,
1
,
2
, . . . ,
m
) y
i
]
2
Para calcularlo:
>>n=length(x) % calcula el numero de terminos
n =
4
>>errorcm=sqrt(sum((fxi-y).^2)/n)
errorcm =
0.1204
Por ultimo, se pueden utilizar los codigos que llevan incorporados los comandos polyfit y polyval para obtener
un intervalo de conanza al 95 % en el que se encuentra cada y
i
. Veamos en que consiste:
Primero volvemos a utilizar el comando polyfit, de una forma diferente:
>>[c,s]=polyfit(x,y,1)
c =
1.8800 0.3500
s =
R: [2x2 double]
df: 2
normr: 0.2408
s es la estructura con la que se va a calcular el error. Ahora volvemos a utilizar polyval, pero tambien modi-
cado:
>>[fxi,delta]=polyval(c,x,s)
fxi =
2.2300 4.1100 5.9900 7.8700
delta =
0.2220 0.1942 0.1942 0.2220
Hemos obtenido, en cada x
i
, un intervalo de conanza al 95 %, [fxi-2*delta,fxi+2*delta], dentro del cual
se encuentra el valor y
i
, i. e.
P
_
[f(x
i
) y
i
[ 2
i
_
= 0,95
donde P denota la probabilidad.
Si representamos la graca siguiente se entenderan de manera graca los calculos que acabamos de realizar.
>>plot(x,y,*,x,fxi,g-,x,fxi+2*delta,r:,x,fxi-2*delta,r:)
Ejercicio 1 Mediante el Metodo de Mnimos Cuadrados, elegir una funcion cuadratica del tipo
f(x) = ax
2
+bx +c
para los valores de x e y dados por la siguiente tabla
x 7 8 9 10 11 12 13
y 7,4 8,4 9,1 9,4 9,5 9,5 9,4
Calcular la funcion f(x). El error, el error cuadratico medio y representar la funcion obtenida junto a los datos
de la tabla con una banda alrededor de la graca de f(x), dentro de la cual se encuentren los puntos de la tabla a
un nivel del 95 %.
Ejercicio 2 De ciertas medidas realizadas se han obtenido los siguientes valores:
x 0 0,2 0,5 1 1,5 2 2,5 3 3,5 4 4,5 5
y 1 0,833 0,667 0,54 0,4 0,333 0,286 0,25 0,222 0,2 0,182 0,167
a) Representar la tabla de valores gracamente.
b) Se puede observar que se trata aproximadamente de una funcion del tipo y =
1
ax +b
. Esta funcion no la
podemos obtener directamente con el comando polyfit. Pero la podemos transformar en,
1
y
= ax +b
Ahora, haciendo X = x; Y =
1
y
. Nos queda la expresion
Y = aX +b
Calcular esta funcion. Habra que hacer una nueva tabla de valores con las nuevas variables.
c) Deshacer el cambio de variable y obtener la funcion original y representarla con los valores del apartado a).
d) Calcular el error y el error cuadratico medio.
Ejercicio 3 Hallar por el Metodo de Mnimos Cuadrados una funcion del tipo S = At
q
para los datos de la
siguiente tabla. Representarla junto a los datos de la tabla:
t 1 2 3 4 5
S 7,1 27,8 62,1 110 161
(Indicacion: Tomar logaritmos neperianos en la funcion para transformarla en una funcion de tipo lineal).
Ejercicio 4 La tabla siguiente contiene la presi on p en kp/cm
2
de un vapor saturado, en funcion del volumen
especco, v, medido en m
3
/kp:
v 3,334 1,63 0,8657 0,4323 0,2646 0,1699 0,1146
p 0,482 1,034 2,027 4,247 7,164 11,48 17,6
Elegir una funcion p = f(v) que sea adecuada a la tabla de valores y calcularla con el Metodo de Mnimos
Cuadrados. Representarla despues con los valores.
Seg un esta funcion Cual sera la presi on aproximada que correspondera a un volumen de 3m
3
/kp?
2. Analisis Multivariante. Regresion
Se utiliza cuando y es una funcion de mas de una variable independiente, las ecuaciones matriciales que expresan
las relaciones entre las variables se deben ajustar a esos datos. Esto se conoce como regresion m ultiple.
Supongamos que medimos una cantidad y para varios valores de x
1
y x
2
.
>> x1 = [.2 .5 .6 .8 1.0 1.1];
>> x2 = [.1 .3 .4 .9 1.1 1.4];
>> y = [.17 .26 .28 .23 .27 .24];
Un modelo lineal de regresion calcula los coecientes ,
y = a
0
+a
1
x
1
+a
2
x
2
,
por el metodo de los mnimos cuadrados. Construye y resuelve el sistema de ecuaciones formando una matrix
X y calcula los parametros con el operador del siguiente modo
>> X = [ones(size(x1)) x1 x2];
>> a = X\y
>> a =
0.1018
0.4844
-0.2847
i.e. el modelo de ajuste por mnimos cuadrados es
y = 0,1018 + 0,4844x
1
0,2847x
2
.
Para validar el modelo, calcula el maximo del valor absoluto de las desviaciones de los datos a partir del modelo
>> Y = X*a;
>> MaxErr = max(abs(Y - y))
>> MaxErr =
0.0038
el error relativo esta entre los lmites aceptables.
Observacion: Se ha desarrollado este metodo con el comando \ de matlab. Podramos hacerlo con el comando
pinv.
Ejercicio 5 Repite el ejemplo anterior utilizando el comando pinv. Cuales son las semejanzas y diferencias entre
ambos metodos?. Recuerda lo comentado en la practica 2.
Ejercicio 6 Ajustar los datos siguientes
x 1 2 3 4
y 0 1 2 3
z 2,1 1,3 4,2 5,6
a una funcion lineal del tipo z = ax +by +c.
Ejercicio 7 Repite el ejemplo anterior utilizando el comando pinv. Por que se obtienen dos soluciones distintas?.
Departamento de Matematica Aplicada
C

ALCULO COMPUTACIONAL.
Licenciatura en Qumica (Curso 2008-09)
Ecuaciones Diferenciales Ordinarias. Practica 8
En esta practica vamos a resolver Ecuaciones Diferenciales Ordinarias (E.D.O.), calculando aproximaciones
numericas de las soluciones (usando MATLAB). Algunos ejemplos de ecuaciones diferenciales ordinarias en las
ciencias fsicas son
1.
dx
dt
= kx proceso cinetico de primer orden
2.
dx
dt
= k(a
0
x)(b
0
x) proceso cinetico de segundo orden
3.
d
2
h
dt
2
= g cuerpo que cae bajo la accion de la gravedad
4.
d
2
x
dt
2
= x
2
oscilador armonico clasico
5.
h
2
8
2
m
d
2

dx
2
+
1
2
kx
2
= E ecuacion de ondas para el oscilador armonico
Ejemplo 1 Un proceso cinetico de primer orden. Considera la ecuacion diferencial
x

= 10x +e
t
, x(0) = 0,
en el intervalo, [0, 4]
1. Escribir un chero tipo funcion, con el nombre funcorden1.m, para la funcion de esta ecuacion diferencial,
es decir la expresion f(t, x), en concreto:
f unc t i on f=f uncorden1 ( t , x)
f =10x+exp(t ) ;
2. Usar, en la lineas de comandos, la rutina ode45 de Matlab para resolver la ecuacion numericamente. Dibuja
la graca de la solucion aproximada. En concreto, escribe
>> [ t , u]=ode45 ( @funcorden1 , [ 0 , 4 ] , 0 ) ;
>> pl ot ( t , u)
Ejercicio 1 Considera una reaccion reversible de primer orden en ambas direcciones A

B:
x

(t) = k
1
(a x) k
1
x, x(0) = 0, t [0, 10].
1. Repetir el punto 1 del ejemplo anterior para a = k
1
= 1, k
1
= 0,1. El chero funcion que contiene la funcion
de la ecuacion diferencial se tiene que llamar funcreversible11.m.
2. Escribe en una linea todos los datos de entrada del comando ode45, es decir:
>> f=@f unc r e ve r s i bl e 11 ; x0=0; i nt e r va l o =[ 0 , 10] ; N=1000;
3. Repetir el punto 2 del ejemplo anterior. Opcional: Usa el comando title para poner un ttulo a la ventana
y el comando legend para indicar la(s) curva(s).
Ejercicio 2 Consideramos la reaccion de tercer orden completa A+B+C
k
D. La concentracion de D verica
la ecuacion diferencial
d

(t) = k(a
0
d(t))(b
0
d(t))(c
0
d(t)), d(0) = 0.
1. Elige valores de los parametros tales que a
0
> b
0
> c
0
> 0.
2. Resuelve numericamente la ecuacion diferencial.
3. Que ocurre con la solucion si a
0
= b
0
o b
0
= c
0
?.
4. Y si a
0
= b
0
= c
0
?.
5. Establece la analoga con las reacciones
2A+B
k
D
y
3A
k
D.
6. Que cambia en lo anterior si suponemos unas relaciones estequiometricas en la reaccion de la forma
n
A
A+n
B
B +n
C
C
k
n
D
D ?.
Ejercicio 3 Consideremos una reaccion de primer orden autocataltica
A
k
B.
En dicha situacion la constante de proporcionalidad, al aplicar la Ley de Accion de Masas, verica que k = k([B]) =
k
0
+ [B] siendo una constante, usualmente peque na. Si > 0 se dice que B es un activador de la reaccion
mientras que es un inhibidor si < 0.
1. Obtener la ecuacion diferencial para las concentraciones de A y B y resolverlas supuesto que la concen-
tracion inicial de B es nula. Determinar cual es la velocidad maxima que alcanza la reaccion. Determinar la
concentracion nal de las sustancias.
dx
dt
= (k
0
+x)(a
0
x)
con dato inicial x(0) = 0.
2. Integrar la ecuacion diferencial de la velocidad de reaccion de la siguiente reaccion incompleta
dx
dt
= 3(2 x)(1 x) (1 +x)(2 +x)
con dato inicial x(0) = 0. Para que valor de la variable x cesa esta su variacion?.
Ejemplo 2 Considera el sistema de ecuaciones diferenciales
_
x

= x + 7y 10x
2
y
y

= 3x 8y +xy
x(0) = 1
y(0) = 0,
en el intervalo, [0, 3]
1. Escribir un chero tipo funcion, con el nombre funcsistema1.m, para la funcion de este sistema de ecua-
ciones diferenciales
function f=funcsistema1(t,x)
f=zeros(2,1);
f(1)=x+ 7*y - 10*x.^2.* y;
f(2)=-3*x -8*y + x.*y;
2. Usar, en la lineas de comandos, la rutina ode45 de Matlab para resolver la ecuacion numericamente. Dibuja
la graca de la solucion aproximada. En concreto, escribe
>> [ t , u]=ode45 ( @f uncsi stema1 , [ 0 , 3 ] , [ 1 ; 0 ] ) ;
Ejercicio 4 La enzima [E] reacciona reversiblemente con el sustrato [S] y forma el complejo [C]. A continuacion
el complejo se descompone, en una reaccion irreversible, en un producto [P] y la enzima original
E +S
k
1

k
1
C
k
2
E +P.
La ley de accion de masas para las concentraciones e(t) = [E], s(t) = [S], c(t) = [C], p(t) = [P], sera
e

(t) = k
1
e(t)s(t) +k
1
c(t) +k
2
c(t) (2)
s

(t) = k
1
e(t)s(t) +k
1
c(t) (3)
c

(t) = k
1
e(t)s(t) k
1
c(t) k
2
c(t) (4)
p

(t) = k
2
c(t) (5)
con las condiciones iniciales
e(0) = e
0
, s(0) = s
0
, c(0) = p(0) = 0.
1. Demostrar que la suma de concentraciones
e(t) +c(t) = e
0
(6)
es constante. Elimina la variable e(t) en las ecuaciones (3)-(4).
2. Dando valores iniciales, resolver numericamente las ecuaciones (3)-(4).
3. Estado pseudo-estacionario. En los experimentos en laboratorio, s
0
e
0
. Michaelis y Menten en 1913
observaron que en estas circunstancias se espera que, despues de un corto intervalo de tiempo, haya un
balance entre la formacion del complejo [C] por la union de enzima y sustrato y la degradacion del complejo.
Debido a que hay una gran cantidad de moleculas de sustrato s
0
e
0
, este balance se alcanzara antes de sea
perceptible la transformacion de sustrato en producto. La formacion de producto se puede llevar a cabo con
la hipotesis c

(t) = 0 es decir
e(t)s(t) = K
m
c(t), K
m
:=
k
1
+k
2
k
1
, (7)
K
m
es la constante de Michaelis. Esta ecuacion se conoce como la hipotesis del estado pseudo-estacionario,
c(t) esta ajustada a los valores instantaneos de e(t) y de s(t) y estos valores cambian lentamente con el tiempo.
Bajo la hipotesis pseudo-estacionaria, sustituyendo (6) en (7), comprueba que se puede escribir
c(t) =
e
0
s(t)
K
m
+s(t)
en consecuencia
s

(t) =
k
2
e
0
s(t)
K
m
+s(t)
, s(0) = s
0
. (8)
Resuelve numericamente este PVI.
4. Compara los resultados con el caso anterior.
Departamento de Matematica Aplicada
C

ALCULO COMPUTACIONAL.
Licenciatura en Qumica (Curso 2008-09)
Archivos de ordenes. Programacion. Practica 9
1. Introduccion
Hasta ahora, todos los comandos que hemos estudiado en MatLab, los hemos ido escribiendo en el entorno de
trabajo del programa, es decir, a continuacion de >>. Sin embargo, en muchas ocasiones resulta necesario ejecutar
varios o muchos comandos encadenados y, quizas, repetirlos varias veces. Para esto resulta util guardarlos en un
chero, de manera que se puedan ejecutar con solo una orden, esto es, queremos construir un programa, que no
es otra cosa que un conjunto de comandos encadenados.
La manera de guardar comandos y, por tanto, de construir programas que ejecuten determinadas rutinas consiste
en crear lo que se llaman cheros-M.
Para crear un chero-M necesitamos abrir un editor de texto (como el Bloc de Notas de Windows) y escribir
los comandos. Despues, ese chero de texto debe guardarse con la extension .m. La version 5 (Student Edition)
incorpora un editor de Ficheros-M. Basta abrir la opcion File New M-File de la barra superior.
Vamos a ver algunos ejemplos de cheros-M:
Ejemplo 1 .
a) Vamos a elaborar un programa para calcular S(n) = 1 +
1
2
2
+
1
3
2
+ +
1
n
2
.
Creamos el siguiente chero:
function S=suma(n)
% Fichero para la funcion suma
% de los inversos de los cuadrados
N=1:n; NN=N.^2; Ninv=1./NN; S=sum(Ninv);
Y lo guardamos con el nombre suma.m. Ahora lo podemos utilizar para calcular valores de la suma
>>suma(100)
ans =
1.6350
Ejercicio 1 Elaborar un programa para calcular la integral denida de una funcion,
_
b
a
f(x)dx, por el metodo del
punto medio: si se divide [a, b] en n subintervalos de longitud
x =
b a
N
,
la integral aproximada es
I =
N

i=1
f(x
i
)x
donde x
i
es el punto medio de cada subintervalo. Los datos de entrada seran la funcion f, introducida como un
chero f.m, los extremos a, b del intervalo y el n umero N de sumandos. El nombre del chero es miptomedio.m
Ejemplo 2 a) Elabora el chero func1.m para la funcion sen(x)/x, es decir:
function y=func1(x)
% Fichero para la funcion sen(x)/x
y=sin(x)./x;
b) Teniendo en cuenta los datos de entrada del programa miptomedio, es decir:
>> f=@func1 ; a=0; b=1; N=1000;
calcula:
_
1
0
sen(x)
x
dx, es decir:
>> I=miptomedio ( @func1 , 0 , 1 , 1000)
Ejercicio 2 Calcula:
a)
_
/4
0
tan(x)
x
dx b)
_

0
sen(x
2
) dx c)
1

_
N
N
e
x
2
dx d)
_
1
0
5x
3
+ 2
1 +x +x
2
dx
2. Control de ujo. Bucles
Cuando los comandos los ejecutamos en el entorno de trabajo, las instrucciones se van realizando en el orden
en el que se van introduciendo. Pero, dentro de un programa, el orden de su ejecucion, el ujo, se puede alterar
utilizando algunas instrucciones.
Estas instrucciones pueden ser: condicionales, en las que las secuencias de ordenes deben evaluarse basandose
en alguna condicion y, bucles o instrucciones iterativas, mediante las cuales una o un grupo de ordenes se ejecutan
varias veces.
Condicionales Vamos a ir viendo las diferentes posibilidades mediante ejemplos sencillos:
Estructura if simple. Su sintaxis es
if condicional
comando
end
El comando se ejecuta si todos los elementos en condicional son verdaderos. Por ejemplo,
>>a=3;
if a>2
b=a+5
end
Mientras que si escribimos
>>a=3;
if a==2
b=a+5
end
no obtenemos respuesta.
Estructura if compuesta,
if condicional
comando primero
else
comando segundo
end
Sirve para los casos en los que existen dos alternativas. Si se cumple condicional, se ejecuta comando primero,
pero si es de otra forma, se ejecutara comando segundo. Por ejemplo,
>>a=n;
if a>5
b=a+5
else
b=a-1
end
En la secuencia anterior de ordenes, si n es mayor que 5, el valor de b sera a+5, de otra forma, sera a-1.
Estructura if-else-if. Se puede utilizar cuando hay mas de dos condiciones que pueden cumplirse. Se escribe
if condicional primero
comando primero
elseif condicional segundo
comando segundo
elseif condiccional tercero
comando tercero
...... else
comando final
end
En este caso el comando final se ejecuta, si no se han realizado ninguno de los anteriores. Por ejemplo,
if n<10
x=b.^2
elseif n<20
x=b.^3
elseif n>30
x=b.^4
else
x=b
end
Bucles Como se dijo mas arriba, los bucles se utilizan, dentro de un programa, para que un comando o grupo de
comandos se ejecute varias veces. Existen dos tipos de bucles que se pueden hacer en MatLab, los bucles for y los
bucles while.
Un ejemplo de bucle for
for i=1:10
a(i)=i+2;
end
Que producira el vector
>>a
a =
3 4 5 6 7 8 9 10 11 12
Notese que ahora hay que poner ; detras del comando que se ha de ejecutar si no queremos ver todos los calculos
en la pantalla.
Por supuesto, lo anterior se podra haber obtenido simplemente escribiendo
>>a=3:12
Los bucles, dentro de un programa, consumen tiempo y memoria del ordenador, en la medida de lo posible, hay
que tender a evitarlos. Aunque en ocasiones puede que no haya, o no se nos ocurra, otra posibilidad.
El bucle de tipo for ejecuta un conjunto de instrucciones un n umero de veces que nosotros conocemos a priori.
Pero esto puede no ser as, en este caso habra que utilizar un bucle de tipo while. Su sintaxis es
while condicional
comando
end
Que signica que, mientras se cumpla condicional, se ejecutara comando, cuando deje de cumplirse condicional,
comando dejara de ejecutarse.
3. Metodo de Newton
El metodo de Newton sirve para aproximar ceros de funciones f(x) = 0. Las funciones f pueden ser de varias
variables f : IR
k
IR
k
. Teniendo en cuenta el desarrollo en serie de Taylor de orden 1 podemos escribir
f(x
n+1
) = f(x
n
) +Df(x
n
)(x
n+1
x
n
) +t.o.s.
donde t.o.s. representa a los terminos de orden superior, y suponiendo que f(x
n+1
) 0 tendramos Df(x
n
)(x
n

x
n+1
) f(x
n
). El metodo de Newton-Raphson es un metodo iterativo que se puede describir como:
Dado un valor inicial x = x
0
_
resolver Df(x
n
)w = f(x
n
), n 0
calcular x
n+1
= x
n
w, n 0.
De esta forma si x
n
converge cuando n a x, el lmite es una solucion del sistema no lineal f(x) = 0. Observese
que la matriz Df(x
n
) viene dada por Df(x) =
_
f
i
(x)
x
j
_
i,j
Ejemplo 3 Vamos a escribir en un chero instrucciones de MATLAB de forma que, utilizando el Algoritmo de
Newton, calculemos aproximaciones a un cero de la funcion f(x) = x x
3
.
function x=minewton(f,df,x0,TOL)
% metodo de Newton para ecuaciones, dadas f y su derivada df
% variables de entrada: f,df ficheros .m
% x0 dato inicial vector columna
% TOL tolerancia error
% variables de salida: x aproximacion al punto fijo en i=contador iteraciones
ERR=TOL+1; x=x0; contador=0; while ERR>TOL
contador=contador+1;
DF=feval(df,x);
F=feval(f,x);
w= DF\F;
ERR=norm(w,inf);
x=x-w;
if contador>1000
break
disp(excede numero maximo de iteraciones)
end
end
Llamad a este chero minewton.m. Ahora podemos ejecutarlo. Para ello necesitaremos en primer lugar denir
un chero .m con la correspondiente funcion f y otro con su derivada, df, como una matriz si f fuera de varias
variables. Para ello escribimos en dos cheros:
function F=fun1(x)
%
F=x-x.^3;
function DF=dfun1(x)
%
DF=1-3*x.^2;
y los guardamos con el nombre fun1.m y dfun1.m respectivamente. Esto nos permitira evaluar la funcion y su
derivada para cada x. A continuacion escribimos las variables de entrada en la linea de comandos
>>TOL=1e-10;
>>x0=-2;
y ahora llamamos al programa minewton.m desde la linea de comandos
>> x=minewton( @fun1 , @dfun1 , x0 ,TOL) ;
Ejercicio 3 Calcule los ceros de las siguientes funciones utilizando el metodo de Newton
i) f(x) = x x
2
,
ii) f(x) = xe
x
+ 1,
iii) f(x
1
, x
2
) = (x
1
x
2
2
, sin(x
1
) 0,7x
2
).

You might also like