1. Introducción 2. Archivos de tipo función

Anuncio
Departamento de Matemática Aplicada
CÁLCULO COMPUTACIONAL.
Licenciatura en Quı́mica (Curso 2005-06)
Archivos de órdenes. Programación. Práctica 8
1.
Introducción
Hasta ahora, todos los comandos que hemos estudiado en MatLab, los hemos ido escribiendo en el entorno de
trabajo del programa, es decir, a continuación de >>. Sin embargo, en muchas ocasiones resulta necesario ejecutar
varios o muchos comandos encadenados y, quizás, repetirlos varias veces. Para esto resulta útil guardarlos en un
fichero, de manera que se puedan ejecutar con sólo 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 ficheros-M.
Para crear un fichero-M necesitamos abrir un editor de texto (como el Bloc de Notas de Windows) y escribir
los comandos. Después, ese fichero de texto debe guardarse con la extensión .m. La versión 5 (Student Edition)
incorpora un editor de Ficheros-M. Basta abrir la opción File New M-File de la barra superior.
Vamos a ver algunos ejemplos de ficheros-M:
Ejemplo 1 Escribamos lo siguiente en el editor de MatLab y guardémoslo con el nombre graficaseno.m (Si se
utiliza el editor de MatLab no hace falta poner .m).
% m-fichero para pintar seno
x=linspace(0,2*pi,100);
y=sin(x);
plot(x,y)
Lo guardamos usando File Save As... con el nombre graficaseno. Si volvemos a MatLab y hacemos
>>graficaseno
nos aparecerá la ventana gráfica con el dibujo de la función seno en el intervalo [0, 2π].
Observaciones:
1.
Lo que se ha escrito en cada lı́nea detrás de % no forma parte del programa, son comentarios. Si hacemos
>>help graficaseno
aparecen precisamente esos comentarios.
2.
Si hacemos
>>type graficaseno
aparecerá en pantalla todo el programa escrito.
2.
Archivos de tipo función
Ejemplo 2 Vamos a hacer un programa que resuelva la ecuación de segundo grado ax 2 + bx + c = 0. En el editor
escribimos:
function [x1,x2]=ecuac2g(a,b,c)
%
%
%
%
Func. para resolver la ec. de
Segundo Grado
Input: coeficientes a,b,c
Output: soluciones x1, x2
29
x1=(-b+sqrt(b^2-4*a*c))/(2*a);
x2=(-b-sqrt(b^2-4*a*c))/(2*a);
Y lo guardamos con el nombre ecuac2g. Para ejecutarlo, escribimos
>>[x1,x2]=ecuac2g(1,-5,6)
x1 =
3
x2 =
2
Observaciones:
1.
El fichero ecuac2g es un archivo de tipo función porque incluye como primera palabra de la primera lı́nea el
comando function.
2.
La sintaxis de la primera lı́nea del programa es la siguiente: si a 1 , . . . , an son los argumentos de entrada y
x1 , . . . , xm son los argumentos de salida, escribimos:
function [x1,...,xm]=nombre(a1,...,an)
3.
El nombre de la función ha de coincidir con el nombre con el cual guardamos el fichero.
Los nombres que demos a las variables de salida son indiferentes, no tienen por qué coincidir con los que se han
utilizado dentro del programa. Ahora bien, dentro del programa, tanto las variables de entrada como las de salida
deben coincidir en todos los casos en los que sean utilizadas.
Ejemplo 3 Por supuesto los ficheros de tipo function también se pueden utilizar para crear funciones matemáticas
comunes. Por ejemplo, queremos definir un fichero que contenga a la función
h(x) = x sen(x)
Creamos el siguiente programa:
function y=h(x)
% Fichero para la func.
% h(x)=x.*sin(x)
y=x.*sin(x);
Y lo guardamos con el nombre h.m. Ahora lo podemos utilizar para calcular valores de la función
>>h(2)
ans =
1.8186
O para cualquier otra cosa, como dibujar su gráfica, sin más que hacer:
>>x=linspace(-20,20,100);
>>y=h(x);
>>plot(x,y)
30
Ejercicio 1 Hacer un programa para hallar los valores mı́nimo y máximo que alcanza la parábola y = x 2 + ax + b
en el intervalo [c, d] y que dibuje su gráfica.
(Nota: MatLab tiene implementados los comandos min y max. Usar >>help min y >>help max para ver qué hacen y utilizarlas en este programa.)
Ejercicio 2 Elaborar un programa que calcule la suma de los n primeros números naturales.
Ejercicio 3 Elaborar un programa que halle la suma y la resta de dos matrices dadas.
Ejercicio 4 .
a) Elaborar un programa para calcular S(n) = 1 +
1
1
1
+ 2 +···+ 2.
2
2
3
n
b) Comprobar que para valores grandes de n, el error que se comete al tomar S(n) =
Ejercicio 5 Elaborar un programa para calcular la integral definida de una función,
Z
π2
es muy pequeño.
6
b
f (x)dx, por el método del
a
punto medio: si se divide [a, b] en n subintervalos de longitud
∆x =
la integral aproximada es
I=
n
X
b−a
,
n
f (xi )∆x
i=1
donde xi es el punto medio de cada subintervalo.
sen(x)
, y para la función h(x) del ejemplo 3. Y calcular de
Elaborar este programa para las funciones sen(x),
x
esta forma:
Z 1
Z 2π
Z 2
sen(x)
sen(x)dx
b)
a)
h(x)dx
dx
c)
x
0
0
1
3.
Control de flujo. 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 ejecución, el flujo, se puede alterar
utilizando algunas instrucciones.
Estas instrucciones pueden ser: condicionales, en las que las secuencias de órdenes deben evaluarse basándose
en alguna condición y, bucles o instrucciones iterativas, mediante las cuales una o un grupo de órdenes 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
b =
8
31
Mientras que si escribimos
>>a=3;
if a>4
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 ejecutará comando segundo. Por ejemplo,
>>a=n;
if a>5
b=a+5
else
b=a-1
end
En la secuencia anterior de órdenes, si n es mayor que 5, el valor de b será a+5, de otra forma, será a-1.
Estructura if-else-if. Se puede utilizar cuando hay más 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==1
x=b.^1
elseif n==2
x=b.^2
elseif n==3
x=b.^3
else
x=b
end
El mismo resultado se podrı́a conseguir con la orden switch, de la manera siguiente
32
switch(n)
case(1)
x=b.^1
case(2)
x=b.^2
case(3)
x=b.^3
otherwise
x=b
end
Bucles Como se dijo más 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 producirı́a el vector
>>a
a =
3
4
5
6
7
8
9
10
11
12
Nótese que ahora hay que poner ; detrás del comando que se ha de ejecutar si no queremos ver todos los cálculos
en la pantalla.
Por supuesto, lo anterior se podrı́a 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úmero de veces que nosotros conocemos a priori.
Pero esto puede no ser ası́, en este caso habrı́a que utilizar un bucle de tipo while. Su sintaxis es
while condicional
comando
end
Que significa que, mientras se cumpla condicional, se ejecutará comando, cuando deje de cumplirse condicional,
comando dejará de ejecutarse.
33
Descargar