You are on page 1of 63

Da 2

- Matemticas simblicas. Cadenas


- Hipermatrices, estructuras, celdas.

- Programacin en MATLAB.
- Ejercicios.

Matemtica Simblica
El toolbox de matemtica simblica es una coleccin de
herramientas para MATLAB que se usan para manipular y
resolver expresiones simblicas.
Las expresiones simblicas son cadenas de caracteres, o
arreglos de cadenas de caracteres que representan
nmeros, funciones, operadores y variables.

Algunos ejemplos de expresiones simblicas

f1 = '1/(2*x^2n)'
f2 = '1/sqrt(2*x)'
f3 = 'cos(x^2) - sen(2*x)'
M = sym('[a, b; c, d]')

f = int('x^3/sqrt(1-x)', 'a', 'b')

Para efectuar la derivada de una funcin


utilizamos el comando diff.
diff('cos(x)')
como resultado tenemos
ans = -sin(x)

Nota: Las expresiones simblicas debern ser escritas


sin espacios.

Para definir matrices hacemos:


M = sym('[a, b; c, d]')
Y el clculo del determinante lo hacemos :
determ(M)
Despus de la ejecucin tenemos...

M=
[ a, b]

[ c, d]
ans =
a*d-b*c

Variables simblicas
El comando symvar, se utiliza para averiguar la variable
simblica en la expresin.
symvar('a*x+y')
symvar('a*t+s/(u+3)')

symvar('sin(omega)')
symvar('3*i+4*j')
symvar('y+3*s', 't')

Muchos comandos dan la opcin, si se desea, de


especificar las variables independientes:
diff('x^n')
diff('x^n', 'x')
diff('x^n', 'n')
ans = x^n*n/x
ans = x^n*n/x
ans = x^n*log(x)

Extraccin de numeradores y denominadores


El comando numden() se utiliza para determinar el
denominador
y
numerador
de
expresiones
racionales.
clear;

a = sym('a');
b = sym('b');
x = sym('x');
f = a*x^2/(b-x)
[n m] = numden(f)

Otro ejemplo es:


clear;
x = sym('x');
f = 3/2*x^2+2/3*x-3/5

[n m] = numden(f)

Operaciones algebraicas estndar


Las cuatro operaciones de suma, resta,
multiplicacin y divisin se realizan de manera
similar, como ejemplo consideremos:

clear;

display('suma'); f+g
display('resta');f-g

x = sym('x');
f = 2*x^2+3*x-5
g = x^2-x+7

display('multiplicacion');f*g
display('division'); f/g

La respuesta que produce es:

suma
3*x^2+2*x+2

resta
x^2+4*x-12

multiplicacin
(2*x^2+3*x-5)*(x^2-x+7)

divisin
(2*x^2+3*x-5)/(x^2-x+7)

Sustitucin de variables
Para remplazar el valor de una variable por otra
variable o nmero, utilizamos el comando subs()

a = sym('a');
b = sym('b');
c = sym('c');
x = sym('x');
f = a*x^2+b*x+ c

