You are on page 1of 16

Unidad 2

Conceptos bsicos II

OBJETIVOS:
1. Aprender tcnicas de programacin bsicas.

2. Usar herramientas de presentacin de resultados ms sofisticadas.

3. Conocer los fundamentos del tratamiento de ficheros de datos en Matlab


ORIENTACIONES:
En esta segunda unidad seguiremos avanzando en la utilizacin de Matlab y en el
aprendizaje de tcnicas de progracin que sern aplicables a otros lenguajes (con las
adaptaciones necesarias de la sintaxis, naturalmente).

En principio dedicaremos cuatro sesiones (12 horas) a este tema:


Lunes 2 de octubre:
Funciones intrnsecas y annimas.
Funciones externas o de script (subrutinas).
Ejemplos de funciones de script: derivacin e integracin.
Mircoles 4 de octubre:
Aplicacin fsica: Integracin de las ecuaciones del movimiento.
Aplicacin fsica: Clculo de campos y potenciales elctricos.
Importacin y exportacin de datos en Matlab.
Lunes 23 de octubre:
Variables lgicas. Operaciones con variables lgicas.
Operadores relacionales.
Los bloques for, if y while.
Mircoles 25 de octubre:
Representacin grfica avanzada.
Campos escalares y vectoriales.
Representacin grfica de campos escalares y vectoriales.

35
36 UNIDAD 2. CONCEPTOS BSICOS II

2.1 Funciones en Matlab


2.1.a Funciones intrnsecas
Como hemos tenido oportunidad de comprobar, Matlab tiene un buen nmero de funciones
predefinidas, denominadas funciones intrnsecas. Algunas ya conocidas son:
cos(x) % Proporciona el coseno de x
linspace(xin,xfin,N) % Proporciona un vector fila de elementos equiespaciados,
siendo el primero xin y el ltimo xfin
floor(x) % Proporciona el entero ms cercano a x por defecto.
fix(x) % Elimina la parte decimal de x (i.e. proporciona la parte entera de x).
mod(x,y) % Efectua la operacin mdulo definida como: x - y .* floor(x ./ y).
Ej. mod(34,7) = 6.
rem(x,y) % Evalua el resto (reminder) de la divisin entera x/y, esto es, x - y .*
fix(x ./ y). Si x e y son positivos no hay diferencia con mod.
y otras nuevas son (investguelas usando help y tambin doc):
max(x,y) % Si x e y son reales, devuelve el mayor. Si son complejos, el de mayor mdulo,
y en caso de empate, el de mayor argumento (definido en el intervalo ( ]).
min(x,y) % Igual que lo anterior, pero considerando el menor.
max(C) % Devuelve la mayor componente del vector C
min(C) % Anlogo al anterior.
sort(C) % Ordena de menor a mayor los elementos del vector C.
diff(C) % Si C es un vector, y DC = diff(C), entonces:
% numel(DC) = numel(C)-1
% DC(k) = C(k+1)-C(k)

As, adems de por su nombre, una funcin queda caracterizada por:


a) El nmero de argumentos de la funcin (2 para mod, 3 para linspace, 1 para cos, ...).
b) Las dimensiones y clase de cada uno de los argumentos (input).
c) El resultado (output) de la funcin. Generalmente es un nico objeto pero, por ejemplo,
dependiendo de la sintaxis max(A), min(A) y sort(A) pueden generar dos.

Matlab tiene una lgica interna definida. As, cos es una funcin cuyo argumento habit-
ual es un escalar; pero si A es una matriz, cos(A) aplica la funcin a cada uno de los elementos
de A por separado y devuelve el resultado en un objeto de la mismas dimensiones que A. Lo
mismo ocurre con las funciones con dos argumentos (mod, rem, max(x,y), ...). Por ejemplo,
si A y B son dos matrices con igual dimensin , mod(A,B) proprociona una matriz
cuyo elemento es mod( ). A su vez, si A es una matriz y b un nmero, min(b,A)
devuelve una matriz con las dimensiones de A tal que su elemento es min( ).
2.1. FUNCIONES EN MATLAB 37

Si el argumento natural es un vector, la funcin actuando sobre una matriz efecta


