matlab-dia2
TRANSCRIPT
-
7/25/2019 MATLAB-DIA2
1/63
Da 2
- Matemticas simblicas. Cadenas
- Hipermatrices, estructuras, celdas.
- Programacin en MATLAB.- Ejercicios.
-
7/25/2019 MATLAB-DIA2
2/63
Matemtica Simblica
El toolbox de matemtica simblica es una coleccin deherramientas para MATLAB que se usan para manipular yresolver expresiones simblicas.
Las expresiones simblicas son cadenas de caracteres, o
arreglos de cadenas de caracteres que representannmeros, funciones, operadores y variables.
-
7/25/2019 MATLAB-DIA2
3/63
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')
-
7/25/2019 MATLAB-DIA2
4/63
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.
-
7/25/2019 MATLAB-DIA2
5/63
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
-
7/25/2019 MATLAB-DIA2
6/63
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')
-
7/25/2019 MATLAB-DIA2
7/63
-
7/25/2019 MATLAB-DIA2
8/63
Extraccin de numeradores y denominadores
El comando numden() se utiliza para determinar el
denominador y numerador de expresionesracionales.
clear;
a = sym('a');b = sym('b');
x = sym('x');
f = a*x^2/(b-x)
[n m] = numden(f)
-
7/25/2019 MATLAB-DIA2
9/63
-
7/25/2019 MATLAB-DIA2
10/63
Operaciones algebraicas estndar
Las cuatro operaciones de suma, resta,
multiplicacin y divisin se realizan de manerasimilar, como ejemplo consideremos:
clear;
x = sym('x');
f = 2*x^2+3*x-5
g = x^2-x+7
display('suma'); f+g
display('resta');f-g
display('multiplicacion');f*g
display('division'); f/g
-
7/25/2019 MATLAB-DIA2
11/63
La respuesta que produce es:
suma
3*x^2+2*x+2resta
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)
-
7/25/2019 MATLAB-DIA2
12/63
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')
-
7/25/2019 MATLAB-DIA2
13/63
Podemos guardar variables de tipocadena, con comillas simples
Tambin podemos insertarlacon comillasComo Matlab trabaja
con vectores ymatrices, podemos
utilizar la funcin sizeCuando se utiliza la funcin
double , nos da los valores encdigo assci
Poniendo la funcichar(ans), nos devolvevalor nuevamente en
-
7/25/2019 MATLAB-DIA2
14/63
Para hacer una concatenacin, tendque hacerlo como si estuvieras haci
como un vector.
Para hacer un apilamiede la cadena, verem
hacerlo de esta maneerr
Para realizarlo lo tensiguient
Al igual que en los vectores, marcacoordenadas y nos mostrara la ubicac
una de las letras.
Con size tambin podemos visualizatamao de la matriz de tipo cade
Imprimir en consola
-
7/25/2019 MATLAB-DIA2
15/63
Imprimir en consola
Imprimir en cauna va
Extraer
Reemplazar una letra
Buscar un index
-
7/25/2019 MATLAB-DIA2
16/63
Definicin de una hipermatriz
Acceso a una hiperma
Definicin de una hiper
-
7/25/2019 MATLAB-DIA2
17/63
-
7/25/2019 MATLAB-DIA2
18/63
-
7/25/2019 MATLAB-DIA2
19/63
Estructuras anidadas
Array de estructuras con elelemento vaco
Nos devuelve el datoguardado en ubicacin
-
7/25/2019 MATLAB-DIA2
20/63
Un Array de 1 x 2
Acceso al array con {}
Aadir un
elemento alarray
-
7/25/2019 MATLAB-DIA2
21/63
Array 1 x 3
Conv
De vuelta a celdas 3x1
Transpuesta a 1 x 3
La transpuesta no afecta a locontenidos
-
7/25/2019 MATLAB-DIA2
22/63
Funciones de entrada y salida
Input
Esta funcin permite imprimir un mensaje en lalnea de comandos de Matlab y recuperar comovalor de retorno un valor numrico o elresultado de una expresin tecleada por el
usuario.Ejemplo: n = input('Ingrese un nmero: ');
-
7/25/2019 MATLAB-DIA2
23/63
disp
Esta funcin permite imprimir en pantalla unmensaje 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 casoparticular de vectores.
Ejemplo: disp('El programa ha terminado');
-
7/25/2019 MATLAB-DIA2
24/63
Programacin- ciclos
-
7/25/2019 MATLAB-DIA2
25/63
Sentencia If:
En su forma ms simple, la sentencia if se
describe como sigue:
if condicion
sentenciasEnd
Observe que la condicin no va encerrada
entre parntesis.
-
7/25/2019 MATLAB-DIA2
26/63
-
7/25/2019 MATLAB-DIA2
27/63
Ejemplo de uso de if/elseif
nro = input('Ingrese un nmero posif 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
end
Ejemplo de uso de if
nro = input('Ingrese un nmero positivo: ');if mod(nro,2)==0 disp('es par');
else disp('es impar');end
-
7/25/2019 MATLAB-DIA2
28/63
Ciclo for
En este tipo de ciclo, ya se sabe cuntas veces serealizar el bucle, es decir, cuntas veces se ejecutarel conjunto de instrucciones dentro del ciclo. Lacantidad de veces est determinada en la seccin dedecisin del ciclo. La sintaxis del ciclo for en Matlab esla siguiente:
for variable=valor_inicial:incremento:valor_final
conjunto_sentencias
end
-
7/25/2019 MATLAB-DIA2
29/63
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)
Ejemplo 1: Calcular la suma de los n primeros trminos dela sucesin 1, 2x, 3x^2, 4x^3, ...
Ej l
-
7/25/2019 MATLAB-DIA2
30/63
Ejemplos
-
7/25/2019 MATLAB-DIA2
31/63
Ciclo While
-
7/25/2019 MATLAB-DIA2
32/63
Ciclo While
Las sentencias se siguen ejecutando mientras hayaelementos distintos de cero en condicin, es decir,
mientras haya algn o algunos elementos true. Elbucle se termina cuando todos los elementos decondicin son false (es decir, cero).
%escribe nmerosmenores a 5
a=3;while a < 5disp ('a es menor que 5ya que vale')disp (a)a = a + 1;
end
% Escribe los enterospares de 2 a 10
clci=2;while i
-
7/25/2019 MATLAB-DIA2
33/63
switch
Esta sentencia realiza la funcin anloga a un conjuntoif...elseifconcatenados. Su forma general es:
switch switch_expresioncase 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
-
7/25/2019 MATLAB-DIA2
34/63
NOTA: Al igual que con else, el uso de otherwise esopcional
Al principio se evala la switch_expresion, cuyo resultadodebe ser un nmero escalar o una cadena de caracteres.
Este resultado se compara con las case_expr, y se ejecutael bloque de sentencias que corresponda con eseresultado. Si ninguno es igual a switch_expresion seejecutan las sentencias correspondientes a otherwise(que significa de otra manera).
Ejemplo de uso switch:
nro = input('Ingrese un nmeroswitch nrocase 1, disp('Ud. ingreso 1'),case 2, disp('Ud. ingreso 2')case 3, disp('Ud. ingreso 3')otherwise, disp('El nmero es
end
C li t i f i
-
7/25/2019 MATLAB-DIA2
35/63
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 funcionesenteramente anlogas a las de Matlab, con sunombre, sus argumentos y sus valores de retorno.
Los archivos *.m que definen funciones permitenextender las posibilidades de Matlab; de hechoexisten bibliotecas de archivos *.m que se venden(toolkits) o se distribuyen gratuitamente.
-
7/25/2019 MATLAB-DIA2
36/63
Tanto en scripts como en funciones, la primer lneade comentarios conforman el help.
Ejemplo:Dado el script llamado cuadrado.m:
% este es un script que eleva un nmero al cuadradonro = 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
-
7/25/2019 MATLAB-DIA2
37/63
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 (listade argumentos) donde ejemplo es el nombre de lafuncin.
Entre corchetes y separados por coma van los valoresde retorno (siempre que haya ms de uno), y entreparntesis tambin separados por comas losargumentos.
-
7/25/2019 MATLAB-DIA2
38/63
Puede haber funciones sin valores de retorno ytambin sin argumentos. Si no hay valores deretorno se omiten los corchetes y el signo igual (=);
Si slo hay un valor de retorno, no hacen falta ponercorchetes. Tampoco hace falta poner parntesis sino hay argumentos.
Ejemplo de funciones
-
7/25/2019 MATLAB-DIA2
39/63
Ejemplo de funciones
% funcin que retorna la divisin y el resto dela misma de dos nmeros dados%USO:
[div, resto] = divmod(nro1, nro2);
function [division, modulo] = divmod(x,y);division = x/y;modulo = mod(x,y);
-
7/25/2019 MATLAB-DIA2
40/63
-
7/25/2019 MATLAB-DIA2
41/63
function [mean stdet]= stat(x)%Esta funcin calcula media y la desviacin tpica de x% Uso:[mean,stdev]=stat(x)
%el fichero debe llamarse stat.mn=length(x);mean=media();stdev=sqrt(sum((x-mea).^2/n);
function mean=media()
mean=sum(x)/length(x)endend
Funcin anid
-
7/25/2019 MATLAB-DIA2
42/63
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.mn=length(x);mean=media(x);stdev=sqrt(sum((x-mea).^2/n);
function mean=media(x)mean=sum(x)/length(x)
Subfunci
Documentacin html -ayuda
-
7/25/2019 MATLAB-DIA2
43/63
%% 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 guionclc, clear, close alla=0.3; %constante de atenuacinL=0.1:0.1:10 %longitud del experimentoH= abs((1./L).*(1-10.^(a*L))); %sealplot(L,H, 'LineWidth',4) % graficando%fin del programa
-
7/25/2019 MATLAB-DIA2
44/63
2. Importar y exportar datos
-
7/25/2019 MATLAB-DIA2
45/63
. p y p
Antes de estudiar opciones ms complejas, es interesantecomentar 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 corchetesfunciona con frecuencia.
Nota: Esta opcin puede generar problemas por ejemplo,segn se hayan introducido los nmeros decimales.
Utilizando el Current Directory
-
7/25/2019 MATLAB-DIA2
46/63
Utilizando el Current Directory
Si tenemos un fichero .txt, .data,... y lo hemos situado en el directorio actual detrabajo en Matlab, dndole clic con el botn derecho tenemos la opcin ImportData. Se abre entonces un men donde se nos ofrecen posibilidades como elegirentre 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 queya puede ser usada en la sesin de trabajo
P d i t l d t
-
7/25/2019 MATLAB-DIA2
47/63
Podemos importar los datosestructura, vector matriz dat
-
7/25/2019 MATLAB-DIA2
48/63
s
Comandos fopen fclose y fprintf
-
7/25/2019 MATLAB-DIA2
49/63
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 elidentificador del fichero.
- fichero especifica el nombre externo y la direccin delarchivo.
- permiso indica el modo de apertura del fichero:
-
7/25/2019 MATLAB-DIA2
50/63
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
-
7/25/2019 MATLAB-DIA2
51/63
Es importante destacar este comando lo que hace es poneren contacto el programa con un fichero, no lo visualiza enpantalla. Para trabajar con ficheros lo primero ser abrirlo ylo ltimo cerrarlo.
Para cerrar un fichero se utiliza la funcin: fclose(fid) quecierra el fichero de
identificador fid y devuelve 1 si el cierre es correcto y 0 si esincorrecto.
Para escribir en un fichero se utiliza el comando:
-
7/25/2019 MATLAB-DIA2
52/63
Para escribir en un fichero se utiliza el comando:fprintf(fid,format,A,.) que escribe los elementosespecificados en A (que en general es una matriz) en elfichero de identificador fid (previamente abierto) con el
formato especificado en format. As, la funcin fprintfdirige su salida a un fichero indicado por el indicador.
F t d d t
-
7/25/2019 MATLAB-DIA2
53/63
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 mayorprecisin en el
menor espacio.
Si se utiliza el comando fprintf(format,A,.) la escritura de
datos se realiza en
la pantalla.
Ejemplo:
-
7/25/2019 MATLAB-DIA2
54/63
Ejemplo:
Creamos un fichero ASCII de nombre resultados que
contiene los valores de la
funcin exponencial para valores de la variable entre 0 y 1separados 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
l d d d f h l
-
7/25/2019 MATLAB-DIA2
55/63
La lectura de datos a partir de un fichero ASCII se realizamediante los
comandos:
[A,cont]=fscanf(fid,formato) que lee datos con el formatoespecificado del fichero abierto con el identificador fid, enun vector columna de nombre A. cont es el nmero de datosledos.
[A,cont]=fscanf(fid,formato,size) que lee datos con elformato especificado del fichero abierto con el identificadorfid y los escribe en la matriz A de tamao size. cont es elnmero de datos ledos.
Ej l
-
7/25/2019 MATLAB-DIA2
56/63
Ejemplo:
Se supone que en la carpeta de trabajo de Archivos: que yogenere, se encuentra un archivo, de nombre datos.txt, cuyocontenido es:
1 2 3 4 5
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 910 y cont=10.
Otra posibilidad:
-
7/25/2019 MATLAB-DIA2
57/63
Otra posibilidad:
>>[A,cont]=fscanf(fid,%d,[2,5])
A=
1 3 5 7 92 4 6 8 10
cont=10
Nota: Si realizamos estas operaciones seguidas tendremo
-
7/25/2019 MATLAB-DIA2
58/63
p gproblemas en la segunda debido a que el fichero ha sidanteriormente ledo y es necesario rebobinarlo si se quiere leede 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 evalor mnimo que permita la lectura de todos los datos defichero. La salida es la misma que en el caso anterior.
Trabajando excell con Matlab
-
7/25/2019 MATLAB-DIA2
59/63
Trabajando excell con MatlabTrabajando con Excel
Matlab permite una muy buena conexin con este programa, a veces si los datosson 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, porejemplo, los decimales con puntos y no con comas.
Si se dispone de la toolbox exlink la conexin con esteprograma es total y directa:
-
7/25/2019 MATLAB-DIA2
60/63
programa es total y directa:
Elegir en Excel del men Herramientas/ Comple-
mentos/examinar: (Matlabtoolbox- excelink). Aparece entoncesen excel una barra de herramientas con: put matriz, get matrizy evaluate.
Excel Matlab: Se crean unos valores en Excel y se selecciona
-
7/25/2019 MATLAB-DIA2
61/63
Excel-Matlab: Se crean unos valores en Excel y se seleccionaput matriz.
Se abre Matlab y pregunta por el nombre para esa matriz. Secrea as una nueva variable en el Workspace sin ningnproblema de compatibilidad.
- Matlab.Excel: Se utiliza get matriz. Esto abre el Workspacede Matlab y
desde all se exporta la matriz.
Ejercicios1. Dada una recta ax+by+c=0, crear un programa que nos dig
-
7/25/2019 MATLAB-DIA2
62/63
1. Dada una recta ax by c 0, crear un programa que nos digpunto (x,y) pertenece a dicha recta, est por encima o por debella.
2. Suponga que en un estado de Estados Unidos la edad legal para
es 21. Escriba y pruebe una funcin para determinar si una personsuficientemente madura para beber.
3. Crear un archivo de funcin cuya entrada sea una matriz fila xsalidas sean la media de x y su desviacin tpica.
4. En un comercio se venden cajas de tornillos. Su precio depen
nmero de cajas comprados: hasta 100 cajas el precio de la cajaeuros, desde 101a 200 cajas el precio es 1,5 euros y, a partircajas el precio es de 1 euro. Elaborar un programa que pregnmero de cajas demandadas y que indique el precio de la unidcoste total del pedido.
5 Crear un programa que calcula la matriz A de elementos aij i^2
6 Crear un fichero de texto con el block de notas con los
-
7/25/2019 MATLAB-DIA2
63/63
6. Crear un fichero de texto con el block de notas con losdatos:
1,2,3,4,5,6,7,8,9,10. Importarlo desde Matlab y crear unvector con su contenido.
7. Sea el fichero datos.txt que contiene la siguienteinformacin: 7 5 2 1 9 3 4 5 7 8 4
Almacenar estos datos en una matriz A de 4 filas y 3columnas.
8. Crear un fichero de Excel con las cantidades compradasde varios productos y su importe por unidad. Cargarlo enMatlab y calcular all el coste total de la compra.