Sunteți pe pagina 1din 36

1

Tema 2: Programacin Cientfica


usando Matlab
Sistemas Informticos
(Grados en Ingenieras Industriales)
ndice de contenidos
1. Conceptos bsicos.
2. Vectores y Matrices.
3. Grficos en Matlab.
4. Programacin en Matlab.
2
1. Conceptos bsicos
MATLAB es el nombre abreviado de MATrix
LABoratory.
Es un programa para realizar clculos numricos con
vectores y matrices.
Una de las capacidades ms atractivas es la de
realizar una amplia variedad de grficos en dos y tres
dimensiones.
Tiene un lenguaje de programacin propio.
Programa de amplia difusin en el mundo tcnico y
cientfico.
Al arrancar MATLAB
aparece la ventana inicial por defecto. Esta opcin puede
elegirse mediante Desktop Layout/Default en el men View.
1.1. El Programa Matlab
1. Conceptos Bsicos.
Command Window
1.1. El Programa Matlab
3
1. Conceptos Bsicos.
La ventana Command Window que aparece en la parte derecha
en la ventana inicial es la parte ms importante, pues en ella se
ejecutan los distintos comandos de Matlab a continuacin del
indicador caracterstico >>
En la figura siguiente puede verse lo que sucede al ejecutar el
comando:
>>A = magic(6)
1.2. El entorno
Si se coloca un punto
y coma al final, no
se muestra la salida
por pantalla: Se hace
el clculo pero no se
muestra nada.
1. Conceptos Bsicos.
En la parte izquierda aparecen otras ventanas muy interesantes:
Launch Pad que puede alternarse con Workspace haciendo click en el
apartado correspondiente
Launch Pad da acceso a
todos los mdulos o
componentes de Matlab
(Demos, ayuda, etc.)
1.2. El entorno
WorkSpace da informacin
sobre todas las variables que
se definan en esta sesin
Ya est la variable A,
creada anteriormente.
Doble clic sobre una
variable permite ver y
modificar su valor.
4
1. Conceptos Bsicos
Command History que puede alternarse con
Current Directory haciendo click en el apartado
correspondiente.
Haciendo doble clic sobre archivos *.m se abre el editor de
ficheros de MATLAB, herramienta fundamental para la
programacin.
Command History muestra
los ltimos comandos
ejecutados en la ventana
Command Window
Current Directory muestra
el directorio activo o actual
1.2. El entorno
1. Conceptos Bsicos.
En MATLAB existen diferencias entre maysculas y minscula al
igual que en C.
Se pueden ejecutar varias instrucciones en una misma lnea,
separndolas con coma (,)
A=rand(4), B=inv(A), B*A
Se puede volver a ejecutar un comando anteriormente escrito
utilizando los cursores apropiados (usa el histrico).
Los operadores bsicos son:
+, -, *, /, ^
Si el resultado no lo guardamos en ninguna variable, se guarda
automticamente en una variable reservada llamada ans.
ans contiene la ltima respuesta que no haya sido guardada en una variable.
Las variables pueden tener a lo sumo 19 caracteres y siguen un
patrn similar al nombre de las variables en C.
Para eliminar variables se usa la instruccin clear
Para conocer las variables almacenadas se usa la instruccin
who (o whos, que muestra tambin el tamao y tipo de cada
variable).
1.2. El entorno
5
1. Conceptos Bsicos.
En Matlab tienen mucha importancia los ficheros-M.
Son ficheros de texto con la extensin *.m que contienen un
conjunto de comandos o definicin de funciones en Matlab.
La importancia de estos ficheros es que al teclear su nombre en la
lnea de comandos y pulsar Intro, se ejecutan uno tras otro todos los
comandos que contiene el fichero.
El poder guardar instrucciones y grandes matrices en un fichero
permite ahorrar mucho tiempo de trabajo.
Aunque los ficheros pueden crearse en cualquier editor de textos,
Matlab dispone de un editor que permite tanto crear como modificar
estos ficheros
Para crear un archivo *.m desde Matlab:
1.2. El entorno
File New M-file
ATENCIN: Los ficheros .mat
guardan variables del Workspace.
1. Conceptos Bsicos.
prueba1.m
Comentario se indica con el carcter %
1.2. El entorno
>> clear Borra todas las variables del Workspace
>> clear a, b, c Borra slo esas variables.
6
1. Conceptos Bsicos.
Ficheros .mat: Guardan en binario las variables (y
sus datos) del Workspace.
Guardarlas TODAS:
Men File Save Workspace as
Orden en la ventana de comandos:
>> save <nombre_fichero>
Cargar un fichero .mat en el Workspace:
Men File Open.
Orden:
>> load <nombre_fichero>
Guardar una variable:
Orden:
>> save <nombre_fichero> <variable>
1.2. El entorno
1. Conceptos Bsicos: Otros comandos
1.2. El entorno de
trabajo
Comando Accin
>> clc Borra el texto de la ventana de comandos (no las variables).
>> pwd Muestra el directorio de trabajo (o carpeta) actual.
>> dir Muestra los ficheros del directorio de trabajo.
>> cd <nueva_carpeta> Cambia el directorio de trabajo.
>> help Ayuda de Matlab.
>> help <comando> Ayuda del comando indicado.
>> help matlab\elfun Ayuda de Funciones elementales.
>> help matlab\specfun Funciones especficas.
>> help matlab\graph2d Grficos en 2D (graph3d, para 3D).
>> help matlab\datatypes Tipos de datos y estructuras.
>> help matlab\iofun Funciones de I/O.
>> help matlab\timefun Fecha y hora.
>> help matlab\elmat Manipulacin de matrices.
>> cputime Tiempo de CPU, en segundos, utilizado en la sesin.
>> tic Activa un contado de tiempo en segundos.
>> toc Detiene el contador, y lo devuelve.
>> pi Valor de (pi): 3.141592653589793
>> clock Vector con 6 valores: [ao mes da hora minuto segundo].
>> date Fecha en formato de cadena.
7
Matlab siempre trabaja en doble precisin (8 bytes, 15 decimales).
Podemos cambiar el formato con el que se muestran los datos:
1. Conceptos Bsicos: Otros comandos
1.2. El entorno de
trabajo
Comando Accin
>> format short Punto fijo con 4 decimales (formato por defecto, tambin sirve format).
Ej.: >> 5+pi
ans = 8.1416
>> format long Punto fijo con 15 decimales.
Ej.: >> 5+pi
ans = 8.141592653589793
>> format shorte Forma exponencial, 4 decimales.
Ej.: >> 5+pi
ans = 8.1416e+000
>> format longe Forma exponencial, 15 decimales.
Ej.: >> 5+pi
ans = 8.141592653589793e+000
>> format rat Forma racional.
Ej.: >> 5+pi
ans = 920/113
>> format bank Punto fijo, 2 decimales.
Ej.: >> 5+pi
ans = 8.14
F
o
r
m
a
t
o

d
e

V
i
s
u
a
l
i
z
a
c
i

n

d
e