la operacin sobre cada vector columna, devolviendo el(los) resultado(s) en un(os) vector(es)
fila (por ejemplo, las funciones max(A), sum, cumprod). Si queremos que la operacin se
haga sobre los vectores fila, suele bastar aadir 2 como segundo argumento (sum(A,2), por
ejemplo). Sin embargo, a veces no funciona. Por ejemplo, para max lo que habra que escribir
es max(A,[],2). Ello es debido a que max(A,2), devuelve una matriz de igual dimensin que
la de A en la que cada elemento es max( 2). Algo parecido ocurre con diff, ya que
de acuerdo con la sintaxis de Matlab, diff(A,2) = diff(diff(A)).
Al igual que una funcin puede cambiar su regla de actuacin dependiendo del nmero de
argumentos, esto tambin puede ocurrir en funcin del nmero de objetos resultado que solicita.
Por ejemplo, la funcin max(C) puede proporcionar dos objetos: la mayor componente C y su
ndice (lugar). Para guardar los dos debemos proceder como sigue:
C = [2.1 , 4.7 , 6.2 , 1.3] ;
[maxC , ind] = max(C) ;
As maxC contiene el mximo de C (primer objeto resultado) e ind el ndice correspondiente
(segundo objeto resultado). Esto es, maxC = 6.2 e ind = 3. Si escribimos slo maxC = max(C),
la informacin (valiosa) contenida en el segundo objeto no se almacena.
Cuando se llama a una funcin con menos argumentos de los que le son propios o con un
argumento absurdo, Matlab intenta solucionar el problema considerando valores por defecto
de los argumentos ausentes o arreglando los argumntos errneos (a veces de manera no muy
obvia). De no ser posible, dar un mensaje de error. Por ejemplo:
linspace(xmin,xmax) % Considera por defecto 100 elementos en la lista.
linspace(xmin,xmax,45.24) % Considera que el nmero de elementos es 45.
linspace(xmin,xmax,hola) % Devuelve un mensaje de error

Puesto que la sintaxis de algunas funciones puede ser complicada, no debe invocarse una
funcin de manera extica sin saber las consecuencias. As, es mejor dominar pocas
instrucciones bsicas que conocer superficialmente muchas instrucciones. De hecho,
bastantes funciones son atajos de un conjunto de instrucciones fcilmente programables.

EJERCICIO 2.1.a
Trabajando en el script ejer21a.m:
1. Sea C = rand(1,5). Indique la clase y dimensin de las variables DC, SC, IC definidas
mediante las rdenes DC = diff(C); [SC,IC] = sort(C);
2. Sea ahora A = rand(5). Indique la clase y dimensin de las variables bot, top , inx
definidas mediante las rdenes bot = min(A) ; [top , inx] = max(A)
3. Muestre qu diferencia hay entre max(max(A)) y max(A(:)).
38 UNIDAD 2. CONCEPTOS BSICOS II

2.1.b Funciones annimas


Adems de las funciones intrnsecas, podemos usar funciones construidas por nosotros. El
primer tipo de estas funciones de usuario es el de las funciones annimas, que se definen
y utilizan dentro de un script o en la propia lnea de comandos, y calculan un nico objeto. La
sintaxis general para definir una funcin annima es:
nomfun =@(arg1,arg2,...,argN) expresion
donde nomfun es el nombre de la funcin, argk es un smbolo para indicar el argumento -simo
de la funcin, y expresion es una nica expresin Matlab que indica la regla de actuacin
descrita en trminos de arg1,arg2,... Por ejemplo, para definir la funcin lorentziana
1
L () = (2.1)
+ 2
2

debemos escribir
lor =@(x,a) (a./pi)./(x.^2 + a.^2) ;
(el ; es opcional, claro). A partir de este momento, la funcin queda guardada en el espacio
de trabajo para su uso posterior, utilizndose como cualquier otra funcin intrnseca (en este
caso, con dos argumentos o inputs). De hecho, el escribir ./ y .^ nos permite en este ejemplo
que los argumentos de lor puedan ser matrices y/o escalares, siendo el resultado una matriz si
la operacin as resulta.
No hay que preocuparse por los smbolos que escojamos para definir las variables de una
funcin annima. Por ejemplo, aunque a sea ya una variable con un cierto valor, en la lnea
en la que se define la funcin annima a representa el segundo argumento de la funcin. As,
si tenemos
a = 3 ;
lor = @(x,a) (a./pi)./(x.^2 + a.^2) ;
hlo = @(x) (a./pi)./(x.^2 + a.^2) ;
la funcin lor es la que hemos definido anteriormente, pero hlo() = (3)(2 + 9).
Adems, como las funciones annimas se guardan en el espacio de trabajo como si fueran
variables, aunque luego borremos la variable a no pasar nada con la funcin hlo. As, para
borrar la funcin annima nomfun basta con la orden clear nomfun. Obviamente, si sobre-
scribimos nomfun, la funcin original desaparece.

EJERCICIO 2.1.b
Trabajando en el script ejer21b.m, defina una funcin annima, fano21b, con dos argumentos,
x e y, tal que el resultado sea la matriz
!
x y x y
x + y xy
Investigue cul es el resultado de la funcin si los argumentos son dos matrices 2 3.
2.1. FUNCIONES EN MATLAB 39