subs(f, 's', 'x)


subs(f, 'A', 'a')

Podemos guardar variables de tipo


cadena, con comillas simples

Como Matlab trabaja


con vectores y
matrices, podemos
utilizar la funcin size

Tambin podemos insertarla


con comillas

Cuando se utiliza la funcin


double , nos da los valores en
cdigo assci

Poniendo la funcin
char(ans), nos devolver el
valor nuevamente en string

Para hacer una concatenacin, tendremos


que hacerlo como si estuvieras hacindolo
como un vector.

Para hacer un apilamiento de los elementos


de la cadena, veremos que no podemos
hacerlo de esta manera, pues nos dar un
error
Para realizarlo lo tenemos que hacer de la
siguiente manera

Al igual que en los vectores, marcamos las


coordenadas y nos mostrara la ubicacin de cada
una de las letras.
Con size tambin podemos visualizar el
tamao de la matriz de tipo cadena.

Imprimir en consola

Imprimir en cadena o sea en


una variable

Extraer un token en una variabl

Reemplazar una letra

Buscar un index

Definicin de una hipermatriz

Acceso a una hipermatriz

Definicin de una hipermatriz

Definicin de una hipermatriz

Extraccin de una capa

Extraccin de una capa(otra forma)

Declaracin de un campo de
tipo cadena

Declaracin de un campo de
tipo numerico
Declaracin una
estructura

Campos de una estructura

Estructuras anidadas

Array de estructuras con el primer


elemento vaco

Nos devuelve el dato


guardado en ubicacin

Un Array de 1 x 2

Acceso al array con {}

Aadir un
elemento al
array

Array 1 x 3

Conversin a struct

De vuelta a celdas 3
x1
Transpuesta a 1 x 3

La transpuesta no afecta a los


contenidos

Funciones de entrada y salida


Input
Esta funcin permite imprimir un mensaje en la
lnea de comandos de Matlab y recuperar como
valor de retorno un valor numrico o el
resultado de una expresin tecleada por el
usuario.
Ejemplo: n = input('Ingrese un nmero: ');

disp
Esta funcin permite imprimir en pantalla un
mensaje de texto o el valor de una matriz,
pero sin imprimir su nombre. En realidad,
disp siempre imprime vectores y/o matrices:
las cadenas de caracteres son un caso
particular de vectores.
Ejemplo: disp('El programa ha terminado');

Programacin- ciclos

Sentencia If:
En su forma ms simple, la sentencia if se
describe como sigue:
if condicion

sentencias
End
Observe que la condicin no va encerrada
entre parntesis.

Existe tambin la "bifurcacin mltiple", en la que pueden


concatenarse tantas condiciones como se desee, y que tiene
la forma:
if condicion1
bloque1
elseif condicion2

bloque 2
elseif condicion3
bloque 3
else % opcin por defecto para cuando no se cumplan las otras
condiciones.

bloque 4
end

NOTA:El uso de else es opcional

Ejemplo de uso de if
nro = input('Ingrese un nmero positivo: ');
if mod(nro,2)==0 disp('es par');
else disp('es impar');
end

Ejemplo de uso de if/elseif


nro = input('Ingrese un nmero positivo: ');
if nro==1 disp('Ud. ingreso 1');
elseif nro==2 disp('Ud. ingreso 2');
elseif nro==3 disp('Ud. ingreso 3');
else disp('El nmero es mayor que 3');
end

Ciclo for
En este tipo de ciclo, ya se sabe cuntas veces se
realizar el bucle, es decir, cuntas veces se ejecutar
el conjunto de instrucciones dentro del ciclo. La
cantidad de veces est determinada en la seccin de
decisin del ciclo. La sintaxis del ciclo for en Matlab es
la siguiente:
for variable=valor_inicial:incremento:valor_final

conjunto_sentencias
end

Ejemplo 1: Calcular la suma de los n primeros trminos de


la sucesin 1, 2x, 3x^2, 4x^3, ...
n=input('Cuntos trminos quieres sumar? ');
x=input('Dame el valor del numero x ');
suma=1;
for i=2:n

suma=suma+i*x^(i-1);
end
disp('El valor pedido es')

disp(suma)

Ejemplos

Ciclo while
En este tipo de ciclo, NO se sabe cuntas veces se
realizar el bucle, es decir, cuantas veces se
ejecutar el conjunto de instrucciones dentro del
ciclo. La cantidad de veces NO est determinada en
la seccin de decisin del ciclo. En esta seccin se
determina la condicin, que deber ser verdadera,
para que el ciclo siga funcionando. La sintaxis del
ciclo while en Matlab es la siguiente:
while condicion
sentencias
end

Ciclo While
Las sentencias se siguen ejecutando mientras haya
elementos distintos de cero en condicin, es decir,
mientras haya algn o algunos elementos true. El
bucle se termina cuando todos los elementos de
condicin son false (es decir, cero).
%escribe nmeros
menores a 5
a=3;
while a < 5
disp ('a es menor que 5
ya que vale')
disp (a)
a = a + 1;
end

% Escribe los enteros


pares de 2 a 10
clc
i=2;
while i<=10
disp(i);
i=i+2;
End

switch
Esta sentencia realiza la funcin anloga a un conjunto
if...elseif concatenados. Su forma general es:
switch switch_expresion
case case_expr1,

bloque 1
case {case_expr2, case_expr3, case_expr4, ...},

bloque 2

...

otherwise,

bloque 3

end

NOTA: Al igual que con else, el uso de otherwise es


opcional

Al principio se evala la switch_expresion, cuyo resultado


debe ser un nmero escalar o una cadena de caracteres.
Este resultado se compara con las case_expr, y se ejecuta
el bloque de sentencias que corresponda con ese
resultado. Si ninguno es igual a switch_expresion se
ejecutan las sentencias correspondientes a otherwise
(que significa de otra manera).

Ejemplo de uso switch:


nro = input('Ingrese un nmero positivo: ');
switch nro
case 1, disp('Ud. ingreso 1'),
case 2, disp('Ud. ingreso 2')
case 3, disp('Ud. ingreso 3')
otherwise, disp('El nmero es mayor que 3')
end

Cmo realizar nuestras propias funciones


Los scripts slo aportan a Matlab la manera de
realizar tareas de una manera ms rpida.
Las
funciones
permiten
definir
funciones
enteramente anlogas a las de Matlab, con su
nombre, sus argumentos y sus valores de retorno.
Los archivos *.m que definen funciones permiten
extender las posibilidades de Matlab; de hecho
existen bibliotecas de archivos *.m que se venden
(toolkits) o se distribuyen gratuitamente.

Tanto en scripts como en funciones, la primer lnea


de comentarios conforman el help.
Ejemplo:
Dado el script llamado cuadrado.m:
% este es un script que eleva un nmero al cuadrado
nro = input('Ingrese un nmero positivo: ');
nro = nro * nro;
disp('El nmero ingresado elevado al cuadrado es: ');
disp(nro);

Y cuando escribimos en el Workspace:


>> help cuadrado

Construccin de funciones
La primer lnea de un archivo llamado ejemplo.m que
define una funcin tiene la forma:
function [lista de valores de retorno] = ejemplo (lista
de argumentos) donde ejemplo es el nombre de la
funcin.
Entre corchetes y separados por coma van los valores
de retorno (siempre que haya ms de uno), y entre
parntesis tambin separados por comas los
argumentos.

Puede haber funciones sin valores de retorno y


tambin sin argumentos. Si no hay valores de
retorno se omiten los corchetes y el signo igual (=);
Si slo hay un valor de retorno, no hacen falta poner
corchetes. Tampoco hace falta poner parntesis si
no hay argumentos.

Ejemplo de funciones
% funcin que retorna la divisin y el resto de
la misma de dos nmeros dados
%USO:

[div, resto] = divmod(nro1, nro2);


function [division, modulo] = divmod(x,y);
division = x/y;
modulo = mod(x,y);

function [] = factorial(n);
if n < 0
disp('Ingrese un nmero positivo !')
return;
end;
if n==0 | n==1
disp('El factorial de ');
disp(n);
disp('es 1');
return;
end;
mult = 1;
for i = 1:n;
mult = mult * i;
end;
disp('El factorial de '); disp(n); disp('es: '); disp(mult);

function [mean stdet]= stat(x)


%Esta funcin calcula media y la desviacin tpica de x
% Uso:[mean,stdev]=stat(x)
Funcin
%el fichero debe llamarse stat.m
n=length(x);
mean=media();
stdev=sqrt(sum((x-mea).^2/n);
function mean=media()
mean=sum(x)/length(x)
end
end

anidada

function [mean stdev]= stat(x)


%Esta funcin calcula media y la desviacin tpica de x
% Uso:[mean,stdev]=stat(x)
%el fichero debe llamarse stat.m
n=length(x);
Subfuncin
mean=media(x);
stdev=sqrt(sum((x-mea).^2/n);
function mean=media(x)
mean=sum(x)/length(x)

Documentacin html -ayuda


%% Este es un ejemplo de documentacin
%implementado en una grfica
%% La frmula que se va autilizar para graficar es
% $$ H=|\frac{1}{L}(1-10^{a*L})|$$
%
%donde L es la variable independiente,
%y a una costante
%% Aqui comienza el guion
clc, clear, close all
a=0.3; %constante de atenuacin
L=0.1:0.1:10 %longitud del experimento
H= abs((1./L).*(1-10.^(a*L))); %seal
plot(L,H, 'LineWidth',4) % graficando
%fin del programa

2. Importar y exportar datos


Antes de estudiar opciones ms complejas, es interesante
comentar que la opcin de copiar y pegar (Copy/Paste)
puede ser adecuada en muchos casos. Por ejemplo, copiar
elementos de Excel y depositarlos en Matlab entre corchetes
funciona con frecuencia.

Nota: Esta opcin puede generar problemas por ejemplo,


segn se hayan introducido los nmeros decimales.

Utilizando el Current Directory


Si tenemos un fichero .txt, .data,... y lo hemos situado en el directorio actual de
trabajo en Matlab, dndole clic con el botn derecho tenemos la opcin Import
Data. Se abre entonces un men donde se nos ofrecen posibilidades como elegir
entre varios separadores de columnas. Si todo est como queremos la pestaa
Next crea una variable con el nombre del fichero y el contenido del mismo que
ya puede ser usada en la sesin de trabajo

Podemos importar los datos de tipo


estructura, vector matriz dataset, etc.

Aqu podemos ver que


se mando como celdas

Comandos fopen, fclose y fprintf


Estos comandos sirven para abrir y cerrar ficheros.
Para abrir un fichero, se utiliza el siguiente comando:

variable = fopen(fichero,permiso) donde:


- variable es el nombre de la variable que guarda el
identificador del fichero.
- fichero especifica el nombre externo y la direccin del
archivo.

- permiso indica el modo de apertura del fichero:

r abre un fichero existente para lectura.

r+ abre un fichero existente para lectura y escritura.


w crea un fichero nuevo para escritura.
w+ crea un fichero nuevo para lectura y escritura.

Es importante destacar este comando lo que hace es poner


en contacto el programa con un fichero, no lo visualiza en
pantalla. Para trabajar con ficheros lo primero ser abrirlo y
lo ltimo cerrarlo.

Para cerrar un fichero se utiliza la funcin: fclose(fid) que


cierra el fichero de
identificador fid y devuelve 1 si el cierre es correcto y 0 si es
incorrecto.

Para escribir en un fichero se utiliza el comando:


fprintf(fid,format,A,.) que escribe los elementos
especificados en A (que en general es una matriz) en el
fichero de identificador fid (previamente abierto) con el
formato especificado en format. As, la funcin fprintf
dirige su salida a un fichero indicado por el indicador.

Formato de datos:
%d Enteros.
%f Reales con punto fijo.
%e Reales con formato exponencial.

%g Utiliza uno de los formatos anteriores; el que d la mayor


precisin en el
menor espacio.

Si se utiliza el comando fprintf(format,A,.) la escritura de


datos se realiza en
la pantalla.

Ejemplo:
Creamos un fichero ASCII de nombre resultados que
contiene los valores de la
funcin exponencial para valores de la variable entre 0 y 1
separados una dcima y lo representamos en la pantalla.
>>x=0:.1:1
>>y=[x;exp(x)];
>>fid=fopen(resultado.txt,w);
>> fprintf(fid,%6.2f %12.8f \n, y);

Comando fscanf
La lectura de datos a partir de un fichero ASCII se realiza
mediante los
comandos:
[A,cont]=fscanf(fid,formato) que lee datos con el formato
especificado del fichero abierto con el identificador fid, en
un vector columna de nombre A. cont es el nmero de datos
ledos.
[A,cont]=fscanf(fid,formato,size) que lee datos con el
formato especificado del fichero abierto con el identificador
fid y los escribe en la matriz A de tamao size. cont es el
nmero de datos ledos.

Ejemplo:
Se supone que en la carpeta de trabajo de Archivos: que yo
genere, se encuentra un archivo, de nombre datos.txt, cuyo
contenido es:
12345
6 7 8 9 10
>>fid=fopen(datos.txt,r)

>>[A,cont]=fscanf(fid,%d)
La salida es el vector columna de contenido:1 2 3 4 5 6 7 8 9
10 y cont=10.

Otra posibilidad:
>>[A,cont]=fscanf(fid,%d,[2,5])
A=
13579

2 4 6 8 10
cont=10

Nota: Si realizamos estas operaciones seguidas tendremos


problemas en la segunda debido a que el fichero ha sido
anteriormente ledo y es necesario rebobinarlo si se quiere leer
de nuevo. Entonces se utiliza
>>frewind(fid)

Otras posibilidades:
>>[A,cont]=fscanf(fid,%d,[3,3])
>>[A,cont]=fscanf(fid,%d,[4,4])
>>[A,cont]=fscanf(fid,%d,[4,inf])
>> %se est fijando como nmero de columnas de la matriz el
valor mnimo que permita la lectura de todos los datos del
fichero. La salida es la misma que en el caso anterior.

Trabajando excell con Matlab


Trabajando con Excel
Matlab permite una muy buena conexin con este programa, a veces si los datos
son adecuados, la opcin copiar en Excel y pegar en Matlab entre corchetes y
dando un nombre a la variable creada funciona directamente.

Esto nos obliga a que los nmeros estn definidos en Excel como en Matlab, por
ejemplo, los decimales con puntos y no con comas.

Si se dispone de la toolbox exlink la conexin con este


programa es total y directa:
Elegir
en
Excel
del
men
Herramientas/
Complementos/examinar: (Matlabtoolbox- excelink). Aparece entonces
en excel una barra de herramientas con: put matriz, get matriz
y evaluate.

Excel-Matlab: Se crean unos valores en Excel y se selecciona


put matriz.
Se abre Matlab y pregunta por el nombre para esa matriz. Se
crea as una nueva variable en el Workspace sin ningn
problema de compatibilidad.
- Matlab.Excel: Se utiliza get matriz. Esto abre el Workspace
de Matlab y
desde all se exporta la matriz.

Ejercicios
1. Dada una recta ax+by+c=0, crear un programa que nos diga si un
punto (x,y) pertenece a dicha recta, est por encima o por debajo de
ella.
2. Suponga que en un estado de Estados Unidos la edad legal para beber
es 21. Escriba y pruebe una funcin para determinar si una persona es lo
suficientemente madura para beber.
3. Crear un archivo de funcin cuya entrada sea una matriz la x y cuyas
salidas sean la media de x y su desviacin tpica.
4. En un comercio se venden cajas de tornillos. Su precio depende del
nmero de cajas comprados: hasta 100 cajas el precio de la caja es de 2
euros, desde 101a 200 cajas el precio es 1,5 euros y, a partir de 201
cajas el precio es de 1 euro. Elaborar un programa que pregunte el
nmero de cajas demandadas y que indique el precio de la unidad y el
coste total del pedido.

5. Crear un programa que calcula la matriz A de elementos aij=i^2+j.

6. Crear un fichero de texto con el block de notas con los


datos:
1,2,3,4,5,6,7,8,9,10. Importarlo desde Matlab y crear un
vector con su contenido.

7. Sea el fichero datos.txt que contiene la siguiente


informacin: 7 5 2 1 9 3 4 5 7 8 4
Almacenar estos datos en una matriz A de 4 filas y 3
columnas.
8. Crear un fichero de Excel con las cantidades compradas
de varios productos y su importe por unidad. Cargarlo en
Matlab y calcular all el coste total de la compra.

You might also like