D
a
t
o
s
1. Conceptos Bsicos.
Nmeros Complejos: Se representan de la forma
tradicional, y permite las operaciones bsicas:
Ejemplo: >> z = 1 + 3i;
>> w = 3 - 5i;
>> z + w
ans = 4.0000 - 2.0000i
>> z - w
ans = -2.0000 + 8.0000i
>> z * w
ans = 18.0000 + 4.0000i
>> z / w
ans = -0.3529 + 0.4118i
Dibujar un complejo como un punto (con coordenadas segn su
parte real e imaginaria):
>> plot(z) % Es un punto, poco visible
Dibujar el vector de posicin del complejo:
>> plot([0 z])
Dibujar varios puntos en la misma grfica:
>> hold on
>> plot([0 w])
>> plot([0 z])
>> hold off
1.2. El entorno de
trabajo
i =
1
0 0.5 1 1.5 2 2.5 3
-5
-4
-3
-2
-1
0
1
2
3
w
z
8
1. Conceptos Bsicos.
1.3. Funciones
elementales bsicas
>> z = 3 + 4i;
ans = 5
ans = 3.0000 - 4.0000i
ans = 3
ans = 4
ans = 0.9273
NOTAS:
Estas funciones sirven para
escalares y para matrices.
Para matrices se aplica la
funcin a cada coeficiente
individual y el resultado es
otra matriz de igual
dimensin.
Las funciones trigonomtricas
tienen una versin con el
sufijo d, que trabajan en
grados, en vez de en radianes:
sind, asind, cosd...
1. Conceptos Bsicos
Ejemplo: El sol irradia 385x10
24
J/s de energa mediante reacciones
de nucleares que convierten la materia en energa. Cunta materia
solar se convierte en energa cada da?
Debe usar la ecuacin de Einstein: E=mc
2
(Unidades: 1J = 1Kg m
2
/s
2
)
La masa del sol es 2x10
30
Kg.: En cunto tiempo se consumir toda la
masa del sol?
Ejemplo
>> E=385e24
E = 3.8500e+026
>> E=E*3600*24; % Energa en un da (J)
E = 3.3264e+031
>> c=3e8 % Velocidad de la luz (m/s)
c = 300000000
>> m=E/c^2 % Ec. de Einstein: Resultado en kilos/da
m = 3.6960e+014
>> tiempo = (2e30 / m); % Resultado en das
>> tiempo = tiempo / 365 % Resultado en aos
tiempo = 1.5e+13 % Son unos 15 billones de aos
9
2. Vectores y Matrices
Inicialmente lo utilizaremos como programa interactivo, en el que
se irn definiendo las matrices, vectores, y expresiones que los
combinan y obteniendo los resultados sobre la marcha.
Para definir una matriz (o un vector) no hace falta indicar su
tamao, sino sus valores.
El tamao puede modificarse en cualquier momento.
Definicin de vectores desde teclado:
Un vector-fila de dimensin n se puede definir en Matlab escribiendo
sus componentes entre corchetes y separando los valores por comas o
espacios: >> v=[1,2,3] >> v=[1 2 3]
Un vector-columna se crea igual pero separando los componentes por
puntos y coma: >> w=[4;5;6]
Puede definirse un vector fila cuyas componentes van desde i hasta j,
de uno en uno: >> z=i:j
Tambin, en incrementos de n en n: >> z=i:n:j
Ejemplo: >> z=1:2:10 % Tambin vale z=[1:2:10]
z = 1 3 5 7 9
2.1. Vectores
2. Vectores y Matrices
Los componentes de un vector se designan mediante el nmero de su
subndice: >> w(2)
ATENCIN: En Matlab los subndices de los vectores y matrices
empiezan siempre en 1.
Un escalar es para Matlab una matriz 1x1, aunque no siempre se trata
como una matriz.
Operaciones entre vector y escalar (entre matriz y escalar son similares):
Si v es un vector y k es un escalar:
v+k vector de componentes {v
i
+ k}
v-k vector de componentes {v
i
- k}
v*k vector de componentes {v
i
*k}
v/k vector de componentes {v
i
/ k}
Operaciones componente a componente: Se indican explcitamente con
un punto (a veces no es necesario):
k./v vector de componentes {k / v
i
} k/v genera un error porque las
matrices no tienen igual dimensin.
v.^k vector de componentes {(v
i
)^k} v^k genera un error porque v
no es una matriz cuadrada (es la potencia con base v).
k.^v vector de componentes {k^(v
i
)} k^v genera un error porque
las matrices no tienen igual dimensin.
2.1. Vectores
10
2. Vectores y Matrices
Operaciones especficas para un vector v:
sum(v) : Suma de las componentes del vector v.
prod(v): Producto de las componentes del vector v.
mean(v): Media aritmtica de las componentes del vector v.
median(v): Mediana de los elementos del vector v.
max(v): Mximo de los componentes del vector v.
min(v): Mnimo de los componentes del vector v.
[d,n]=max(v): Asigna a d el mximo, y a n su posicin
(idem para el mnimo con la funcin min).
cumsum(v): Vector de igual tamao que v con las sumas
acumuladas, elemento a elemento.
cumprod(v): Vector con los productos acumulados.
Estas funciones tambin sirven para matrices, pero devuelven un vector
con los resultados de aplicar la funcin columna a columna de la matriz.
Para aplicar las funciones por filas, trasponer: max(v')
2.1. Vectores
2. Vectores y Matrices
Operaciones especficas entre los vectores v y w:
var(v) y std(v): Varianza y desviacin tpica de v.
sort(v): Ordenacin del vector v ascendentemente.
sort(v,'descend'): Ordena v descendentemente.
En matrices se ordenan las columnas, lo cual implica que las filas
pueden no conservarse. Si queremos ordenar una columna y
mantener las filas iguales, se usa sortrows(V,n), donde n es la
columna que se ordena (sin n se supone 1).
length(v): Nmero de elementos del vector v.
En realidad devuelve la dimensin ms grande de una variable.
dot(v,w): Producto escalar de dos vectores (dot product):
Equivalente a: sum(v.*w)
cross(v,w): Producto vectorial de dos vectores:
Es el vector ortogonal a v y w.
Slo sirve para 3 dimensiones.
2.1. Vectores
11
2. Vectores y Matrices
Operaciones entre vectores:
Si v y w son vectores de igual dimensin n:
v+w Vector de n componentes {v
i
+w
i
}.
v-w Vector de n componentes {v
i
-w
i
}.
v*w' Producto escalar de dos vectores: Igual a >> dot(v,w)
Vector fila * Vector columna producto escalar.
Vector columna se consigue con el apstrofo: w'
No tienen que tener las mismas dimensiones, pero s ser
compatibles para la multiplicacin de matrices.
v*w Genera un error por sus dimensiones incompatibles.
v'*w Genera una matriz cuadrada n x n.
v.*w Vector {v
i
*w
i
} componente a componente.
v./w Vector {v
i
/w
i
} componente a componente.
v.\w Vector {w
i
/v
i
} componente a componente.
v.^w Vector {v
i
^w
i
} componente a componente.
2.1. Vectores
2. Vectores y Matrices
Formacin de un vector a partir de otro:
x(n) Devuelve el componente n-simo del vector x
x(a:b) Devuelve los componentes del vector x situados entre el a-
simo y el b-simo respectivamente:
Ejemplos: >> w(2:3)
>> cross(x(1:3),w(1:3))
x(a:p:b) Elementos del vector x situados entre el a-simo y b-simo
respectivamente (a<b) pero separados en p unidades.
Si a>b, entonces p debe ser negativo, o la matriz estar vaca.
Ej.: >> z=[1:2:10];
>> z(1:2:5) >> z(5:-2:3)
ans = 1 5 9 ans = 9 5
x' es el vector columna correspondiente al vector fila x (o viceversa):
Calcula la transpuesta.
x(v) Elementos del vector x que estn en las posiciones que se
indican en el vector v.
Ej.: >> x=[3:10];
>> v=[2 4];
>> x(v) % Equivalente a x([2 4]), sin crear v
ans = 4 6
2.1. Vectores
12
2. Vectores y Matrices
Es interesante que las variables que usemos para las matrices
sean letras maysculas (al igual que para vectores minsculas).
Las matrices se definen por filas; los elementos de una misma
fila estn separados por blancos o comas, mientras que las filas
estn separadas por puntos y coma.
A partir de ese momento esa matriz est disponible para
realizar cualquier tipo de operacin.
Para acceder al elemento (x,y): A(x,y)
Asignacin para cambiar su valor: Ej.: >> A(1,2)=5
2.2. Matrices
>> A=[1 2 3;4 5 6;7 8 9]
>> v=[1 1 1]
>> B=[2 4 5;3 5 7;v]
B = 2 4 5
3 5 7
1 1 1
Adems de valores numricos,
en la definicin de una matriz o
vector podemos utilizar
expresiones y funciones
matemticas:
2. Vectores y Matrices
Operaciones con matrices:
.
2.2. Matrices
norm(v): Mdulo del vector v, equivalente a sqrt(sum(w.^2)).
det(A): Determinante de A.
A debe ser una matriz cuadrada.
inv(A): Matriz inversa de A, tal que inv(A)*A es la matriz
unidad o identidad (eye, unos en la diagonal principal, y ceros en
el resto).
A debe ser una matriz cuadrada.
13
2. Vectores y Matrices
Nmeros y Matrices Pseudoaleatorias:
rand genera nmeros pseudoaleatorios entre 0 y 1.
rand(n): Matriz pseudoaleatoria n x n.
rand(m,n): Matriz pseudoaleatoria m x n.
rand('seed'): Devuelve el valor actual de la semilla de rand.
rand('seed',n): Asigna n al valor de la semilla de rand.
Tamao de una Matriz:
size(A): Tamao de A (devuelve un vector fila).
[f,c]=size(A): Toma f el nmero de filas y c las columnas.
size(A,1): Nmero de filas.
size(A,2): Nmero de columnas.
size(A,x) vale 1, si x>2.
size(A,1): Nmero de filas.
2.2. Matrices
2. Vectores y Matrices
2.2. Matrices
>> C=rand(3)
C = 0.9649 0.9572 0.1419
0.1576 0.4854 0.4218
0.9706 0.8003 0.9157
>> [a,b]=min(C)
a = 0.1576 0.4854 0.1419
b = 2 2 1
>> eye(2,3)
ans =
1 0 0
0 1 0
>> ones(3)
ans =
1 1 1
1 1 1
1 1 1
>> diag(diag(A)) Matriz diagonal con la diagonal de A.
Funciones para Formar Nuevas Matrices:
14
2. Vectores y Matrices
Funciones para Formar Nuevas Matrices:
blkdiag(A,B): Matriz diagonal de submatrices a partir de las
matrices A y B. El tamao del resultado es la suma de filas y
columnas de ambas.
triu(A): Matriz triangular superior (upper), pone a cero los
elementos bajo la diagonal principal (A puede no ser
cuadrada).
tril(A): Matriz triangular inferior (lower) , pone a cero los
elementos sobre la diagonal principal.
rot90(A,k): Gira k*90 grados la matriz A en sentido
antihorario. El entero k puede ser negativo, y vale 1 por
defecto.
2.2. Matrices
2. Vectores y Matrices
Funciones para Formar Nuevas Matrices:
fliplr(A): Refleja una matriz de derecha a izquierda.
flipud(A): Refleja una matriz de arriba a abajo.
reshape (A,m,n): Cambia el tamao de A obteniendo una
matriz mxn cuyas columnas se obtienen de las columnas de A,
en ese orden.
Vector columna concatenando todas las columnas de A,
una tras otra:
>> reshape(A,prod(size(A)),1)
Equivale al comando A(:)
2.2. Matrices
15
2. Vectores y Matrices
Creacin de submatrices con el operador (:):
A(a:b,c:d) Define la submatriz formada por la interseccin
de las filas que hay entre a y b y las columnas entre c y d.
Ej.: >> B(1:2,3:3) Genera la matriz 2x1 formada
por la interseccin de las dos primeras filas y la tercera
columna.
A(a:p:b,c:q:d) Igual que lo anterior pero tomando las filas
de p en p y las columnas de q en q.
A([a b],[c d]) Define la submatriz de A formada por la
interseccin de las filas a y b y las columnas c y d.
Igualmente con ms valores: A([a b c ...],[x y z ...])
Ej.: >> A([1 3],[1 3])
Ej.: >> A([2 3 1 3],[1 2])
2.2. Matrices
Las listas de ndices pueden ser variables tipo vector
2. Vectores y Matrices
A(a,:) Define la fila a-sima de A.
A(:,b) Define la columna b-sima de A.
A([a b c ...],:) Submatriz formada por la intereseccin de
todas las columnas de A y las filas a, b, c...
A(:) Vector columna concatenando todaslas columnas de A
(por orden).
Los elementos de una matriz se pueden direccionar
con un nico ndice.
La matriz en memoria se almacena en lnea, por
columnas.
Ej.: Si A es 4x4:
A(5) es A(1,2), y A(7) es A(3,2).
Tambin puede ser con un vector como nico
argumento, generando un vector con esos valores:
Ej.: Para la matriz A anterior:
A([5 7 8]) es un vector con los elementos del
ejemplo anterior, ms A(4,2).
2.2. Matrices
16
2. Vectores y Matrices
Composicin de una matriz a partir de otras:
Ej.: >> A=rand(2);
>> B=diag(diag(A));
>> C=[A, B; eye(3), zeros(3,1)]
C es una matriz 5x4.
Los tamaos de las submatrices deben ser coherentes.
Eliminar elementos de matrices:
Asignarles [ ]
Ej.: >> C(3,:) = []; Borra la fila 3
>> C(:,2) = []; Borra la columna 2
C queda como una matriz 4x3.
2.2. Matrices
2. Vectores y Matrices
Ejemplo: La distancia d a la que podemos ver el horizonte depende de
la altura h desde donde miramos, y del radio de la Tierra R (6378 Km.).
Teorema de Pitgoras: R
2
+ d
2
= (R + h)
2
h puede ser la altura de una montaa
Hallar todas las distancias variando h de 0 a 8000 m., de 1000 en 1000 m.
Ejemplo
>> R=6378; % Radio de la Tierra, en Kilmetros
>> h=[0:1000:8000]; % Vector de alturas
>> h=h/1000; % Convertir metros a kilmetros
>> d=sqrt((R+h).^2 - R.^2); % Vector de distancias
>> %Mostrar una tabla con las alturas y distancias
>> Tabla = [h' d']
Tabla = 0 0
1.0000 112.9469
2.0000 159.7373
3.0000 195.6451
4.0000 225.9203
5.0000 252.5965
6.0000 276.7165
7.0000 298.8996
8.0000 319.5497
Calcular estos mismos datos
en la superficie de la Luna,
cuyo radio es de 1737 Km.
17
2. Vectores y Matrices
Sistema de N ecuaciones con N incgnitas:
Ej.: Sistema de 3 ecuaciones con 3 incgnitas:
x+y+z=3
2x-y+3z=-4
x-2y-5z=0
1. Defina A como la matriz de coeficientes:
>> A = [1 1 1; 2 -1 3; 3 -2 -5];
2. Defina b como el vector de trminos
independientes:
>> b = [3 -4 0];
3. Solucin:
>> resultado=inv(A)*b'
resultado = 1.0000
3.0000
-1.0000
2.2. Matrices
2. Vectores y Matrices
Sistemas sobredeterminados: Un sistema Ax=b,
con A mxn, es sobredeterminado si m>n.
Hay ms ecuaciones que incgnitas.
Es un sistema lineal SIN solucin exacta.
Ej.: Esto ocurre cuando se quieren ajustar curvas a datos
experimentales.
Solucin: Hallar los valores que minimicen el error.
Matlab usa el mtodo de mnimos cuadrados para aproximar la
solucin.
Ej.: Sistema de 3 ecuaciones con 2 incgnitas:
1. Definir la matriz A de coeficientes:
>> A = [1 1; 2 -1; 3 -2];
2. Definir el vector b de trminos independientes:
>> b = [3 -4 0];
3. Solucin aproximada: (No se puede usar inv(A) porque A no es cuadrada)
>> resultado=A\b'
resultado = 0.5429
1.8000
2.2. Matrices
18
2. Vectores y Matrices
Sistemas infradeterminados: Un sistema Ax=b, con
A mxn, es infradeterminado si m<n.
Hay menos ecuaciones que incgnitas.
Tienen infinitas soluciones.
Matlab devuelve una solucin, sin avisar de que existen ms.
Ej.: Sistema de 2 ecuaciones con 3 incgnitas:
1. Definir la matriz A de coeficientes:
>> A = [1 1 1; 2 -3 0];
2. Definir el vector b de trminos independientes:
>> b = [-2 -4];
3. Una Solucin es:
>> resultado=A\b'
resultado = -2
0
0
Otra solucin posible es x=1, y=2, z=-5.
2.2. Matrices
2. Vectores y Matrices
Los polinomios tienen la forma
f(x)=a
n
x
n
+
n-1
+ ... + a
1
x + a
0
donde n es el grado.
En Matlab se representan con el vector-fila de sus coeficientes.
Ej.: f(x)=3x
2
8x + 5, se representa como: >>p=[3 -8 5]
Calcular el valor f(x) en un punto x: polyval(p,x)
Ej.: f(1): >> polyval(p,1) cero
Se puede usar plot para representar
grficamente en un rango:
>> rangox=[-5:0.1:5];
>> y=polyval(p,rangox);
>> plot(rangox,y)
>> rangox=[-10:0.1:10];
>> y=polyval(p,rangox);
>> plot(rangox,y)
2.3. Polinomios
-5 -4 -3 -2 -1 0 1 2 3 4 5
-20
0
20
40
60
80
100
120
-10 -8 -6 -4 -2 0 2 4 6 8 10
-50
0
50
100
150
200
250
300
350
400
19
2. Vectores y Matrices
Sumar y Restar polinomios: Es una suma/resta de vectores,
pero ambos deben tener el mismo tamao.
Se aaden ceros a la izquierda del polinomio de menor grado.
Ej.: Sumar f1(x)=3x
2
8x + 5, con f1(x)=x
4
x + 1
>> f1=[3 -8 5];
>> f2=[1 0 0 -1 1];
>> suma=[0 0 f1] + f2
suma = 1 0 3 -9 6
Races (valores que hacen cero el polinomio): roots(p) vector columna
Ej.: >> r=roots(f1)
r = 1.6667
1.0000
El polinomio se puede hallar a partir de sus races, multiplicando los
valores (x-r), de todas sus races r. Eso lo puede hacer Matlab:
Polinomio a partir del vector-columna r con sus races: poly(r)
Se obtiene normalizado y puede ser de coeficientes complejos.
2.3. Polinomios
2. Vectores y Matrices
2.3. Polinomios
>> c = [3 -2 4];
>> conv(c, [1 0 0 0])
ans = 3 -2 4 0 0 0
>> polyder(c)
ans = 6 -2
20
3. Grficos en Matlab
Grficas de barra y de pastel:
3. Grficos barra/pastel
bar(x) Grfica de barras vertical (barh para horizontal). Si x es una
matriz bidimensional mxn, agrupa los datos por fila (es como
mostrar m grficos de barras).
bar3(x) Grfica de barras vertical tridimensional vertical (bar3h para
horizontal). Buena representacin para matrices.
pie(x) Grfica tipo pastel. Cada elemento del vector es una
rebanada del pastel (en porcentaje). Si x es mxn, representa
m*n porciones, ordenadas por columnas.
pie3(x) Grfica tipo pastel tridimensional. Igual que pie(x).
hist(x, N) Grfica tipo histograma: Cuenta los valores que hay en N
rangos, que estn igualmente espaciadas entre los valores
mnimo y mximo de x (N=10 por defecto).
Si se asigna a una variable, los datos se almacenan en
forma de vector. Ejemplo: >> A=hist(x,20)
3. Grficos en Matlab
>> x=[1 6 5 3 7];
>> y=[x;1:5];
>> bar(x)
>> bar(y)
>> bar3(x,'y')
>> bar3(y)
>> pie(x)
>> pie3(y)
>> hist(x,2)
>> a=hist(x,2)
a = 2 3
3. Grficos barra/pastel
1 2 3 4 5
0
1
2
3
4
5
6
7
1 2
0
1
2
3
4
5
6
7
1
2
3
4
5
0
2
4
6
8
1
2
3
4
5
1
2
0
2
4
6
8
5%
27%
23%
14%
32%
11%
8%
19%
8%
14%
14%
3%
3%
5%
16%
1 2 3 4 5 6 7
0
0.5
1
1.5
2
2.5
3
2 valores en el intervalo [1,4], y
3 valores en el intervalo (4,7].
21
3. Grficos en Matlab
Crea un grfico a partir de vectores:
Dibuja el vector y1 en funcin de x1, usando el color y estilo fijado en str1.
En la misma figura dibuja y2 en funcin de x2 usando el color y el estilo
fijado en str2... y as sucesivamente.
xi, yi son vectores de dimensin N, que representan N puntos en el plano
El orden es importante porque cada punto se une al siguiente con una lnea recta.
La cadena de caracteres str puede contener los siguientes atributos, en una
nica cadena entre comillas simples:
3.1. Grficos
bidimensionales
plot (x1,y1,str1, x2,y2,str2, ... )
Tipos de puntos * x o + v < > s d p h
Tipos de lnea - (lnea continua, valor por defecto)
-- (lnea discontinua)
-. (lnea con trazos y puntos)
: (lnea con puntos)
Colores b(azul, por defecto), y(amarillo), g(verde),
m(magenta), c(can), w(blanco), r(rojo), k(negro)
0 2 4 6 8 10 12 14
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
3. Grficos en Matlab
3.1. Grficos
bidimensionales
>> x=[1 6 5 2 1];
>> y=[1 0 4 3 1];
>> plot (x,y)
>> plot(x,y,'-*g')
% puntos con * unidos con lnea continua verde
>> x=[-3*pi:pi/20:3*pi];
>> y=sin(x);
>> plot (x,y)
>> x=0:pi/100:4*pi;
>> y=sin(x).*cos(x/3);
>> z=sin(x).*cos(x/2);
>> plot (x,y,x,z)
>> x=0:pi/100:4*pi;
>> A=[sin(x);sin(x/2);sin(x/3);sin(x/4)];
>> plot (x,A)
>> x=0:pi/100:4*pi;
>> y=sin(x).*cos(x/3);
>> z=sin(x).*cos(x/2);
>> B = [y;z];
>> plot (x,B)
1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6
0
0.5
1
1.5
2
2.5
3
3.5
4
-10 -8 -6 -4 -2 0 2 4 6 8 10
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
0 2 4 6 8 10 12 14
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
22
3. Grficos en Matlab
Curvas en 3D:
Dibuja el grfico formado por los puntos cuyas coordenadas
estn en (x
i
,y
i
,z
i
) con el estilo y color indicado en str
i
y as
sucesivamente.
La funcin comet3(x,y,z) dibuja la grfica en una secuencia animada.
Para grficas 2D use comet.
Si la animacin corre mucho, agregar ms puntos.
3.2. Grficos
tridimensionales
plot3(x1,y1,z1,str1, x2,y2,z2,str2, ...)
>> alpha=0:pi/80:8*pi;
>> z=alpha/8;
>> x=z/(8*pi) + z.*cos(alpha);
>> y=z/(8*pi) + z.*sin(alpha);
>> plot3 (x,y,z)
>> x=linspace(0, 10*pi, 1000);
>> y=cos(x);
>> z=sin(x);
>> plot3 (x,y,z)
>> grid
>> title('Un resorte')
-4
-2
0
2
4
-4
-2
0
2
4
0
1
2
3
4
0
10
20
30
40
-1
-0.5
0
0.5
1
-1
-0.5
0
0.5
1
Un resorte
3. Grficos en Matlab
Dibuja una funcin de la que se dispone su forma analtica con el
intervalo de variacin dado.
Dibujar n funciones en la misma figura:
3.1. Grficos
bidimensionales
fplot('funcion',[xmin,xmax,ymin,ymax],str)
fplot('[f1,f2,...,fn]',[xmin,xmax,ymin,ymax],str)
>> fplot('sin(x)',[-3*pi,3*pi, -1,1])
>> fplot('sin(x)*exp(-0.4*x)', [0,10], 'r')
>> fplot('[sin(x),sin(2*x),sin(3*x)]', [0,2*pi], '*-')
0 1 2 3 4 5 6
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
0 1 2 3 4 5 6 7 8 9 10
-0.2
-0.1
0
0.1
0.2
0.3
0.4
0.5
0.6
-8 -6 -4 -2 0 2 4 6 8
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
23
3. Grficos en Matlab
Superficies 3D: plot3(Mx,My,Mz): Esas 3 matrices de igual
dimensin representan puntos en 3D, y se grafican como una
superficie en malla (mesh, que es como dibujar varias curvas). Tres Pasos:
1. Si tenemos los vectores X e Y con los valores de los ejes X
e Y respectivamente que queremos evaluar, generamos todos
los puntos de la malla con:
[Mx, My]=meshgrid(X,Y);
2. Para cada punto, se calcula la funcin f de dos argumentos
a representar:
Mz= f(Mx,My);
3. Representar la funcin:
plot3(Mx,My,Mz): Grafica una malla de alambre.
mesh(Mx,My,Mz): Grafica una malla de alambre,
escondiendo las zonas ocultas.
mesh(Mz): Igual que el anterior, donde los valores de X
e Y se basan en las dimensiones de la matriz Mz.
3.2. Grficos
tridimensionales
Con las herramientas de la ventana del
grfico de Matlab, podemos cambiar el
punto de vista (y ms cosas):
0
2
4
6
8
0
2
4
6
8
-0.5
0
0.5
1
3. Grficos en Matlab
3.2. Grficos
tridimensionales
>> x=[-2*pi:pi/10:2*pi];
>> y=x;
>> [Mx,My]=meshgrid(x,y);
>> Mz=sin(Mx).*cos(My);
>> mesh(Mz);
>> xy=linspace(pi/4,2*pi,50);
>> [Mx,My]=meshgrid(xy,xy);
>> Mz= (cos(Mx)./Mx).*(sin(My)./sqrt(My));
>> mesh(Mx,My,Mz);
>> plot3(Mx,My,Mz);
0
2
4
6
8
0
2
4
6
8
-0.5
0
0.5
1
>> mesh(Mz);
Genera la misma grfica que mesh
con 3 arg., pero cambiando los
valores de los ejes X e Y al intervalo
[0,50] (o similar), pues Mz es 50x50.
0
10
20
30
40
50
0
20
40
60
-1
-0.5
0
0.5
1
0
10
20
30
40
50
0
10
20
30
40
50
-1
0
1
24
3. Grficos en Matlab
Grficos de superficies: Otras funciones:
3.2. Grficos
tridimensionales
mesh(x,y,z) Igual que plot3() pero ocultando las lneas
ocultas (superficie de alambre).
meshc(x,y,z) Igual que mesh() pero dibujando adems las
lneas de nivel en el plano XY.
surf(x,y,z) Igual que mesh() pero dibujando los segmentos
de la malla en colores.
surfc(x,y,z) Igual que surf() pero dibujando adems las
lneas de nivel en el plano XY.
surfl(x,y,z,s) Igual que surf() pero adems aade una fuente
de luz situada en s=[x y z].
contour(x,y,z) Dibuja las proyecciones sobre el plano XY de las
lneas de nivel.
contour3(x,y,z,n) Dibuja las lneas de nivel sobre la misma
superficie.
3. Grficos en Matlab
Grficos de superficies: Funciones easy:
3.2. Grficos
tridimensionales
ezmesh(f)
ezmesh(f,[a,b])
ezmesh(f,[a,b,c,d])
Dibuja la superficie z=f(x,y) para
(x,y) en el primer caso,
en el cuadrado [a,b]x[a,b] en el
segundo y
en el rectngulo [a,b]x[c,d] en el
tercero.
>>ezmesh('x*exp(-x^2 y^2)')
>>ezmeshc('sin(u/2)*sin(v/2)')
ezmesh(x,y,z)
. . .
Dibuja la superficie de
coordenadas paramtricas
x=x(s,t) y=y(s,t) z=z(s,t) para
(s,t) variando en el cuadrado [-
2pi,2pi] si no se indica otro
intervalo.
>> ezmesh('s*cos(t)','s*sin(t)',
't',[-pi,pi])
ezcontour(f)
ezcontourf(f)
Dibuja las lneas de nivel de la
funcin f(x,y). La segunda
rellena con un color slido las
zonas.
>> ezcontour('x*exp(-x^2 y^2)')
ezsurf(f)
ezsurfc(f)
Dibuja una superficie coloreada
z=f(x,y). La segunda dibuja
adems las lneas de nivel.
>> ezsurf('sin(sqrt(x^2+y^2))/
sqrt(x^2+y^2)')
25
3. Grficos en Matlab
3.3. Otros comandos
grficos
grid on
grid off
Pone o elimina el enrejado de los
ejes.
xlabel(texto para el eje x)
ylabel(texto para el eje y)
zlabel(texto para el eje z)
title(ttulo de la grfica)
Aade rtulos a los ejes y ttulo al
dibujo.
axis on
axis off
Visualiza o no los ejes de la
grfica.
axis([x1,x2,y1,y2,z1,z2]) Determina los lmites de la grfica.
view([az,e]) sita el punto de vista
en el punto de azimut az y elevacin e.
view([x y z]) sita el punto de
observacin en [x,y,z]
view(3) fija el punto de observacin
3D estndar (az=-37.5, e=30)
En grficas 3D, cambia el punto
de observacin del objeto.
az=ngulo en grados de rotacin en el plano
xy, en sentido antihorario.
e=ngulo en grados de elevacin con
respecto al plano xy.
3. Grficos en Matlab
3.3. Otros comandos
grficos
>> x=[-3*pi:1:3*pi];
>> hold on
>> plot(x,sin(x))
>> plot(x,tan(x),'r')
>> hold off
hold on
. . .
hold off
Todos los grficos entre las dos
rdenes se representan sobre la
misma ventana grfica.
subplot(
m,n,p)
Divide una figura en diferentes
zonas (mxn sub-ventanas) en las
que se van a representar
grficos diferentes. Se activa la
ventana p.
>> subplot(2,2,1);
>> ezplot('sin(x)',[-2*pi 2*pi]);
>> subplot(2,2,2);
>> ezplot('cos(x)',[-2*pi 2*pi]);
>> subplot(2,2,3);
>> ezplot('csc(x)',[-2*pi 2*pi]);
>> subplot(2,2,4);
>> ezplot('sec(x)',[-2*pi 2*pi]);
figure
Crea y activa una nueva ventana
grfica.
-5 0 5
-1
-0.5
0
0.5
1
x
sin(x)
-5 0 5
-1
-0.5
0
0.5
1
x
cos(x)
-5 0 5
-5
0
5
x
csc(x)
-5 0 5
-5
0
5
x
sec(x)
26
3. Grficos en Matlab
Superficies con datos irregularmente
distribuidos:
Si los valores X,Y,Z que tenemos para crear nuestra superficie
no estn homogneamente dispersados en el plano XY, la
superficie puede quedar extraa.
Podemos crear una malla homognea Mx,My, e interpolar los
valores Mz, usando los valores X,Y,Z:
Mz = griddata(X,Y,Z,Mx,My);
3.2. Grficos
tridimensionales
3. Grficos en Matlab
Ejemplo: Superficie con datos irregularmente distribuidos.
3.2. Grficos
tridimensionales
>> %Valores aleatorios para X e Y en el intervalo [0,4]:
>> X=rand(100,1)*4;
>> Y=rand(100,1)*4;
>> Z=X+Y; % Usamos una funcin simple: la suma
>> % Generamos una malla homognea en [0,4]
>> [Mx,My]=meshgrid([0:.1:4], [0:.1:4]);
>> Mz=griddata(X,Y,Z,Mx,My);
>> mesh(Mx,My,Mz);
0
1
2
3
4
0
1
2
3
4
0
2
4
6
8
NOTA: Faltan zonas por rellenar porque
griddata no puede interpolar all donde
le faltan datos:
27
3. Grficos en Matlab
Grficos en 4D: Representacin volumtrica de
Funciones con 3 argumentos. Tres Pasos:
1. Se usa meshgrid con 3 argumentos, para crear las
coordenadas Mx,My,Mz de los puntos 3D.
2. Calcular V (dimensin 4) usando la funcin sobre Mx,My,Mz.
3. Representar con:
slice(Mx,My,Mz, V, XI,YI,ZI)
XI,YI,ZI son vectores que indican los planos de corte que
deseamos representar, paralelos a los ejes X,Y,Z
respectivamente.
Pueden eliminarse los 3 primeros argumentos para mallados con
subdivisiones equidistantes (usa las coord. de V).
3.2. Grficos
tridimensionales
3. Grficos en Matlab
Ejemplo: Funcin en 4D, cortada con 5 planos.
3.2. Grficos
tridimensionales
>> % f(x,y,z)=x+y^2+z^3 en un cubo de [-1,1] de lado:
>> [Mx,My,Mz]=meshgrid([-1:.1:1], [-1:.1:1], [-1:.1:1]);
>> V= Mx + My.^2 + Mz.^3;
>> %Representamos 5 planos de corte en ese cubo:
>> slice(Mx,My,Mz,V, [0], [0 0.5], [0 1]);
-1
-0.5
0
0.5
1
-1
-0.5
0
0.5
1
-1
-0.5
0
0.5
1
28
4. Programacin en Matlab
Los programas o funciones se escriben en ficheros-M, con
extensin .m.
Para ejecutar el programa desde la ventana de comandos se
teclea el nombre del fichero (sin extensin).
Ejemplo:
Fichero: programa.m
Ejecucin: >> programa
Tambin pueden ser llamados desde otro fichero-M.
Existen dos tipos de ficheros-M:
Ficheros de comandos o scripts: conjunto de comandos que se
ejecutan sucesivamente. Las variables que utiliza son las del espacio
de trabajo (Workspace).
Funciones: en general, una funcin recibe unos datos de entrada,
ejecuta unas rdenes y produce unos datos de salida. Las variables
que define pertenecen al espacio de trabajo de la funcin.
4.1. Conceptos bsicos
DATOS DE
ENTRADA
RDENES
FUNCIN
DATOS DE
SALIDA
4. Programacin en Matlab
Sintaxis general:
Comentarios: Comienzan con %(hasta fin de lnea).
Las primeras lneas de comentario se utilizan para describir
el programa. Es lo que aparece cuando se utiliza la ayuda:
>> help programa
Si una expresin es demasiado larga, se puede continuar en la
lnea siguiente, indicndolo con tres puntos: ...
En los scripts y funciones conviene terminar cada lnea con ;
En cualquier lnea del programa se puede forzar el fin de la
ejecucin con return.
En un fichero-M que contenga una funcin pueden incluirse sub-
funciones. Tienen nombres diferentes al fichero y slo son
visibles para las funciones del mismo fichero.
Matlab trabaja con memoria dinmica. A menudo es conveniente
reservar memoria para las variables (p.ej. para matrices muy
grandes) y tambin es conveniente liberar la memoria (clear
variables) cuando no se vayan a usar ms.
4.1. Conceptos bsicos
29
4. Programacin en Matlab
Entrada de datos:
v=input('Cadena de Caracteres del Mensaje')
Aparece en pantalla la cadena de caracteres.
Los datos que el usuario teclea se guardan en la
variable v.
v debe ser de un tipo numrico (escalar, array...).
Para leer una cadena, dos formas:
Introducir la cadena entre comillas simples.
Indicar a input que la entrada ser una cadena
(string), usando un segundo argumento, que es 's':
cadena = input('Mensaje', 's')
Ejemplo:
4.2. Funciones sencillas
de Entrada y salida
>> v=input ('Introduzca un nmero: ')
Introduzca un nmero: 4
v = 4
4. Programacin en Matlab
Salida de datos:
disp() escribe una cadena de caracteres o una variable.
disp('Cadena de caracteres')
disp(v), siendo v una variable
sprintf() escribe texto y/o datos en pantalla:
Sintaxis: sprintf('formato', variables)
Asigna lo que escribe a ans (la funcin fprintf no lo hace).
Si acaba en ; no visualiza nada, pero s asigna a la variable ans.
Sintaxis similar a printf() de C:
El formato usa comillas simples, NO dobles como en C
En Matlab todos los datos son reales y para escribir un dato como
entero (%d) ste debe tener nula su parte decimal.
4.2. Funciones sencillas
de Entrada y salida
>> a=2;
>> sprintf('%d',a)
ans = 2
>> a=2.4;
>> sprintf('%d',a)
ans = 2.400000e+000
>> a=2;
>> sprintf('Vale %f',a)
ans = Vale 2.000000
>> fprintf('Vale %f',a)
Vale 2.000000>> _
30
4. Programacin en Matlab: Un script
Ejemplo: (NOTA: Mostrar siempre la unidad de medida)
Escribir un programa script que analice un circuito con
cualquier nmero de resistencias, y una nica fuente de
voltaje.
El programa debe pedir el voltaje de la fuente Vs y el valor de
todas las resistencias, y debe calcular y mostrar:
Voltaje a travs de cada resistencia:
donde Vn es el voltaje en la resistencia con valor Rn, y
Req es la suma de todas las resistencias.
Potencia disipada por cada resistencia:
Resistencia total del circuito (Req).
Intensidad a travs del circuito:
Potencia disipada en todo el circuito:
Vs
Req
Rn
Vn =
2
2
Vs
Req
Rn
Pn =
Req
Vs
I =
I * Vs P =
4. Programacin en Matlab: Un script
%Calcular el voltaje a travs de cada resistencia, en un circuito
%con resistencias conectadas en serie
vs=input('- Introduzca el voltaje de la fuente: ');
Rn=input('- Resistencias en forma de vector fila (entre corchetes):\n');
Req=sum(Rn); %Suma total en serie
Vn=Rn*vs/Req;
Pn=Rn*vs^2/Req^2;
Tabla=[Rn' Vn' Pn'];
disp(' Resistencia Voltaje Potencia')
disp(' (Ohmios) (Voltios) (Vatios)')
disp(Tabla)
fprintf('\n- Resistencia total del circuito: %f Ohmios.', Req)
fprintf('\n- Intensidad de corriente del circuito: %f Amperios.', vs/Req)
fprintf('\n- Potencia total disipada en el circuito: %f Vatios.\n', vs*i)
Script en fichero VoltajeR.m
NOTA: No importa que fprintf no acabe en ; (con sprintf s
importa). Es recomendable poner un \n al final del ltimo
fprintf, para que el prompt siguiente empiece en una lnea.
C
o
m
e
n
t
a
r
i
o
s

i
n
i
c
i
a
l
e
s
:

s
e

m
u
e
s
t
r
a
n

c
o
n


>
>
h
e
l
p

V
o
l
t
a
j
e
R
(
e
n

l
o
s

n
o
m
b
r
e
s

d
e

f
i
c
h
e
r
o

s
e

r
e
c
o
m
i
e
n
d
a
d
i
s
t
i
n
g
u
i
r
t
a
m
b
i

n

m
a
y

s
c
u
l
a
s
/
m
in

s
c
u
l
a
s
)
.
31
4. Programacin en Matlab
Operadores aritmticos Operadores relacionales
Operadores lgicos
4.3. Operadores
Suma +
Resta -
Producto * .*
Divisin / ./ \ .\
Potenciacin ^ .^
Resto de una
divisin entera
Funcin rem(n,m)
Menor <
Menor o igual <=
Mayor o igual >=
Mayor >
Igual ==
Distinto ~=
Negacin ~A
Conjuncin (AND) A & B
Disyuncin (OR) A | B
Or exclusivo xor(A,B)
Los operadores relacionales y
lgicos actan elemento a elemento
en matrices y vectores, por lo que
deben tener el mismo tamao.
4. Programacin en Matlab
4.4. Sentencias
condicionales: if/else
if expresin_lgica
Sentencias
end
if expresin lgica, Sentencias, end.
o bien
if expresin_lgica
Sentencias 1
else
Sentencias 2
end
if exp_lgica1
Sentencias 1
elseif exp_lgica2
Sentencias 2
elseif ...
...
else
...
end
if n<0
disp(n es negativo)
elseif rem(n,2)==0
disp(n es par)
else
disp(n es impar)
end
EJEMPLO: Escribe si n es
par, impar o negativo
Sea el siguiente cdigo en un
fichero llamado F1.m
>> n=3
>> F1
32
switch expresin
case caso-1
sentencias-1
case caso-2
sentencias-2
case {caso-3,caso-4,caso-5,...}
sentencias-3
otherwise
sentencias-4
end
4. Programacin en Matlab
4.4. Sentencias
condicionales: switch
resp=input('escribe un nmero del 0 al 9: ');
switch resp
case 0
disp('Has escrito cero')
case 1
disp('Has escrito uno')
case {2,3,4,5}
disp('Has escrito un nmero entre 2 y 5')
otherwise
disp('Has escrito un nmero mayor que 5')
end
Fichero llamado F2.m
Es anloga a un conjunto de if
... elseif concatenados.
expresin debe tener un valor
numrico o de cadena de
caracteres.
4. Programacin en Matlab
4.4. Sentencias
iterativas: for y while
for variable = <Lista>
Sentencias
end
<Lista> es un vector: inicio:incremento:fin
Si no se pone el incremento es 1.
Puede ser un vector del tipo [2 9 3 5 2]
for i=1:n
v(i)=1;
end
Inicializa un
vector a 1
while expresin_lgica
Sentencias
end
for i=1:m
for j=1:n
A(i,j)=1/(i+j-1);
end
end
Crea la matriz de
Hilbert mxn
v=1:9;
i=1;
while v(i)<7
disp(v(i));
i=i+1;
end
Escribe (en columna)
1 2 3 4 5 6
33
4. Programacin en Matlab: Un script
Ejemplo: Escribir un programa script que convierta una cantidad de energa
entre distintas unidades de medida: Julios, caloras, o electronvoltios. El programa
debe pedir la cantidad de energa, su unidad, y la unidad de destino.
%Convertir energa entre Julios, caloras y electronvoltios
Ein = input('- Introduzca el valor de la Energa a convertir: ');
EinUnidad = input('- Introduzca su unidad (J, cal, eV):', 's');
EoutUnidad = input('- Introduzca la nueva unidad (J, cal, eV):', 's');
error=0;
switch EinUnidad % Convertimos a Julios
case 'J'
EJ=Ein;
case 'cal'
EJ=Ein / 0.239;
case 'eV'
EJ=Ein / 6.24e18;
otherwise
error=1;
end
S
c
r
i
p
t

e
n

f
i
c
h
e
r
o


C
E
n
e
r
g
i
a
.
m
switch EoutUnidad
case 'J'
Eout=Ein;
case 'cal'
Eout=Ein * 0.239;
case 'eV'
Eout=Ein * 6.24e18;
otherwise
error=1;
end
if error
disp('ERROR: Unidad incorrecta')
else
sprintf('E = %g %s.', Eout,EoutUnidad)
end
1 J = 0.239 cal
= 6.24e18 eV
Observe que lo que se asigna
a ans es el valor E = XXXX
4. Programacin en Matlab: Funciones
4.5. Funciones
function [s1,s2,s3,...] = Nombre_funcion(e1,e2,e3,...)
sentencias
s1=....
sentencias
s2=....
Argumentos de salida
function y=cuad(x)
% Calcula cuadrado
y=x*x;
Ejemplo: Funcin que
devuelve el cuadrado del
argumento de entrada.
Argumentos de entrada
Fichero: cuad.m
Las funciones se escriben en ficheros-M.
El nombre del fichero y el de la funcin DEBEN COINCIDIR.
>> help cuad
Calcula cuadrado
>> cuad(7)
ans = 49
34
4. Programacin en Matlab: Funciones
4.5. Funciones
function grados=radgrados(radianes)
%Cambia Radianes a Grados
grados = radianes * 180/pi;
Ejemplo: Funcin radgrados.m >>%Vector en radianes
>>rad=0:pi/3:pi;
>>%Conversin a grados
>>grados=radgrados(rad);
>>%Mostrar tabla:
>>Tabla = [rad; grados]'
Tabla =
0.0000 0.0000
1.0472 60.0000
2.0944 120.0000
3.1492 180.0000
4. Programacin en Matlab: Funciones
4.5. Funciones
function y=delta(x)
if x==0
y=1;
else
y=0;
end
Ejemplo: Funcin delta.
function [media, destip]=stat(v)
[m,n]=size(v);
if m==1
media=sum(v)/n;
destip=sqrt(sum(v.^2)/n-media^2);
end
Ejemplo: Calcula la media y la desviacin
tpica de un vector (debe ser un vector).
>>[a,b]=stat([1 5 6 7 9])
a=
5.6000
b=
2.6533
function t=tiempo
%Segundos en 2 productos
A=[1 2 3;4 5 6;7 8 9];
tic;
(A*A)*A;
t=toc;
Ejemplo: Funcin que
calcula el tiempo que se
tarda en realizar el doble
producto de dos matrices.
tiempo.m
delta.m
stat.m
35
4. Programacin en Matlab: Funciones
4.5. Funciones
function [suma,numero]=suma_pos(x)
%Suma componentes positivos
% [suma,numero]=suma_pos(x)
% suma es la suma de las componentes
% positivas del vector x
% numero es el nmero de componentes
% positivas de x
numero=0;
suma=0;
for i=1:length(x)
if x(i)>0
numero=numero+1;
suma=suma+x(i);
end;
end;
Ejemplo: Fichero suma_pos.m
>>help suma_pos
Suma componentes positivos
[suma,numero]=suma_pos(x)
suma es la suma de las componentes
positivas del vector x
numero es el nmero de componentes
positivas de x
>>x=-5:5;
>>suma_pos(x)
ans = 15
>>sum=suma_pos(x)
sum = 15
>>[sum,num]=suma_pos(x)
sum = 15
num = 5
>>trozos (1.9999)
ans = 3.9996
>>trozos (1.999999999999999)
ans = 4.0000
>> trozos (2)
ans = 8
%Dibujar la funcin:
>> fplot('trozos',[5,5])
4. Programacin en Matlab: Funciones
4.5. Funciones
function y=trozos(x)
%Funcin definida en 5 trozos
if x<=-3
y=0;
elseif -3<x & x<=-2
y=x^3;
elseif -2<x & x<=2
y=x^2;
elseif 2<x & x<=3
y=x;
else
y=0;
end;
Ejemplo: Funcin matemtica
definida a trozos: trozos.m
-5 -4 -3 -2 -1 0 1 2 3 4 5
-30
-25
-20
-15
-10
-5
0
5
36
4. Programacin en Matlab: Funciones
4.5. Funciones
function maxValor = onda_max (ini, fin)
%Representa en el rango [ini,fin] una onda provocada
% al tirar una piedra en el punto (0,0)
% Devuelve el valor ms alto en Z
[Mx,My] = meshgrid (ini : .5 : fin);
Mz = sin(sqrt(Mx.^2 + My.^2)) ./ sqrt(Mx.^2 + My.^2);
surfc(Mx,My,Mz)
maxValor=max(max(Mz));
Ejemplo: Fichero onda_max.m
>>onda_max(-7.5, 7.5)
ans = 0.9589
>>onda_max(0.5, 8)
ans = 0.9187
0
2
4
6
8
0
1
2
3
4
5
6
7
8
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
-10
-5
0
5
10
-10
-5
0
5
10
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
>>onda_max(1,22)
ans = 0.6985
0
5
10
15
20
25
0
5
10
15
20
25
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
4. Programacin en Matlab
Funcin lgica: find
Halla los ndices de una matriz que cumplen
cierta condicin, evitando tener que
recorrerla con un bucle, y un if.
Formato: find (condicin)
Devuelve un vector-fila con las posiciones
de la matriz que cumplen la condicin.
Si la matriz es bidimensional devuelve
las posiciones con un nico ndice (en
una matriz-columna): numerando los
elementos, por columnas.
Para obtener los nmeros de fila y
columna, usar:
[row, col] = find(condicin)
Condiciones distintas a cada columna:
Ej.: En la matriz Y, obtener un vector columna con las
las filas cuya columna 2 es mayor a 5 y columna 3
menor a 6: >>find( Y(:,2)>5 & Y(:,3)<6 )
ans = 1
>> x=[1 6 4 3 7];
>> Y=[x;1:5];
>>a1 = find(x>4)
a1 = 2 5
>>a2 = find(Y>4)'
a2 = 3 9 10
%Valores:
>>y(a2)
ans = 6 7 5
>>[r,c] = find
(Y>1 & Y<4)
r = 2
2
1
c = 2
3
4

S-ar putea să vă placă și