Una ventaja de las funciones annimas es que nos permiten representar grficamente fun-
ciones matemticas sin necesidad de crear explcitamente un array para los valores de la
funcin. Por ejemplo, si queremos representar en la misma figura las funciones gaussianas

3 exp(32 2 ) y exp(2 ) en el intervalo [3 3] podramos escribir este script:
close all
X = -3:0.01:3 ;
spi = sqrt(pi) ;
fungau = @(x,a) (a.*exp(-(a.*x).^2)./spi) ;
figure(1)
hold on
title(Funciones gaussianas) ;
plot(X,fungau(X,3),X,fungau(X,1))
legend(alpha = 3,alpha = 1) ;
que es completamente equivalente a
close all
X = -3:0.01:3 ;
spi = sqrt(pi) ;
a = 3 ;
F3 = (a.*exp(-(a.*X).^2)./spi) ;
a = 1 ;
F1 = (a.*exp(-(a.*X).^2)./spi) ;
figure(1)
hold on
title(Funciones gaussianas) ;
plot(X,F3,X,F1)
legend(alpha = 3,alpha = 1) ;
La diferencia conceptual radica en que fungau es una funcin, cuyos argumentos son nmeros
reales arbitrarios mientras que F1 y F3 son vectores fila, cuyo argumento es un nmero
natural: el valor del ndice.
Que Matlab trate las funciones annimas como si fueran variables puede parecer absurdo,
pero permite que una funcin annima pueda ser el input de otra funcin. Por ejemplo, la
funcin annima cuadfun con dos argumentos definida como
cuadfun =@(fun,x) fun(x).^2 ;
proporciona el valor de fun2 (), siempre y cuando fun sea una funcin con un argumento. As,
cuadfun(hlo,2) y hlo(2).^2 son rdenes equivalentes. En este sentido, para que una funcin
intrnseca sea el input de otra funcin debemos anteponer @ al nombre de la funcin intrnseca.
As, cuadfun(@sin,pi/6) da como resultado sin2 (6) = 0.25.
40 UNIDAD 2. CONCEPTOS BSICOS II

EJERCICIO 2.1.c
Trabajando en el script ejer21c.m:
1. Construya la funcin annima de sintaxis trapecdx(G,dx), donde G es un array de
elementos y dx un escalar, tal que
!
X 1 +
trapecdx(G dx) =
=1
2

siendo el -simo elemento del array G. Esta funcin de script proporcionar entonces la
integral numrica por el mtodo de trapecios de una funcin () sobre un intervalo [ ],
siendo G el array que contiene los valores de () correspondientes a una discretizacin
de puntos equiespaciados del intervalo [ ] con equiespaciado .
2. Muestre en pantalla el valor de la integral
Z +5
1
exp(2 )
5
suponiendo = 11, = 101, = 1001, y = 10001.

EJERCICIO 2.1.d (El polinomio caracterstico de una matriz )


Sea A una matriz cuadrada . Definimos su polinomio caracterstico como la funcin

A () = det (A I)

donde I es la matriz unidad . No es difcil ver que tal funcin es un polinomio de grado
, de ah el nombre. Trabajando en el script ejer21d.m:
1. Construya la funcin annima de sintaxis polcar(A,x) que proporcione el valor del poli-
nomio caracterstico A () en funcin del valor de x. Sugerencia: la matriz unidad
se puede construir mediante la orden diag(ones(1,N)).
2. Sea la matriz B = magic(3). Represente su polinomio caracterstico en el intervalo
[10 20]. Compruebe que B () tiene tres ceros, que se denominan valores propios o
autovalores de la matriz.

Las funciones annimas tienen una utilidad muy concreta: nos sirven simplemente para
redefinir el nombre de una instruccin ms compleja pero, al quedar almacenada en el es-
pacio de trabajo (workspace), la funcin annima desaparece bien al borrar los contenidos
del workspace (clear all) o bien al salir de Matlab (exit). Mucho ms potentes son las
funciones de usuario externas, que tienen las mismas funcionalidades y propiedades que una
funcin intrnseca de Matlab.
2.1. FUNCIONES EN MATLAB 41

2.1.c Funciones externas o de script


Una funcin externa o de script es un conjunto de instrucciones que se invocan con una
nica orden desde un script o la ventana de comandos. Cada funcin de script debe estar
construida en un archivo .m almacenado bien en el directorio en el que estamos trabajando o
bien en un directorio del path (esto es, en un directorio accesible por Matlab). Como una
funcin externa puede tener objetos resultado (varios outputs) y argumentos (inputs), la
sintaxis general para su utilizacin ser:

[out1,out2,....,outN] = myfunc(inp1,inp2,...,inpM) ;

donde myfunc es el nombre de la funcin; out1,...,outN son las variables en las que se
almacenarn los outputs de la funcin; mientras que inp1,...,impM son los valores de las
variables que sirven de input de la funcin. Vemos as que las funciones externas funcionan
exactamente igual que la funciones intrnsecas, a diferencia de las funciones annimas que
nicamente proporcionan un output resultado de una nica operacin.
Las instrucciones que se realizan al ejecutar la funcin myfunc se encontarn en un fichero
myfunc.m cuya estructura es obligatoriamente la siguiente
% Comentarios generales (tantas lineas como se desee)
% Estos comentarios generales aparecen al teclar: help myfunc
function [out1,out2,...,outN] = myfunc(inp1,inp2,...,inpM)

end
Al igual que ocurra en la definicin de una funcin annima, las etiquetas que usemos en el
fichero myfunc.m son irrelevantes. Adems, las operaciones que realiza la funcin de script
no se ven reflejadas en el espacio de trabajo. Esto es, si dentro del conjunto de instrucciones
creamos nuevas variables estas quedarn ocultas y no interferirn con las ya existentes.

Veamos un primer ejemplo. De acuerdo con la regla de Simpson, la integral definida de


una funcin () entre y se puede obtener a partir de una discretizacin equiespaciada del
intervalo [ ] con un nmero impar de puntos de la siguiente manera
Z

() ' [(1 ) + 4(2 ) + 2(3 ) + 4(4 ) + + 2(2 ) + 4(1 ) + ( )]
3
(2.2)
dond es el -simo elemento del array linspace(a,b,N) y = 1 = ()( 1).
Una funcin de script que proporciona la integral Simpson de una funcin genrica de nombre
fun entre y sera (puede descargarla desde moodle):
% ======================================================================
% function simpsonf()
% Integral definida de una funcion mediante el metodo de Simpson
42 UNIDAD 2. CONCEPTOS BSICOS II

% Uso: simp = simpsonf(fun,a,b,N)


% Inputs:
% fun: identificativo de la funcion integrando
% a,b: limites de integracion
% N: numero de puntos (si N es par se considera N+1)
% Output:
% simp: integral numerica mediante el metodo de Simpson
% ======================================================================
function simp = simpsonf(fun,a,b,N) % Un solo output (no hace falta corchete)
N = N+1-mod(N,2) ; % Se fuerza a que N sea impar
X = linspace(a,b,N) ; % Array con los valores de la variable independiente
dx = X(2)-X(1) ; % Espaciado
F = fun(X) ; % Array con los valores de la variable dependiente
simp = (F(1)+F(N)+4.*sum(F(2:2:N-1))+2.*sum(F(3:2:N-2))).*dx./3 ;
end
As, si queremos obtener numricamente la integral de sin() entre 0 y 2, discretizando el
intervalo [0 2] en 101 puntos, y almacenar el resultado en la variable intporsim, bastara
teclear desde la ventana de comandos
intporsim = simpsonf(@sin,0,pi/2,101) ; % Atencion al @ (sin es intrinseca)
siempre y cuando el fichero simpsonf.m est en el directorio de trabajo o en un directorio
accesible por Matlab (directorio del path). Observe que las etiquetas usadas para los inputs y
outputs en la construccin de la funcin no tienen porque ser las utilizadas al invocar (llamar
a) dicha funcin.

EJERCICIO 2.1.e (corresponde al Ejercicio 1.8.b del tema anterior)


Construya la funcin de script trapeciosf.m, con sintaxis de uso trapeciosf(fun,a,b,N)
que proporcione la integral definida de la funcin genrica de nombre fun entre y mediante
el mtodo de trapecios y considerando una discretizacin equiespaciada del intervalo [ ] en
puntos.
Trabajemos en lo que sigue en el script ejer21e.m. Como sabemos,
Z 2
cos() = 1
0

Consideremos la integracin numrica de cos() entre 0 y 2 mediante los mtodos del trapecio
y de Simpson con una discretizacin de puntos, siendo = 3 5 7 1001. Represente en
escala logartmica (de base 10) los valores absolutos del error cometido en cada mtodo frente
a y discuta el resultado. Sugerencia: use la orden loglog.
2.1. FUNCIONES EN MATLAB 43

Pensemos ahora en una funcin () definida en el intervalo [ ] pero con una discretizacin
de [ ] no equiespaciada. Sea X el array que contiene los valores discretizados de [ ] (nat-
uralmente, X(1) = a, X(end) = b) y G el array que contiene los valores correspondientes de
la funcin . Una manera sencilla (aunque mejorable) de evaluar numricamente la derivada
de es calcular 0 () por la derecha, 0 () por la izquierda, y promediar las derivadas por la
izquierda y la derecha para el resto de los valores de la variable independiente. La siguiente
funcin de script, derivada.m, cumple esta labor:1
% ==========================================================================
% function derivada()
% Derivada numerica de una funcion previamente discretizada
% Uso: DG = derivada(G,X)
% Inputs:
% X: Array fila con los valores de la variable independiente
% G: Matriz con los valores de la funcion
% Output:
% DG: Matriz con los valores de la derivada
% ==========================================================================
function DG = derivada(G,X)
N = numel(X) ; % Numero de puntos
DG = 0.*G ; % Prealocacion
DG(:,1) = (G(:,2)-G(:,1))./(X(2)-X(1)) ; % Derivada en X(1) por la der.
DG(:,N) = (G(:,N)-G(:,N-1))./(X(N)-X(N-1)) ; % Derivada en X(N) por la izq.
for k=2:(N-1)
dizq = (G(:,k)-G(:,k-1))./(X(k)-X(k-1)) ; % Derivada por la izquierda
dder = (G(:,k+1)-G(:,k))./(X(k+1)-X(k)) ; % Derivada por la derecha
DG(:,k) = (dizq+dder)./2 ; % Promedio de las derivadas
end
end
Ntese que si G es un array fila, G(:,k) y G(k) es exactamente lo mismo. Ahora bien, por
qu cree que hemos escrito G(:,k)?

1
Tambin servira (ntense los usos de diff y de ./, nada triviales):
function DG = derivada(G,X)
N = numel(X) ;
DG = 0.*G ; % Prealocacion
CCF = diff(G,[],2)./diff(X) ;
DG(:,1) = CCF(:,1) ;
DG(:,N) = CCF(:,N-1) ;
DG(:,2:N-1) = (CCF(:,1:N-2)+CCF(:,2:N-1))./2 ;
end
44 UNIDAD 2. CONCEPTOS BSICOS II

Anlogamente, el clculo de la funcin primitiva


Z
G() = () (2.3)

mediante el mtodo de trapecios puede implementarse en la funcin de script primitiva.m:


% ========================================================================
% function primitiva()
% Calculo (por trapecios) de la primitiva de una funcion discretizada
% Uso: PG = primitiva(G,X)
% Inputs:
% X: Array fila con los valores de la variable independiente
% G: Matriz con los valores de la funcion
% Output:
% PG: Matriz con los valores de la primitiva
% ========================================================================
function PG = primitiva(G,X)
N = numel(X) ; % Numero de puntos
PG = 0.*G ; % Prealocacion
for k=2:N
atrap = (G(:,k)+G(:,k-1)).*(X(k)-X(k-1))./2 ; % Area del nuevo trapecio
PG(:,k) = PG(:,k-1) + atrap ;
end
end

EJERCICIO 2.1.f
Consideremos el intervalo [0 10] discretizado en el array de 101 elementos
X = [0,logspace(-4,1,100)] ; % Notese la construccin
y la funcin gaussiana () = 12 exp(2 ). Trabajando en el script ejer21f.m y usando
las funciones externas derivada.m y primitiva.m, obtenga la derivada, 0 (), y la primitiva,
G(), de la funcin () en el intervalo [0 10]. Represente grficamente las funciones (),
0 (), y G() en una misma figura.

Si la funcin () se evala sobre una discretizacin equiespaciada de la variable podemos


calcular 0 () usando las expresiones que vimos en la unidad anterior. En este caso, es preferible
construir una nueva funcin cuyos inputs sean los valores de la funcin y el espaciado . La
funcin de script derivasdx.m realiza tal valor y, adems, calcula la segunda derivada:
2.1. FUNCIONES EN MATLAB 45

% ===================================================================
% function derivasdx()
% 1a y 2a derivadas de una funcion previamente discretizada
% Se presupone una discretizacion equiespaciada de la variable indep.
% Uso : [D1F,D2F] = derivasdx(F,dx)
% Inputs:
% F : Matriz que contiene los valores de la funcion.
% dx : espaciado entre los valores de la variable independiente
% Outputs:
% D1F : Matriz con los valores de la primera derivada
% D2F : Matriz con los valores de la segunda derivada
% ===================================================================
function [D1F,D2F] = derivasdx(F,dx)
[D,N] = size(F) ; % N: numero de puntos, D: componentes de F
tdx = 2*dx ; % Doble del espaciado
sdx = dx*dx ; % Cuadrado del espaciado
D1F = 0.*F ; D2F = 0.*F ; % Prealocaciones
for k = 2:N-1
D1F(:,k) = (F(:,k+1)-F(:,k-1))./tdx ; % 1a derivada
D2F(:,k) = (F(:,k+1)+F(:,k-1)-2*F(:,k))./sdx ; % 2a derivada
end
D1F(:,1) = (4.*F(:,2)-F(:,3)-3.*F(:,1))./tdx ; % 1a der. en X(1)
D2F(:,1) = D2F(:,2) ; % 2a der. en X(1)
D1F(:,N) = (3.*F(:,N)+F(:,N-2)-4.*F(:,N-1))./tdx ; % 1a der. en X(N)
D2F(:,N) = D2F(:,N-1) ; % 2a der. en X(N)
end

EJERCICIO 2.1.g (corresponde al Ejercicio 1.8.a del tema anterior)


Consideremos la funcin gaussiana () = 12 exp(2 ) y trabajemos en el script ejer21g.m.
1. Construya las funciones annimas gauss(x), dgauss(x), ddgauss(x) correspondientes a
las expresiones analticas de las funciones (), 0 (), y 00 (), respectivamente.
2. Considere el intervalo [4 4] discretizado de manera equiespaciada con = 01.
Almacene los valores correspondientes de la variable independiente en el array fila X y
los de () en el array fila G. Obtenga numricamente los valores de la primera y de la
segunda derivada de la funcin (), almacenando tales valores en los arrays DG y DDG,
respectivamente.
3. Genere sendas figuras en las que se comparen los resultados numrico y exacto tanto para
la primera como para la segunda derivada de la funcin ().
46 UNIDAD 2. CONCEPTOS BSICOS II

2.2 Integracin de las ecuaciones del movimiento I


Consideremos una partcula de masa cuya aceleracin () es conocida para cualquier
instante (esto es, la fuerza () que acta sobre la misma es un dato del problema para
cualquier instante de tiempo). Entonces, si conocemos las condiciones iniciales

in = (in ) ; in = (in ) (2.4)

esto es, la posicin y velocidad de la partcula en un tiempo in , entonces:


Z Z
() = in + ( ) ; () = in + ( ) (2.5)
in in

y el clculo de las funciones primitivas se puede hacer usando, por ejemplo, una integracin por
trapecios.
Si la discretizacin temporal es equiespaciada, el parmetro crtico de convergencia es
el paso de tiempo . Evidentemente, cuanto menor sea menor el error en los clculos. Ahora
bien, hay que tener cuidado ya que mientras un valor grande de nos puede dar un resultado
mal convergido, un valor excesivamente pequeo de puede resultan en un desperdicio de
tiempo de clculo. El siguiente ejercicio ilustra el procedimiento.

EJERCICIO 2.2.a (corresponde al Ejercicio 1.9.a de la unidad anterior)


Una partcula puntual se mueve sobre el plano sometida a una fuerza dependiente del
tiempo tal que su aceleracin es
2 2
() = 4 +
() + 1

donde , , son constantes con las dimensiones fsicas adecuadas. En el instante inicial
(in = 0) la partcula se encuentra en el origen de coordenadas y su velocidad en ese instante
es (in ) = in + in .

1. Represente en funcin del tiempo las componentes de la aceleracin en el intervalo [in fin ]
2. Obtenga numricamente y represente en funcin del tiempo las componentes de la veloci-
dad en el mismo intervalo temporal.
3. Obtenga numricamente y represente en funcin del tiempo las componentes de la posicin
en el mismo intervalo temporal. Muestre el valor de la posicin cuando = fin .
4. Represente la trayectoria de la partcula en el intervalo [in fin ]

Datos: = 2 ms2 = 1 ms2 = 05 s1 , = 3 ms, = 1 ms, fin = 10 s


Sugerencia: tome del orden de 0.01 s.
2.2. INTEGRACIN DE LAS ECUACIONES DEL MOVIMIENTO I 47

Consideremos una partcula cuya posicin en un instante de tiempo es (). El espacio


neto recorrido por la partcula entre los instantes in y fin (fin in ) es la longitud de la
curva () entre los puntos (in ) y (fin ). Tal longitud es
Z fin Z fin
= | ()| = |()| (2.6)
in in

donde hemos usado que () = () y que 0. Por otro lado, el trabajo efectuado por
la fuerza que acta sobre la partcula entre los instantes in y fin es
Z fin Z fin h i Z fin
=
() () =
() () = [() ()] (2.7)
in in in

donde es la masa de la partcula. En consecuencia,

P() = () () = () () (2.8)

es la potencia desarrollada por la fuerza en el instante .

EJERCICIO 2.2.b
Desde el borde de la azotea de un edificio de altura = 1962 m lanzamos horizontalmente
en el instante = 0 una piedra de masa = 500 g con velocidad in = 5 ms1 . Sea
la direccin horizontal y la vertical (sentido positivo hacia arriba). La aceleracin de la
partcula es, entonces, = , con = 981 ms2 . Nuestro objetivo en este problema es
analizar numricamente el movimiento de la partcula en el intervalo temporal [0 fin ] s, con
fin = 2 s. Trabajando en el script ejer22b.m:

1. Por integracin numrica, obtenga y almacene convenientemente la posicion () y la


velocidad () de la partcula. Muestre en pantalla la posicin y la velocidad de la partcula
en el instante = fin y represente en una figura la trayectoria que ha descrito la piedra
durante el intervalo [0 fin ].
2. En una segunda figura, represente frente al tiempo la energa cintica de la partcula,
() = |()|2 2, la energa potencial, () = (), y la energa mecnica total
() = () + ().
3. Sea () el espacio neto recorrido por la partcula en el intervalo [0 ]. Represente en una
tercera figura () frente a para [0 fin ].
4. Finalmente, sea () el trabajo efectuado por la fuerza de la gravedad a lo largo del
intervalo (). Represente en una cuarta figura () frente al tiempo y tambin ()
(0).
48 UNIDAD 2. CONCEPTOS BSICOS II

Al integrar mediante el mtodo de trapecios las ecuaciones del movimiento lo que estamos
haciendo es lo siguiente. Supongamos que el intervalo temporal [in fin ] est discretizado en el
array [1 2 ] (obviamente 1 = in y = fin ), y sean , y la posicin, velocidad,
y aceleracin en el instante , respectivamente. Entonces, conocidas la posicin, velocidad, y
aceleracin en el instante y la aceleracin en el instante +1 , la posicin y la velocidad en el
instante +1 estn dadas por

+ +1 + +1
+1 ' + (+1 ) ; +1 ' + (+1 ) (2.9)
2 2

El problema es que muchas veces (de hecho, en la mayora) no conocemos el valor de la acel-
eracin en el instante +1 (por ejemplo, si la fuerza depende de la posicin o si existe una
fuerza de rozamiento dependiente de la velocidad). En otras palabras, el mtodo que acabamos
de ver no sirve si la aceleracin est dada por una funcin ( ).
Una primera manera de solventar el problema es efectuar una integracin de las ecuaciones
del movimiento suponiendo que en el intervalo temporal ( +1 ) el movimiento de la partcula
es uniformemente acelerado con aceleracin = ( ), esto es

1
+1 ' + (+1 ) ; +1 ' + (+1 ) + (+1 )2 (2.10)
2

Podemos anticipar que esta no es una manera ptima de integrar ecuaciones del movimiento y,
de hecho, en la Unidad 5 veremos mtodos ms depurados para abordar este tipo de situaciones.
Sin embargo, lo interesante de la aproximacin (2.10) es que nos permite obtener el estado
dinmico de la partcula en un instante dado a partir de sus propiedades exclusivamente en un
tiempo anterior.

EJERCICIO 2.2.c (El oscilador armnico I )


Una partcula se mueve en una dimensin bajo la accin de una fuerza recuperadora armnica
(es decir, que sigue la ley de Hooke). Si = 0 es la posicin de equilibrio, la aceleracin de la
partcula est dada por
= 20

donde 0 es la pulsacin o frecuencia angular. Supongamos que el instante in = 0 la partcula


est en el punto in = con velocidad nula. Usando el integrador (2.10) obtenga y represente
en sendas figuras frente al tiempo la posicin y la velocidad de la partcula en el intervalo
[in fin ]. Considere una discretizacin equiespaciada del intervalo temporal. En cada figura
superponga las grficas correspondientes a los resultados exactos () = cos(0 ) y () =
0 sin( 0 ).
Datos: 0 = 2 s2 , fin = 10 s.
2.3. CAMPOS Y POTENCIALES ELECTROSTTICOS 49

2.3 Campos y potenciales electrostticos


Como sabemos, el campo elctrico y el potencial electrosttico en un punto creado
por una carga situada en reposo en un punto estn dados por

) = c
( ) () = c
3 ( (2.11)
| | | |

donde c = (40 )1 ' 9 109 N m2 C2 es la constante de Coulomb. Como consecuencia, si


tenemos un conjunto de cargas 1 2 situadas en los puntos 1 2 , respectivamente,
el campo elctrico y el potencial electrosttico en un punto genrico estar dado por

X

X

) =
( c (

) (
) = c (2.12)
3
=1
|

| =1
|

|

Por otro lado, la energa electrosttica del conjunto de cargas puntuales est dada por
!
X X 1X
el = c = c (2.13)
=2 =1
|

| 2 6=
|

|

Fsicamente, el es el trabajo necesario para situar las cargas en sus posiciones respectivas
suponiendo que inicialmente estn separadas entre s una distancia infinita.

EJERCICIO 2.2.d
Consideremos un sistema de cargas 1 2 situadas en los puntos 1 2 . Imag-
inemos que los valores de las cargas estn almacenadas en el array fila Q (esto es, Q(n) = ),
mientras que las coordenadas de los puntos estn almacenadas en la matriz 3 RQ (es decir,
RQ(:,n) es el vector columna que contiene las coordenadas del punto ). De acuerdo con este
convenio:

1. Construya la funcin de script de sintaxis [Eel,Vel] = campopotencial(R,Q,RQ) que


proporcione las componentes del campo elctrico (vector columna Eel) y el valor del
potencial elctrico (escalar Vel) en el punto cuya coordenadas estn dadas en el vector
columna R.
2. Construya la funcin de script de sintaxis Uel = energiaelect(Q,RQ) que proporcione
la energa electrosttica del sistema de cargas.
3. Consideremos 11 cargas idnticas, de valor = 1 nC, situadas sobre la recta y
separadas entre s una distancia = 1 m. Situemos la carga central en el origen de
coordenadas. Evale y muestre en pantalla la energa electrosttica del sistema y evale
y represente las componentes del campo elctrico y el potencial elctrico sobre el segmento
que une los puntos (10 0) y (10 0). Trabaje en el script ejer22d.m
50 UNIDAD 2. CONCEPTOS BSICOS II

2.4 Importacin y exportacin de datos en Matlab


Matlab permite tratar datos (importacin y exportacin) de manera muy flexible, lo que
se traduce en una complejidad notable de las instrucciones correspondientes. Por ello no in-
tentaremos ser exhaustivos, limitndonos al uso de los comandos save y load. Como siempre,
si desea ms informacin le invitamos a que lea la (muy prolija) seccin Data Import and
Export de la documentacin. Ver que, por ejemplo, se pueden salvar e importar imgenes,
ficheros Excel, guardar datos en formatos especiales, etc. A su vez, la importacin de datos
desde ficheros *.mat, ascii o incluso desde hojas de clculo Excel se puede hacer tambin a
golpe de ratn usando el men Import data del entorno Matlab. Las desventajas son que
este tipo de manipulaciones no se pueden automatizar (de manera simple) y que nicamente
permiten trabajar con datos en aritmtica real.
Recordemos que para guardar variables y tambin funciones annimas en ficheros binarios
con extensin *.mat. las ordenes relevantes eran:
save nomfich.mat v1 v2 ... % Guarda v1,v2,... en el fichero nomfich.mat
save -append nomfich.mat s1 s2 fun1 ... % Aade s1,s2,fun1,...
% al fichero binario ya existente nomfich.mat
Si no se especifican los nombres de las variables o funciones, se guardan todos los contenidos del
espacio de trabajo. Ntese que si usamos save sin la etiqueta -append, los contenidos previos
de nomfich.mat se borran.
Para importar al espacio de trabajo las variables o funciones annimas previamente alma-
cenadas en el fichero nomfich.mat basta hacer:
load nomfich.mat v1 s1 ... % Importa al espacio de trabajo las variables v1, s1, ...
% almacenadas en el fichero nomfich.mat
De nuevo, si no se especifican las variables o funciones, se importarn todos los contenidos
almacenados. Finalmente:
whos -file nomfich.mat % Muestra el nombre de las variables y funciones almacenadas
% en nomfich.mat y sus caractersticas.

Por defecto, los ficheros *.mat son binarios, esto es, no es trivial editarlos a mano y a
priori estn restringidos a Matlab. Sin embargo, la orden save nos permite tambin guardar
valores de variables en un fichero de texto ascii, esto es, editable. Ello se hace aadiendo la
opcin -ascii al comando save. A su vez, con load se pueden almacenar en una variable
los datos numricos de un fichero ascii pero con una funcionalidad mucho ms limitada que la
correspondiente al modo binario. As:
save -ascii nomfich.dat v1 v2 ... % Guarda secuencialmente los valores de v1,v2,...
% en el fichero ascii nomfich.dat

load -ascii nomfich.dat % Genera la variable nomfich cuyo valor son los contenidos
% del fichero nomfich.dat

You might also like