Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Ing.
Eugenio Kolb
Programacin
Parte I
I) Introduccin
La informacin y los datos transmitidos y almacenados por una computadora, en una primera aproximacin, estn constituidos por ceros y unos. Es decir, se establece una asociacin de
seales fsicas determinadas asociadas a smbolos y conceptos del lenguaje humano escrito. La
existencia de corriente eclctica en micro-conductores (cables, circuitos impresos, etc.), o de perforaciones en lugares predeterminados en tarjetas de cartn, o quemaduras en lugares establecidos en discos, u orientaciones determinadas de partculas de material magntico ubicadas en determinada localizacin de un disco; de existir, significan 1. En caso contrario, significan 0.
La utilizacin de 0 y 1 como clulas bsicas de datos e informacin, debe ser
comprendida, si se pretende incursionar en la adquisicin de conocimientos de Hardware
(equipos, dispositivos y adaptadores fsicos), o de desarrollo de Software (escritura de programas
para resolver problemas).
Posteriores codificaciones utilizaron grupos de esas seales fsicas para llevar la traduccin de la informacin fsica a la interpretacin humana.
Se denomin Cdigo Binario a la combinacin de sucesivos y agrupados datos bsicos
(ceros y unos, denominados Bits). Se lleg a entidades mayores: combinando 8 de esos elementos (256 combinaciones distintas posibles), se logr un cdigo superior, identificable por el
humano comn. Surgen all el cdigo Decimal y el cdigo ASCII (Anexo 1).
Durante la Primera Generacin de Computadoras, existan Programadores que usaban
tecnologa 1GL (First Generation Language: Lenguaje de Primera Generacin). Manejaban 0 y
1, muchas veces con tarjetas de cartn perforadas (donde exista perforacin = 1, caso contrario =
0), en enormes computadoras de costo millonario, y donde exista una muy organizada y bien remunerada divisin de las tareas especializadas.
En esa distribucin del trabajo, los Programadores usaban un restringido set de ordenes e
instrucciones, escritos en Lenguaje de Mquina (ceros y unos).
Posteriormente, se incorporaron las definiciones Lenguajes de Bajo Nivel y de Alto Nivel: cuando ms alto es el nivel, ms comprensible es por el usuario comn. El 1GL es el de ms
Bajo Nivel.
Un avance se logr con el lenguaje ensamblador o Assembler, originando el 2GL (Second Generation Language). El lenguaje de Segunda Generacin segua siendo un lenguaje de
Bajo Nivel: se escriben las instrucciones de manera simblica, usando cdigos mnemotcnicos.
Se puede empezar a usar identificadores: total, x, y (en vez de direcciones fsicas escritas binariamente). Se pueden incorporar comentarios (importantes para la documentacin). Y, empieza a
utilizarse un set restringido de instrucciones (STO, LOA, ADD, INP, MOV, END, etc.).
A continuacin, surgen los 3GL (Third Generation Language), lenguajes de Tercera Generacin, tambin denominados Lenguajes de Procedimientos. Son los primeros de Alto Nivel,
caracterizados por la siguiente novedad: todas las instrucciones (que a su vez son grupos de instrucciones bsicas de las generaciones anteriores, agrupadas bajo un nombre), son lo ms semejante al habla humana, y hacen abstraccin del equipo en que se ejecutar o correr el programa. Por ello, se dice que son portables los programas de este entorno: no estn pensados
para funcionar en una mquina determinada (no como ocurra con las anteriores direcciones fsicas obligadas, dependientes de la arquitectura fsica del ordenador).
Eugenio Kolb
Programacin
Se desarrollan distintos Idiomas, distintos Lenguajes para escribir las Instrucciones y los
Programas: Basic, Pascal. Cobol, C, Fortran, etc.
En esta tercera generacin, de manera simultnea, disminuyen los costos de las computadoras y se extiende su uso en amplios sectores de la poblacin. Sin embargo, la inexistencia an
de utilitarios poderosos (hojas de clculos, asistentes para la gestin de bases de datos y generacin de informes, programas estandarizados especializados en tareas especficas, etc.); llev a la
formacin de una generacin de programadores: para utilizar una computadora se requeran conocimientos slidos en cuando al uso del sistema operativo, y, al menos, generales, de programacin.
En los 4GL (Fourth Generation Language), lenguajes de Cuarta Generacin, tambin
denominados lenguajes orientados a problemas especficos; se incluyen interfaces grficas, lenguajes de consulta de bases de datos, generadores de informes, mdulos pre-programados, generadores de formularios y aplicaciones, asistentes poderosos, etc. Importantes resultados ya los
pueden obtener usuarios con limitados conocimientos en informtica, sin necesidad de contratar el
desarrollo de una aplicacin a medida.
Se pueden denominar 5GL a ciertos lenguajes orientados a aplicaciones en inteligencia artificial, sistemas expertos, juegos, robtica, etc.
En todos los casos (y como sigue ocurriendo an hoy), se debe realizar la compilacin de
los programas (usando los programas Compiladores correspondientes a cada Lenguaje). El objetivo es llevar el cdigo al lenguaje de bajo nivel, comprensible por la mquina.
Desde la escritura engorrosa de ceros y unos para formar las instrucciones bsicas, a la
utilizacin de poderosos asistentes que auto-generan programas, formularios, bases de datos,
informes, etc.; han pasado algunas dcadas. Existi un momento en que el estudio de la programacin ha tenido amplio inters, para luego decaer marcadamente, entre los usuarios comunes.
Sin embargo, muchos problemas en la Ingeniera y otras disciplinas, solo pueden ser encarados
diseando un algoritmo y traducindolo a cdigo escrito en un lenguaje determinado
A)
B)
C)
D)
B)
Programacin
Secuencialidad: mantener un orden de ejecucin de las instrucciones, entrada de datos y
salida de resultados
Limitacin: deben establecerse los lmites y criterios de manera explcita. Por ejemplo, de
buscarse un valor en un archivo, se explicitarn los casos en que la bsqueda debe ser
suspendida.
En general, durante las primeras generaciones de computadoras, se usaba el mtodo grfico del Diagrama de Flujo. Es la representacin grfica ms extendida de la solucin algortmica
de un problema. Para disearlos se utilizan determinados smbolos o figuras que representan una
accin dentro del procedimiento. Utilizan unos smbolos normalizados, con los pasos del algoritmo
escritos en el smbolo adecuado y los smbolos unidos con flechas, denominadas lneas de flujo,
que indican el orden en que los pasos deben ser ejecutados. Para su elaboracin se siguen ciertas reglas:
Por otra parte, la secuencia de flujo normal en una solucin de problema, es la siguiente:
Tiene un inicio
Una lectura o entrada de datos
El proceso de datos
Una salida de informacin
Un final
Al surgir la Programacin Estructurada (que limitaba las secuencias de acciones a conjuntos y subconjuntos de las mismas, en cada caso con un claro Inicio y un claro Final), las restricciones incorporadas no invalidaron esta manera de relatar el Algoritmo, pero obligaron a eliminar
licencias y excesos que antes quedaban a libre criterio del programador. Algoritmos desarrollados
anteriormente dejaron de ser viables.
Debido a esto, otros mtodos grficos surgieron ya adaptados a la programacin estructurada. Un ejemplo de ellos es el de los Diagramas N-S. son herramientas que favorecen la programacin estructurada y renen caractersticas grficas propias de diagramas de flujo y lingsticas propias de seudo cdigos. Constan de una serie de cajas contiguas que se leern siempre de
arriba-abajo, y sus estructuras lgicas tambin tienen una representacin grfica
En general, los mtodos grficos (en el papel) son muy explicativos, pero requieren engorrosas tareas de re-dibujo ante cada modificacin.
Programacin
principales desventajas de los flujogramas: lentos de crear y difcil de modificar sin un nuevo
dibujo
Muchos problemas se pueden resolver utilizando Algoritmos ya desarrollados. En esos casos, modificaciones y adaptaciones menores de los mismos son suficientes para continuar con las
siguientes etapas.
Entrada de
Datos
Partes de un Programa:
Bsicamente, un programa tiene 3 partes: en la primera, se
ingresan los datos necesarios. En la segunda, se realiza el
procesamiento de los datos. En la tercera, se obtiene la salida de los
resultados.
Proceso
Eugenio Kolb
Salida de
Resultados
Programacin
Estructuras
Las estructuras sencillas o simples describen una sucesin de Acciones Simples (A1, A2,
...). Por ejemplo: leer datos, mostrar resultados, ingresar un dato, realizar un clculo directo,
etc. Esta Accin en general se puede describir en una sola lnea de programa, pero no necesariamente. Se establece como norma usar el ; para separar una Accin de la siguiente (pudiendo
una instruccin ocupar ms de una lnea, o pudiendo haber ms de una instruccin por lnea).
Estas Estructuras se definen como de Secuenciacin.
En las estructuras compuestas, se contemplan los casos en que la ejecucin sucesiva de
las acciones A1; A2; A3; A4;.....,etc. (en ese orden y una vez cada una), se altera. En general se
contemplan 2 casos:
a) Cuando el orden de la secuencia de realizacin de las Acciones puede alterarse. Por
ejemplo: Si se cumple una Condicin dada, realizar A2; A3; A6; pero en caso contrario realizar
A5; A6;. Se denominan Estructuras de Seleccin (encontrndose muchos sinnimos: Transferencia Condicional, Control de Flujo, etc.).
b) Cuando una sucesin de una o ms Acciones puede realizarse un nmero de veces distinto a uno (o, incluso, puede no realizarse), dependiendo de una condicin explicitada en el programa. Ejemplo: realizar tal secuencia mientras esta condicin se cumpla, repetir tales acciones
hasta que una dada condicin deje de cumplirse, repetir esta secuencia n veces. Se llaman estructuras de Iteracin, encontrndose en la bibliografa diversos otros trminos: ciclos, bucles,
procesos repetitivos, etc.
En el Cuadro I se resumen los 3 tipos globales de estructuras de Programacin en Seudo
Cdigo, con sus distintas variantes. En el Cuadro II, la traduccin de las mismas a Lenguaje
MatLab.
Eugenio Kolb
Estructuras de Secuenciacin
(las A1,
A2, ...Ai; son comandos o instrucciones simples):
Al; A2; A3;
o
A1;
A2;
variable expresin
A3;
Estructuras de Seleccin:
(las A1,
A2, ...Ai; son comandos o instrucciones simples,
o conjuntos de ellos):
SI condicin ENTONCES
Al;
SINO
A2;
FIN SI
Variantes:
SI condicin ENTONCES
Al;
FIN SI
o
variable INGRESAR(Mensaje)
* Lectura desde un archivo: los datos se
leen de un archivo externo al programa, y se ubican
en variables.
LEER variable/s
Estructuras de Salida de Resultados:
permiten ver, imprimir, o grabar en archivos, los
resultados obtenidos de clculos.
* Impresin: salida por pantalla o
impresora de mensajes y resultados.
SEGN exp
conjunto de valores1: Al;
conjunto de valores2: A2;
Cuadro 1
GRABAR variable/s
Estructuras de Iteracin:
(las A1,
A2, ...Ai; son comandos o instrucciones simples,
o conjuntos de ellos):
MIENTRAS condicin HACER
Al;
FIN MIENTRAS
A este tipo de iteracin se la conoce como bucle
tipo Mientras
Variantes:
* Iteracin Condicional
Se la conoce como bucle tipo Hasta:
REPETIR
Al;
HASTA QUE condicin;
que equivale a:
Al;
MIENTRAS NO condicin HACER
Al;
FIN MIENTRAS
* Iteracin No Condicional (tipo FOR...NEXT)
HACER n VECES (para i de 1 a n)
Al;
FIN HACER
que equivale a:
i 1;
MIENTRAS i < n HACER
Al;
i i+1;
FIN MIENTRAS
Programacin
Cuadro 1 Cuadro 1
Cuadro 2
Estructuras de Secuenciacin
Asignacin:
variable = expresin/conj. de datos;
Estructuras de Seleccin
if condicin
A1;
else
A2;
variable=input(mensaje [,s]);
Lectura de archivo:
end
if condicin
A1;
end
if condicin1
A1;
fprintf([destino,]formato/mensaje[,
elseif condicin2
variables]);
A2;
else
A3;
disp(variable);
end
Grabacin:
save archivo[, variable/s];
switch expresin
case expresion1
A1;
case expresion2
Estructuras de Iteracin
A2;
while condicin
A1;
end
A3;
.......
otherwise
An+1;
for variable=ValorInicial:Incremento:ValorFinal
A1;
end
Instrucciones complementarias:
break: traslada la ejecucin a la lnea siguiente a
donde est el final del bucle mas interno (sale del bucle).
end
Instrucciones complementarias:
try .... catch . end: permiten gestionar
errores. Se ejecuta el conjunto de
instrucciones1, y solo en el caso en que
ocurra un error, pasa a ejecutarse el
conjunto de instrucciones2.
try
A1;
catch
A2;
end
Eugenio Kolb
Programacin
Archivos de Datos y Variables
Archivos
Los datos se almacenan, en la Memoria Auxiliar, en Archivos de Datos. Se ubican en
Campos cuyos agrupamientos se denominan Registros. As, el Registro de una persona estar
compuesto por los Campos nombre, edad, sexo, domicilio, etc.
En general, la manera de almacenar la informacin origina 2 tipos de Archivos:
a) Archivos Secuenciales: en los cuales el almacenamiento de la informacin se
realiza de la siguiente manera: campo 1, separador, campo 2, separador, campo 3, separador, ... . Para usar
la estructura LEER, se usan tantas variables como campos compongan el registro:
LEER variable 1, variable 2, variable 3
Bases de Datos
Eugenio Kolb
Programacin
Los archivos de los tipos citados anteriormente se organizan, en general, en estructuras
mayores. Sintticamente, las mismas se organizan en una o ms Tablas (equivalentes a
aquellos): Esas organizaciones de la informacin se denominan Bases de Datos. Cada Tabla est
compuesta por Registros (Records) y Campos (Fields). El siguiente es un simple ejemplo de
una Tabla simple:
Tabla: Tabla1
Campo 1
Nombre
Jose
Ana Maria
Rosa
Pedro
Registro 1
Registro 2
Registro 3
Registro 4
Campo 2
Campo 3
Apellido
Perez
Garcia
Ayala
Pereira
CodigodeCarrera
501
503
501
502
Campo 4
Sexo
M
F
F
M
Si considerramos otra Tabla (Tabla2), ya se podra hablar de una Base de Datos. Como
ejemplo, podramos hablar de un Libro de Hojas de Clculos, con 2 Hojas.
CodigoCarrera
501
502
503
Carrera
Ingeniera Qumica
Bioqumica
Gentica
Apellido
Perez
Pereira
Carrera
Ingeniera Qumica
Bioqumica
Variables
Los datos se almacenan, en la Memoria Principal, en variables. En general, se pueden
clasificar en 2 grandes grupos: numricas y alfanumricas (strings o cadenas de caracteres).
Pueden ser simples (escalares: almacenan un solo dato en un momento dado), o
mltiples (vectores o matrices: los datos se distribuyen en filas, columnas, capas, etc.).
As: en A 5, se asigna un dato a un escalar. En A(3) 5 se asigna el dato a un vector
(variable de una dimensin). Con A(3,4) 5 el dato se ubica en una matriz (variable de 2
dimensiones), y as sucesivamente:
A
Eugenio Kolb
Programacin
En el caso del vector y la matriz, se utiliz el criterio de asignarle el valor 1 a las primeras
columnas y filas. Es frecuente el uso del subndice 0 para las mismas.
Distintos Lenguajes permiten definir tipos personalizados de variables. As, se puede
definir una variable llamada ficha que contenga los datos nombre, edad, sexo, categora.
Entonces, en ficha(3).edad estara la edad del 4 empleado.
Cuando las variables son numricas, se las puede sub-clasificar: enteras, de precisin
simple, de precisin doble, etc.
Subprogramas y Funciones
Cuando se tiene un conjunto de acciones de uso general y frecuente, se las puede
organizar como procedimientos parametrizados:
a) como Subprogramas( o Subrutinas o Procedimientos),
b) como Funciones.
Se almacenan con nombre propio como parte del programa, o como archivos
independientes. Son convocados estos procedimientos cada vez que se necesita ejecutar ese
conjunto de instrucciones: ya sea desde el programa o trabajando en modo de comandos.
Se puede decir que la principal diferencia es que en el caso de las funciones se obtiene
uno o ms valores de retorno, a partir de uno o ms parmetros enviados o tomados del Sistema.
Algo que no ocurre, en principio, en los subprogramas (aunque dentro de los stos se pueden
utilizar variables globales que mantienen su valor una vez finalizada la ejecucin del
subprograma).
Para llamar a un Subprograma se usa una instruccin completa. Para llamar a una
Funcin, se usa parte de una expresin.
En general, podemos escribir ambos tipos de procedimientos de la siguiente manera:
Subprograma
SUBPROGRAMA nombre(variables/argumentos de Entrada)
A1;
A2;
.....
FIN SUBPROGRAMA
Funcin
FUNCIN variable/s de salida nombre (variables/argumentos de Entrada)
A1;
A2;
.....
FIN FUNCIN
10
Programacin
SI a =>b ENTONCES
m a;
SINO
m b;
FIN SI
MOSTRAR(Maximo: , m)
FIN SUBPROGRAMA
b) Usando Funciones
FUNCIN m maximo2(a,b)
SI a =>b ENTONCES
m a;
SINO
m b;
FIN SI
FIN FUNCIN
11
Programacin
2) Una vez escrita la Funcin, no nos interesan los nombres de las variables
internas que se utilizaron, sino el orden, cantidad y tipo de datos a enviar a la misma; y el orden,
cantidad y tipo de resultados que obtenemos.
Nota 3: Queda un caso intermedio, sin embargo. En el caso a), si la variable m estuviese
declarada como Global, ese valor sigue vigente (no muere), y puede ser usado luego, tal como
lo hicimos en el caso b).
b)
a)
sueldo INGRESAR(Ingrese Sueldo );
categoria INGRESAR(Ingrese Categoria);
SI categoria<10 ENTONCES
sueldo sueldo*1.2;
FIN SI
MOSTRAR(El nuevo sueldo es:, sueldo)
c)
sueldo INGRESAR(Ingrese Sueldo );
categoria INGRESAR(Ingrese Categoria);
SEGN categoria
1<=categoria<=5 : sueldo sueldo*1,2;
6<=categoria<=10 : sueldo sueldo*1,15;
11<=categoria<=15 : sueldo sueldo*1,1;
16<=categoria<=20 : sueldo sueldo*1,05;
SINO
MOSTRAR(La categoria no es correcta);
FIN SEGN
MOSTRAR(El nuevo sueldo es:, sueldo)
12
Programacin
SEGN categoria
1<=categoria<=5 : sueldo sueldo*1,2;
6<=categoria<=10 : sueldo sueldo*1,15;
11<=categoria<=15 : sueldo sueldo*1,1;
16<=categoria<=20 : sueldo sueldo*1,05;
SINO
MOSTRAR(La categoria no es correcta);
FIN SINO
Sueldo INGRESAR(Ingrese Sueldo (para finalizar ingrese 0));
FIN MIENTRAS
MOSTRAR(El nuevo sueldo es:, sueldo)
Nota: en los programas anteriores, de ingresarse una categora incorrecta, si bien se visualiza el mensaje
correspondiente, tambin se visualiza El nuevo sueldo es:.... Agregar las lneas necesarias para solucionarlo.
4) A partir del archivo del ejemplo anterior, se desea conocer la cantidad de ocurrencias de
cada uno de los nmeros, de 0 a 36:
PARA i de 0 a 36
c(i)=0
FIN PARA
LEER valor;
MIENTRAS NO valor = -1 HACER
c(valor) c(valor) + 1;
LEER valor;
FIN MIENTRAS
PARA i de 0 a 36
Eugenio Kolb
13
Programacin
MOSTRAR(El nmero , i , sali , c(i) , veces);
FIN PARA
Eugenio Kolb
14
Programacin
Parte II
MatLab
I) Introduccin
El Matlab permite trabajar escribiendo poderosos comandos o funciones de manera directa
en la ventana de comandos, que se ejecutan inmediatamente. En este caso, mientras dura la
sesin, cada variable utilizada mantiene los datos en la memoria. Por otra parte, se pueden crear
programas o secuencias de comandos, o programar funciones de usuario (en ambos casos,
archivos con extensin .m). stos, ubicados en las carpetas de bsqueda del MatLab, pasan a
ampliar el conjunto de herramientas de clculo.
Si bien se pueden desarrollar poderosos programas usando su lenguaje propio, MatLab
permite, a alumnos, docentes e investigadores con pocos conocimientos en informtica, realizar
clculos de distinto tipo usando las poderosas herramientas de este entorno.
Estos apuntes pretenden guiar, en primer lugar, a la utilizacin directa de los recursos
disponibles. En segundo lugar, a resumir las herramientas de programacin. Hemos planteado
cada uno de los ejemplos, los hemos verificado con MatLab, y los ofrecemos como elemento
complementario a manuales, libros y monografas sobre este tema.
15
Programacin
Por otra parte, se activan otras ventanas, en el momento en que se las necesite:
Comandos:
Generales:
demo: programa de demostracin MatLab Expo
help: manual de ayuda (Help Comando, para un comando dado)
control + C: para abortar un programa
De Entorno de Trabajo:
clear: borra todas las Variables de la memoria
Eugenio Kolb
16
Programacin
who: lista las matrices definidas
whos: lista las matrices definidas y sus tamaos
De Visualizacin:
clc: borra la Ventana de Comandos.
clf: borra la Ventana de Grficos.
Ayuda de MatLab
En la Ventana de Comandos, se puede obtener informacin escribiendo Help (para ver
ayuda en formato texto en la misma Ventana), o Helpwin (para ejecutar el Asistente, que permite
vnculos a herramientas relacionadas).
MatLab presenta el ingreso a loa distintos temas con el siguiente men (accesible con help o
helpwin). Si se desea ingresar directamente a un tema, se escribe Helpwin vnculo:
Vnculo
matlab\general
matlab\ops
matlab\lang
matlab\elmat
matlab\elfun
matlab\specfun
matlab\matfun
matlab\datafun
matlab\audio
matlab\polyfun
matlab\funfun
matlab\sparfun
matlab\graph2d
matlab\graph3d
matlab\specgraph
matlab\graphics
matlab\uitools
matlab\strfun
matlab\iofun
matlab\timefun
matlab\datatypes
matlab\verctrl
matlab\winfun
matlab\demos
toolbox\local
toolbox\compiler
MATLAB\work
Tema
Comandos de Propsito General
Operadores y Caracteres Especiales
Lenguaje de Programacin MatLab
Matrices elementales y manipulacin de matrices
Funciones matemticas elementales
Funciones matemticas especializadas
Funciones Matriciales: lgebra Lineal Numrica
Anlisis de Datos y Transformadas de Fourier
Soporte de Audio
Polinomios e Interpolacin
Funciones de Funciones y Resolucin de Ecuaciones Diferenciales Ordinarias
(ODE).
Matrices Dispersas (Sparse matrices).
Grficos de 2 Dimensiones
Grficos de 3 Dimensiones
Grficos Especiales
Manejo de Grficos
Herramientas grficas de interface de usuario.
Cadenas de caracteres
Input/output de Archivos
Fechas y Horas.
Tipos y Estructura de Datos
Version control.
Archivos de Interface Windows (DDE/ActiveX)
Ejemplos y Demostraciones.
Preferencias.
MATLAB Compiler
Comando
load
csvread
dlmread
dlmread
Eugenio Kolb
Retorno
Variables en archivos.
Arreglo doble
Arreglo doble
Arreglo doble.
17
Programacin
Formatos de Hojas de Clculos
XLS
WK1
Comando
xlsread
wk1read
Excel
Lotus 123
Retorno
Arreglo doble y arreglo de celdas.
Arreglo doble y arreglo de celdas..
Formato de Animaciones
AVI
Comando
aviread
Movie
Retorno
Animacin MatLab.
Formatos de Imgenes
TIFF
PNG
HDF
BMP
JPEG
GIF
PCX
XWD
CUR
ICO
TIFF imagen
PNG imagen
HDF imagen
BMP imagen
JPEG imagen
GIF imagen
PCX imagen
XWD imagen
Cursor imagen
Icon imagen
Comando
imread
imread
imread
imread
imread
imread
imread
imread
imread
imread
Retorno
Imgenes de color verdadero, escala de grises o indexadas
Imgenes de color verdadero, escala de grises o indexadas
Imgenes de color verdadero o indexadas
Imgenes de color verdadero o indexadas.
Imgenes de color verdadero o escala de grises.
Imgenes inexadas
Imgenes inexadas
Imgenes inexadas
Imgenes inexadas
Imgenes inexadas
Archivos de sonido
AU
WAV
NeXT/Sun sound
Microsoft Wave sound
Comando
auread
wavread
Retorno
Sound data and sample rate
Sound data and sample rate
variable=expresin
Si se escribe solo expresin, la misma se almacena en la variable ans
Escalar: [3.5]
Vector: [1,5,3,1]
3.5
1 5 3
3.5
2
Asignacin de Datos
Eugenio Kolb
18
3.1
1.5
Programacin
a) Listas explcitas:
Para ingresar un escalar, la asignacin se hace directamente: a = 14, n = Posadas. Sin
embargo, MatLab permite ingresar mltiples datos en una sola lnea, entre corchetes:
1
4
7
2
5
8
3
6
9
Crear Vectores a partir de una Matriz: al hacer referencia a toda una fila o toda una
columna.:
-1
1
1
0
0
1
-1
0
0
0
0
2
C = [D=C(:)
1,0,0;1,1,0;1,-1,0;0,0,2];
X = C(:,2);
-1
1
1
0
0
1
-1
0
0
0
0
2
0
1
-1
0
X = 1:0.5:4.5
1.5 2
2.5 3
3.5 4
X = 1:8;
4.5
19
Programacin
A(:,2:3)
d) Otras automatizaciones:
Matriz vaca: A = [ ]
1
0
0
A = eye(3)
0
1
0
0
0
1
A = eye(3,2)
1
0
0
0
1
0
Nota: para conocer el Tamao de una matriz , se usa el comando size(A). El tamao de un vector
se obtiene con length(A), equivalente a max(size(A)).
El decimal es el . (punto, no coma). As, 2.5 + 3.9 lleva al resultado 6.4. Pero, si hacemos
2,5 + 3,9 los resultados son 2, 8 y 9.
Operadores Matemticos
A=
B=
1
0
2
2
4
0
3
0
1
0
0
3
2
0
0
3
7
0
C=A+B
1
0
5
4
4
0
6
7
1
C=A.*B
C=A-B
1
0
-1
0
4
0
0
-7
1
C=A./B
0
0
6
4
0
0
9
0
0
Operadores Lgicos: las 2 matrices deben ser de la misma dimensin o una debe
ser un escalar
"Y"
C=A&B
0
1
0
0
0
0
"O"
C=A|B
1
Eugenio Kolb
20
Programacin
0
1
1
0
1
1
"NO"
C=A~=B
1
0
1
0
1
0
0
1
1
C = A.B =
i= 1
A=
C=dot(A,B)
ai bi
-1
B=
-2
-7
(4x(-2) + (-1)x5 + 3x2)
b) Vector que surge de calcular el Producto Punto de las Columnas de cada Matriz:
A=
C=dot(A,B)
1
3
2
4
26
44
(1x5 + 3x7
es decir ( 26
B=
5
7
6
8
5
7
6
8
2x6 + 4x8)
44
)
Multiplicacin de Matrices
N
Ci,j =
k=1
ai ,k bk , j
A=
1
3
2
4
C =A*B
19
43
22
50
B=
1*6 + 2*8)
3x6 + 4x8)
Para saber si existe C, se pueden escribir los tamaos de A y B uno al lado del otro: si los 2 valores
interiores son iguales, existe C, con un tamao definido por los valores exteriores. As, si tenemos A(2,3) y
B(3,3):
2x3
3x3
21
Programacin
Potencias de Matrices
Debido a que el producto de 2 matrices es posible solo si la cantidad de filas de la primera
es igual a la cantidad de columnas de la segunda, y teniendo en cuenta que A2 es A*A, A debe ser
cuadrada. Debe recordarse que si la expresin fuese A.2 , estaramos hablando simplemente
sobre la elevacin al cuadrado de cada elemento escalar de la matriz.
Funciones Matriciales
De utilidad en lgebra Lineal, existe una serie de funciones:
Matriz Inversa
La inversa de una matriz cuadrada A es la matriz A-1 para la cual los productos de
matrices A. A y A-1.A son iguales a la matriz identidad.
-1
A=
2
4
1
3
B=A^(-1)
1
0
0
1
Una matriz singular o mal condicionada, no tiene inversa. Este concepto est
relacionadocon un sistema de ecuaciones que no son independientes entre s.
El rango de una matriz es el nmero de ecuaciones independientes representadas
por las filas de la matriz: si el rango de una matriz es igual a su nmero de filas, sta no es
singular, y existe su inversa.
Se usan 2 funciones:
-
Datos Alfanumricos
Las cadenas de caracteres se almacenan usando una columna por carcter, en una matriz. El
espacio en blanco es un carcter ms. La coma y el espacio en blanco siguen teniendo el mismo
significado (separador de columnas). El punto y coma separa filas.
Ejemplos:
H
- a = 'Hola'
a
En este ltimo caso, ambas cadenas deben tener la misma longitud (completando con
espacios en blanco), ya que en caso contrario se produce un error. Para que el rellenado sea
automtico, se usa la funcin char:
- a =char('Hola' ; 'Buen da')
Eugenio Kolb
22
Programacin
2
5
1
4
7
1
4
2
5
n=[1,2,3;4,5,6] -
3
6
2
5
8
3
6
9
3
6
7
8
a) m = [n ; [7,8,9]]
b) m= [n , [7,8]]
Caso 2: agregar filas y/o columnas a una matriz alfanumrica. Conversin de datos.
Si a = [Hola]
z = [a,b]
vector fila de 12 datos
z = [a;b]
....no se puede realizar!, por diferencias en las dimensiones
z = char(a,b) matriz de 2x8
Conversin de datos:
b = 1500
vector fila de un dato numrico
m = Colon
o
m = [Colon ]
vector fila de 6 datos
a) x = [m, num2str(b)] vector fila de 10 datos
b) x = char(m,num2str(b)) matriz de 2x6 datos
Funciones relacionadas:
Eugenio Kolb
23
Programacin
char(65)
A
str2num(1000)/2
500
Ver: hex2num, int2str, sprintf, dec2hex, bin2dec, dec2bin, str2double, etc, etc. (helpwin
matlab\strfun)
Otros tipos de datos en MatLab
A) Arreglos de Celdas (celds arrays): vectores o matrices cuyos elementos o datos (cada uno
de ellos), son a su vez variables de cualquier tipo.
c(1) = {[1,2;3,4]}
c(2) = {Hola}
c(3)={5}
2
4
H o l a 5
c(1)
c(2)
c(3)
500
500
12
Permite mostrar o imprimir exhibir tanto texto como valores . Los especificadores %e , %f ,
y %g indican cmo se vern los valores numricos : notacin exponencial, notacin de punto fijo o
decimal, o el ms corto de los 2. Si se agrega %n1.n2f podemos adems de definir el nmero de
dgitos enteros y decimales a visualizar. La cadena \n indica hasta donde se visualizar la lnea: el
resto pasa a la siguiente lnea.
Si se hace [variable] = sprintf(formato, variable/s), se obtiene el mismo resultado, pero
asignndolo a una variable.
Ejemplo: (en la Ventana de Comandos):
Se ingresa, asignndose los datos a la matriz x
Eugenio Kolb
24
Programacin
>> x=[2 5 ; 3.1 4.8]
x=
Se escribe
2.0000
3.1000
5.0000
4.8000
Nota: observar que los datos se presentan o leen columna a columna, pese a cargarse la matriz fila por
fila.
Ejemplo:
>>msgbox('Presion superior a la maxima!', 'Calculo de la Temperatura', 'warn', 'non-modo')
25
Programacin
Ejemplo: (en la Ventana de Comandos):
>> Z=input('Ingrese los Datos entre Corchetes:')
Ingrese los Datos entre Corchetes: [1 2 ; 3 4]
1
3
2
4
Nota: Z=input(Ingrese Dato:, s ), hace que el dato asignado a Z sea considerado como
string o cadena de caracteres.
Variable =
'Jos Perez'
Variable(1)
'31'
Variable(1)
'Sin comentarios' Variable(1)
Eugenio Kolb
26
Programacin
Opcion=questdlg('Ha ocurrido un error, qu desea hacer? ', ' Problemas !! ', 'Continuar', 'Cancelar',
'Reintentar', 'Cancelar')
switch Opcion,
case 'Continuar'
disp('Ud. decidi continuar')
case 'Cancelar'
disp('Ud. decidi cancelar')
case 'Reintentar'
disp('Ud. decidi reintentar')
otherwise
disp('No s qu decidi Ud. ')
end
d) Lectura de Archivo
load archivo, variables
En esta versin (simplificada), lee del archivo indicado, las variables grabadas con save.
e) Grabacin en Archivo
save archivo, variables
Graba las variables especificadas en un archivo. Si no se especifican, graba todas las vigentes en
el espacio de trabajo.
Resumen de operaciones de Lectura y Grabacin de datos en Matlab
csvwrite (comma_separated_values): graba en un archivo valores separados por
comas. As, csvwrite(NOMBREDEARCHIVO,M) graba una matriz M en el archivo llamado
NOMBREDEARCHIVO (por defecto, ubicado en c:\matlab\work), los datos numricos de una matriz
separados por comas. Las filas deben tener el mismo nmero de columnas.
M=[1 2 3; 4 5 6];csvwrite('datos1',M)
Con csvwrite(NOMBREDEARCHIVO,M,f,c), se graba en la matriz que es el archivo, a partir
de la fila f y columna c del archivo (f y c empiezan a numerarse desde 0):
M=[1 2 3; 4 5 6];csvwrite('datos1',M,2,2)
,,,,
,,,,
,,1,2,3
,,4,5,6
1
5
9
2
6
10
3 4
7 8
11 12
3 4
7 8
11 12
Eugenio Kolb
27
Programacin
dlmread: permite leer un archivo grabado con dlmwrite
M=[1 2 3; 4 5 'u'];dlmwrite('datos4',M, '-')
N=dlmread('datos4','-')
xlsread: permite leer datos grabados en una hoja de Excel.
A = xlsread('NombredeArchivo')
[A, B] = xlsread('NombredeArchivo',NombredeHoja)
Las celdas vacas o con texto resultan en un elemento NaN (no es un nmero).
Save: graba las variables del Espacio de Trabajo al disco.
save NombredeArchivo: graba todas las variables a un archivo binario .mat (por defecto).
Se escribe con o sin comillas.
Save NombredeArchivo X: graba solo X
Save NombredeArchivo X Y Z: graba X, Y y Z. Se pueden usar caracteres comodn (*).
Opciones ASCII:
:
save ... ASCII: usa formato ASCII de 8 dgitos en vez de binario.
save ... ASCIIDOUBLE: usa formato ASCII de 16 dgitos.
save ... ASCIITABS: separa los datos con tabuladores.
save ... ASCII-DOUBLETABS :formato de datos de 16 dgitos, separados por comas..
Opciones MAT:
save ... APPEND: agrega las variables a un archivo existente (solo archivos MAT).
Se puede usar la forma functional, tal como (NombredeArchivo,'var1','var2'), cuando el nombre
del archivos o las variables son almacenadas en strings.
Eugenio Kolb
28
Programacin
B) Estructuras de Seleccin
Transferencia Condicional Simple
.......An; ....
end
a) Caso 1:
if condicin
.......A1; A2;....
else
.......A3; A4;....
end
b) Caso 2:
.......A1; A2;....
catch
.......A3; A4;....
end
If condicin1
.......A1; A2;....
elseif condicin2
.......A3; A4;....
else
.......A5; A6;....
end
Ejemplos:
Programacin
end
end
C) Estructuras de Iteracin
a) Estructura Mientras : el bucle termina
cuando deja de cumplirse condicion
(expresin vectorial o matricial).
while condicin
.......A1; A2;....
end
end
Eugenio Kolb
30
Programacin
Se graba el archivo nombredelafuncin.m (o nombredelprograma.m, si fuese el
caso), en una carpeta que sea el directorio actual, o una ubicada en el search path. Y ya est
disponible:
Se puede utilizar desde la ventana de comandos, o desde otro archivo .m.
Ejemplo 1: Funcin que permite calcular el promedio de los valores ubicados en un
vector fila (o en la primera fila de una matriz), llamado datos. El nombre de la funcin es
promedio, y se graba como promedio.m. Al haber un solo valor de retorno, no se usan
corchetes:
% Funcion Promedio:
% ---------------------%
Calcula el promedio de datos ubicados en un vector
fila
%
Datos=datos()
function f=promedio(datos)
c=size(datos,2);
% nmero de columnas de datos
sumador=0;
for i=1:c
sumador=sumador+datos(1,i);
end
f=sumador/c;
>> promedio(a)
promedio =
b)
>> c=promedio([7,11,2,3,8,6,5,9])
4
promedio =
6.3750
4.6250
c)
>> help promedio
Funcion Promedio:
---------------Calcula el promedio de datos
ubicados en un vector fila
Datos=datos()
Ejemplo 2: funcin que permite obtener las races de de una ecuacin de 2 grado, dados los
coeficientes. Se guarda con el nombre raicesgrado2.m (en una carpeta ubicada en el camino de
bsqueda establecido en File/Set Path):
% raicesgrado2:
% --------------%
Esta funcion permite obtener las raices de una ecuacion de grado 2
%
Datos de entrada: coeficientes a, b y c, de ax^2 + bx + c
>> [a,b]=raicesgrado2(2,10,5)
%
Datos de salida: races r1 y r2
function [r1,r2]=raicesgrado2(a,b,c)
a=
r1=(-b+(b^2-4*a*c)^0.5)/(2*a);
-0.5635
r2=(-b-(b^2-4*a*c)^0.5)/(2*a);
b=
-4.4365
31
Programacin
B
2
4
5
7
6
8
7 10
15 22
h-3) B.^A: elemento a elemento (las 2 matrices
deben ser de la misma dimensin, o una de ellas
ser un escalar, en cuyo caso volvemos a h-1)
5
36
343
4096
h-3) B^A: operacin matricial (A o B debe ser
escalar):
clc
% Borra la ventana de comandos
clear
% Borra variables
A=[1 2 ;3 4]
%Asigna valores a A
B=[5 6;7 8]
% Asigna valores a B
h-3-1: 2.^A:
2 4
8 16
b)
6
8
10 12
A-B: se resta elemento a elemento
c)
-4 -4
-4 -4
A.*B: se multiplica elemento a elemento
h-3-2: 2^A:
10.4827 14.1519
21.2278 31.7106
Otras operaciones:
1) Transpuesta de A: A
2)
5 12
21 32
d) A*B: se realiza el producto matricial (1*5 +
2*7 , 1*6 + 2* 8 ; 3*5 + 4*7 , 3*6 + 4*8), es
decir (19 , 22 ; 43 , 50):
e)
f)
g)
h)
19 22
43 50
A./B: se divide elemento a elemento (A/B)
0.2000 0.3333
0.4286 0.5000
A.\B: se divide elemento a elemento (B/A)
(equivale a B./A).
5.0000 3.0000
2.3333 2.0000
A/B: se realiza la divisin matricial (A/B)
1
2
Inversa de A: inv(A)
3
4
-2.0000 1.0000
1.5000 -0.5000
A*inv(A):
1.0000
0
0.0000 1.0000
3.0000 -2.0000
2.0000 -1.0000
Exponenciacin
2 10
3 2
3 1
15 12
12
17
1
1
5
8
5
9
>> M1=M>5
M1 =
32
Programacin
0
0
0
1
1
0
0
1
1
1
0
0
0
1
0
1
>> M2=M(M1)
M2 =
15
10
12
12
17
8
9
>> S=sum(M2)
S=
Valores de x
10.0000
-4.0000
83
>>M3=M1.*M
M3 =
0 10
0 0
0 0
15 12
12
17
0
0
0
8
0
9
-1
5
N
14
0
Programa:
% Resolucin de un sistema de 2
ecuaciones
%
a - b = 14
%
2a+5b=0
clc
clear
Eugenio Kolb
33
ProgramacinFinal2006D.doc
Matrices especiales
diag = matriz diagonal
eye = matriz unidad
ones = matriz constante (de 1's)
zeros = matriz nula
rand = matriz aleatoria (elementos distribuidos
uniformemente)
randn = matriz aleatoria (elementos distribuidos
normalmante)
linspace = genera un vector cuyas
componentes estn linealmente espaciadas.
logspace = genera un vector cuyas
componentes estan logartmicamente
espaciadas.
meshgrid = usada con funciones de 2 variables
magic = matriz cuadrada mgica.
hilb = matriz de Hilbert
invhilb = inversa de una matriz de Hilbert
pascal = tringulo de Pascal
compan = matriz cuyo polinomio caracterstico
es el que se proporciona.
tril = parte triangular inferior
triu = parte triangular superior
Optimizacin
Fmin= calcula el mnimo de una funcin de una
variable
fmins=calcula el mnimo de una funcin de
varias variables
fzero= calcula los ceros de una funcin de una
variable
34
PROGRAMACIN
V) Grficos
1) Grficas X-Y simples:
plot(x,y),title(Ttulo del Grfico),xlabel(TtuloX),ylabel(TtuloY),grid
x e y son vectores. Opciones: pause, pause(n), print (imprime el grfico en la impresora).
a) Grficos Lineales y Logartmicos:
plot(x,y)
semilogx(x,y)
semilogy(x,y)
Al revs
loglog(x,y)
b) Grficos mltiples:
plot(x,y,w,z)
plot(x,f)
Lneas y marcas:
plot(x,y,indicador,x,y,indicador)
Indicadores:
a)
b)
De Marcas: . , * , + , x , o , x.
Se pueden usar combinaciones de esos parmetros . P.e.: r*-. O escribir por separado:
plot(x,y,r,x,y,*, .., etc. O establecer color de marca y de lnea por separado.
Color
amarilla
m magenta
c cyan
r roja
g verde
b azul
w blanca
k negra
punto
Marca
-
Lnea
solida
o
x
+
*
s
d
v
^
<
>
p
h
crculo
marca x
marca +
estrella
cuadrado
diamante
tringulo (abajo)
tringulo (arriba)
tringulo (izquierda)
tringulo (derecha)
pentagrama
hexagrama
:
-.
--
punto
raya-punto
raya-raya
PROGRAMACIN
Escalas de Ejes:
Por defecto, la escala es automtica. Con axis(x_min,x_max,y_min,y_max) se puede personalizar
la escala. Con axis solo, se mantiene la escala para las siguientes grficas.
Subventanas:
subplot(m,n,p)
Ejemplo:
subplot(2,1,2),plot(x,y),title(Ttulo del Grfico),xlabel(TtuloX),ylabel(TtuloY),grid
Divide la ventana de grfico en 2 subventanas: una arriba y otra abajo, y grafica en la ventana inferior.
2) Grficas tridimensionales:
mesh(x,y,z)
Grfica de cuadrcula abierta de la superficie definida por la matriz z; x e y pueden ser vectores que
definen los intervalos de valores de las coordenadas x e y, o matrices que definen la retcula subyacente de
coordenadas x e y.
surf(x,y,z)
Grfica de cuadrcula sombreada en vez de abierta.
Para evaluar una funcin de una variable f(x), se debe calcular un vector de valores x, y
luego calcular el correspondiente vector con los valores de la funcin f(x).
Para evaluar una funcin de 2 variables f(x,y), se define una retcula bidimensional en el
plano xy. Si en el vector x estn las coordenadas x de todos los puntos de la retcula, y en el
vector y estn las coordenadas y de todos los puntos de la retcula, se usa la funcin meshgrid
para generar las 2 matrices que definen la retcula subyacente para una funcin bidimensional: xgrid e y-grid.
Es decir, se generan 2 matrices de tamao nxm, basadas en los valores de los vectores x e y: x-grid
conteniendo los valores de x repetidos en cada fila, e y-grid conteniendo los valores de y repetidos en cada
columna.
1
1 + x2 + y2
PROGRAMACIN
3) Otras funciones:
plot3
Permite graficar lneas y puntos en un espacio tridimensional.. Es la versin 3D de plot.
plot(x,y,z): x, y y z son vectores de la misma longitud. Esta expresin produce una
lnea en el espacio, que pasa por los puntos definidos en esos vectores.
plot(X,Y,Z): X, Y y Z son matrices del mismo tamao. Se obtienen varias lneas que
pasan por esos puntos. Cada columna equivaldra a un vector con datos.
En general, para seleccionar tipo de marcador, y tipo de lnea y color, se usan las mismas
strings o cadenas de caracteres que en el comando plot. As:
plot3(x1,y1,z1,s1,x2,y2,z2,s2,x3,y3,z3,s3,...): acta al igual que plot, donde la x, y y
z son vectores o matrices.
Ejemplo del Ayuda de MatLab:
t = 0:pi/50:10*pi;
plot3(sin(t),cos(t),t);
Objetos LINE, creados con plot y plot3: el comando plot y plot3, una vez ejecutado,
produce uno o ms objetos LINE (lnea). Se pueden asignar propiedades adicionales a cada
objeto.
Objetos LINE y otros, adicionales (se aplican a plot y a plot3):
a) Creacin de nuevas lneas:
PROGRAMACIN
line(X,Y): agrega la lnea definida por X-Y a los ejes actuales. Si en vez de
ser vectores, X-Y son matrices del mismo tamao, una lnea por cada columna de las matrices es
aadida: se aplica a plot. Con line(X,Y,Z), se agrega una lnea al actual entorno grfico creado
con plot3.
b) Anotaciones de texto:
text(X,Y, 'string'): agrega un texto en esas coordenadas: se relaciona con
comandos previos plot. Con text(X,Y,Z, 'string'), se extiende el concepto a los grficos 3D
definidos con plot3.
VI) Matemticas
1) Polinomios:
Dado f(x) = a0xN + a1xN-1 + a2xN-2+ ..........+aN-1x + aN
N=grado del polinomio (valor mas alto usado como exponente).
a0, a1, ....aN, son los coeficientes del polinomio. Siempre hay N+1 coeficientes.
Los valores de x para los que la funcin f(x) es 0, se llaman races.
Un polinomio de grado N tiene N races y N+1 coeficientes.
Ejemplo: si f(x)=x5 - 2x4 - 11x3 + 27x2 +10x - 24:
a) Clculo de f(x) para un dado conjunto de valores de x, conociendo los coeficientes
del mismo.
La funcin polyval(a,x) permite calcular el falor de f(x). En la expresin, a es una matriz
que contiene los coeficientes, y x es el valor o los valores a evaluar. El resultado de polyval es
una matriz del mismo tamao que x.
2) Clculo de las races de un Polinomio
Con la funcin roots(a), donde a es la matriz que contiene los coeficientes del polinomio,
podemos determinar las raices (5 en este ejemplo).
La funcin poly(r), donde r es la matriz que contiene las races, permite calcular los coeficientes
del polinomio: es una manera de verificar el clculo anterior.
% Valores del Polinomio f(x), para un conjunto dado de x, conociendo los coeficientes
clc
% Se limpia la ventana de comandos
clear
% Se borran las variables ya declaradas
a=[1,-2,-11,27,10,-24];
%Coeficientes del polinomio
x=[-2 0 3];
%Valores de x para los que queremos calcular f(x)
p=polyval(a,x);
% Se calcula f(x) para esos x
% Graficacin de los datos en ese rango de x
x1=-3:0.01:3;
% Se genera una serie de valores de x, desde-3 hasta 3, con incremento de 0.1
p1=polyval(a,x1);
% Se calcula f(x) para esos x
plot(x1,p1),title(Polinomio),grid
% Se grafica
% -------------------------------------------------------------- -----------------------------------------------------% Raices del Polinomio f(x), conociendo los coeficientes
r=roots(a);
% Se calculan las raices a partir de los coeficientes
% Impresin de los resultados
%g
%g
%g
%g
%g
%g
%g
%g
%g
%g
%g \n,a)
%g \n,x)
PROGRAMACIN
PROGRAMACIN
Valores de x
1 2 3 4 5 6 7 8 9 10
Valores de y
0 2 5 10 19 28 34 31 32 35
Coeficientes para un ajuste con un polinomio de grado 3
-0.138306 1.9866 -2.81449 0.433333
Coeficientes para un ajuste con un polinomio de grado 6
-0.00145833 0.0653045 -1.05345 7.69169 -25.7079
Coeficientes para un ajuste con un polinomio de grado 3
-0.138306 1.9866 -2.81449 0.433333
39.7409
-20.8333
2) Matemtica Simblica:
(Nota: descriciones y demostraciones de las herramientas de este entorno se obtienen con helpwin
toolbox\symbolic, y con symintro, symcalcdemo, simlindemo, symvpademo, symrotdemo, symecndemo).
PROGRAMACIN
f=simple(f)
% resultado es 2*x^2
c) Derivadas e Integrales
Es interesante la posibilidad de calcular la integral o la derivada en forma directa:
As, si nos interesa la expresin x3:
f=sym('x^3')
diff(f)
int(f)
f=sym('a*x^2+b*x+c')
x=solve(f)
b)
syms a b c x
x=solve('a*x^2+b*x+c')
c)
x=solve('a*x^2+b*x+c=0')
Cualquiera de las 3 formas lleva al siguiente resultado para las races de x:
[ 1/2/a*(-b+(b^2-4*a*c)^(1/2))]
[ 1/2/a*(-b-(b^2-4*a*c)^(1/2))]
Se debe tener cuidado extremo en manejar los resultados de un clculo. Por ejemplo:
z=solve('x^2+x*y+y=3','x^2-4*x+3=0') crea una Estructura de Datos z, con 2 componentes: x e
y. Los valores calculados debern ser solicitados de manera explcita:
z.x:
[ 1]
[ 3]
z.y :
[ 1]
[ -3/2]
PROGRAMACIN
100]
Nota: si se quisiera ingresar por teclado en tiempo de ejecucin la funcin, debe hacerse como
string y luego cinvertirla en objeto simblico:
fstring=input('Ingrese funcion : ','s');
f=sym(fstring)
c=sym2poly(f)
Muchas veces se desea realizar el proceso inverso: convertir un objeto simblico f en una
string, ya que muchas funciones exigen este formato (por ejemplo, la funcin fplot). Para ello, se
usa la funcin char:
fstring=char(f).
En otros casos, es necesario convertir un dato simblico en su forma numrica, para lo cual se
usa la funcin double.
Una vez obtenidos los coeficientes, recordemos otras funciones relacionadas con
polinomios: roots(c): obtiene las races de un polinomio; polyval(c,x): calcula el polinomio f(x) a
partir de los coeficientes (c); polyfit(x,y,n): calcula los coeficientes dado un conjunto de pares de
datos xy y el grado del polinomio; etc.
PROGRAMACIN
fprintf(Mensaje1)
fprintf(Mensaje2)
fprintf(Mensaje3)
deltax=(x2-x1)/20;
subplot(2,2,1),ezplot(f,[x1,x2])
subplot(2,2,2),ezplot(g,[x1,x2])
subplot(2,2,3),ezplot(h,[x1,x2])
Ejecucin:
Ingrese funcion : x^4-8*x^3+6*x^2-18*x+100
Ingrese valor inicial : -100
Ingrese valor final : 100
La funcion f(x) es :x^4-8*x^3+6*x^2-18*x+100
La derivada de f(x) es :4*x^3-24*x^2+12*x-18
La integral de f(x) es :1/5*x^5-2*x^4+2*x^3-9*x^2+100*x
PROGRAMACIN
f2=sym('x+y-12*z=-5');
f3=sym('-x+10*y+2*z=-8');
[x,y,z]=solve(f1,f2,f3);
fprintf(char(f1))
fprintf('\n')
fprintf(char(f2))
fprintf('\n')
fprintf(char(f3))
fprintf('\n\n')
fprintf('x = %g
y = %g
z = %g',double(x),double(y),double(z))
Al ejecutar:
2*x-14*y-z=14
x+y-12*z=-5
-x+10*y+2*z=-8
x = 2.86022
y = -0.634409
z = 0.602151
xx =
3.4374 - 2.5840i
3.4374 + 2.5840i
0.1569
-11.0317
yy =
3.6993 + 0.3493i
3.6993 - 0.3493i
-4.1040
-5.2945
fplot('5*x^4-2/x+8',[-100,100])
fplot('[tan(x),sin(x),cos(x)]',2*pi*[-1 1 -1 1])
fplot('sin(1/ x)', [0.01 0.1],1e-3)
ezplot('cos(x)')
ezplot('x^3 + 2*x^2 - 3*x + 5 - y^2')
zsurf('s*cos(t)','s*sin(t)','t')
para expresiones strings o simblicas
Resumen relacionado con funciones e interconversin de tipos de datos:
PROGRAMACIN
objeto String
objeto Simblico
Resolucin planteada
Resolucin completa
Ejemplo 2
f='3*x^4-27*x^3+67*x^2-15*x-20'
f1=inline(f)
f2=vectorize(f1)
x=-10:1:10
y=f1(x)
%error
y=f2(x)
plot(x,y)
f3=sym(f1)
b=double(solve(f3))
Ejercicio:
clc;clear;
f=input('Ingrese funcion implicita: ','s');
f1=vectorize(f);
f0=sym(f);
f2=diff(f);
f3=int(f);
fprintf('Funcion : %s , vectorizada a la forma %s\n',f,f1);
fprintf('Derivada : %s\n',char(f2));
fprintf(Integral: %s\n',char(f3));
subplot(2,2,1),ezplot(f0),grid,subplot(2,2,2),ezplot(f2),grid,subplot(2,2,3),ezplot(f3),grid
r=double(solve(f0));
disp('Las raices son:');
disp(r)
fprintf('\n')
rango=input('Ingrese rango de x entre corchetes, valores separados por coma :');
X=min(rango):(max(rango)-min(rango))/20:max(rango);
f4=inline(f1);
Y=f4(X);
subplot(2,2,4),plot(X,Y),grid
quad(f4,0, 100) % integral entre 0 y 100
PROGRAMACIN
PROGRAMACIN
Formulario o Ventana Grfica, con los Controles, sus Propiedades, etc.), que se almacena con la
extensin .fig., y un archivo que se almacena con la extensin .m, conteniendo el cdigo de
programacin, autogenerado en gran parte por el Asistente. Conviene que ambos archivos tengan
el mismo nombre.
El archivo es de tipo function, con la forma function varargout = xxxx(varargin), donde
xxxx es el nombre asignado al archivo. En esta etapa, simplemente ignoraremos los rtulos,
declaraciones y cdigo creado de manera automtica encabezando el archivo, pero evitando
cuidadosamente de alterar su contenido.
Por otra parte, se crean automticamente prototipos de sub-funciones asociadas a Eventos
asociados a cada uno de los Objetos de la figura, empezando por la Figura en s (contenedora de
los otros controles). Nosotros nicamente insertaremos cdigo de programacin all donde nos
interese.
Una primera mirada del usuario (que observa por primera vez el extenso cdigo
autogenerado hasta ahora, sin haber hecho prcticamente nada an), le produce preocupacin, lo
cual es un error: podemos virtualmente ignorar gran parte del mismo y obtener sin embargo
importantes resultados con la GUI.
Nota: si se desea modificar una Figura existente, tambin hay que ingresar con File/New/Gui.
b)
Programar secuencias que permitan ingresar datos dentro de objetos, llevar los
datos a variables, realizar clculos y operaciones con los mismos, mostrar los resultados en
objetos, y graficar en subventanas: todo en la misma Figura.
Debemos incorporar algunos conceptos importantes:
PROGRAMACIN
a=str2num(get(handles.edit3,'String'))
asigna el contenido de la propiedad String del control Edit3 (que debe contener nmeros), a la variable
numrica a, que ser escalar, vector o matriz, segn cantidad y distribucin de los nmeros
PROGRAMACIN
PROGRAMACIN
Axesq
Axes2
Text1 a 7
Edit1 a
7
Pushbutton1 y 2
PROGRAMACIN
Text1
Pushbutton1
Text2
Edit1
Pushbutton3
Text3
Edit2
Edit3
Edit4
Pushbutton4
Axes1
plot(x,y,'Parent',handles.axes1)
PROGRAMACIN
Text1
Text2
Text3
Text4
Text5
Edit1
Edit2
Edit3
Pushbutton1
PROGRAMACIN
Ejercicio 4: programar una aplicacin que permita, en el mismo formularo a) graficar una
serie de datos x-y-z a travs de distintos mtodos, b) graficar distintas funciones simblicas
popup_sel_index = get(handles.popupmenu1, 'Value');
x=[1 2 3 4 5]
y=[10 20 30 40 50]
z=[1 2 3 5 7;2 3 6 8 8;3 4 6 7 8; 3 5 6 8 7;2 5 4 3 2]
[Xgrid,Ygrid]=meshgrid(x,y)
switch popup_sel_index
case 1
plot(x,y),xlabel('X'),ylabel('Y'),zlabel('Z')
case 2
plot3(Xgrid,Ygrid,z)
case 3
mesh(Xgrid,Ygrid,z)
case 4
surf(Xgrid,Ygrid,z)
case 5
contour3(Xgrid,Ygrid,z)
case 6
surfc(Xgrid,Ygrid,z);
end
set(handles.axes1,'XGrid','on','YGrid','on');
set(handles.axes1,'XDir','normal','YDir','normal');
set(handles.axes1,'XColor','blue','YColor','blue');
% set(gca,XLabel('X'),YLabel('Y'),ZLabel('Z'))
function popupmenu2_Callback(hObject, eventdata, handles)
axes(handles.axes1);
cla;
popup_sel_index = get(handles.popupmenu2, 'Value');
PROGRAMACIN
switch popup_sel_index
case 1
ezsurf('sin(sqrt(x^2+y^2))/sqrt(x^2+y^2)',[-6*pi,6*pi])
case 2
ezsurf('x*exp(-x^2 - y^2)')
case 3
ezsurf('x*(y^2)/(x^2 + y^4)')
case 4
ezsurf('x*y','circ')
case 5
ezsurf('real(atan(x + i*y))')
case 6
ezsurf('exp(-x)*cos(t)',[-4*pi,4*pi,-2,2])
case 7
ezsurf('exp(-s)*cos(t)','exp(-s)*sin(t)','t',[0,8,0,4*pi])
case 8
ezsurf('cos(s)*cos(t)','cos(s)*sin(t)','sin(s)',[0,pi/2,0,3*pi/2])
case 9
ezsurf('s*cos(t)','s*sin(t)','t')
case 10
ezsurf('s*cos(t)','s*sin(t)','s')
end
Ejercicio 5: disear un formulario o figura, tal que permita, ingresando los valores de X e
Y, obtener el grfico correspondiente.
Se utilizarn 2 cuadros de texto o rtulos (text), 2 cuadros de edicin (edit), un botn de comandos
(pushbutton), y una subventana de grficos (axes).
Si el usuario ingresa 2 vectores de distinta longitud, se visualizar un cuadro de dilogo que
informe de ste error.
Programacin
Anexos
Anexo 1
Codificacin de Datos
La palabra MISIONES puede ser almacenada y procesada por un ordenador. Tiene 8 letras
o caracteres. As como se observa en este texto, est lista para ser leda y asimilada por el usuario
comn.
Sin embargo, para otros formatos de representacin necesariamente debemos
descomponerla en los caracteres que la componen. Cada carcter, a su vez, puede ser escrito usando
distintos cdigos. Por ejemplo:
ASCII
M
I
S
I
O
N
E
S
Decimal
77
73
83
73
79
78
69
83
Hexadecimal
4D
49
53
49
4F
4E
45
53
Binario
1001101 1001001 1010011 1001001 1001111 1001110 1000101 1010011
Programacin
- Utilizando 2 dgitos, se obtienen 4 combinaciones: 00, 01, 10, y 11.
- Utilizando 3 dgitos, se obtienen 8 combinaciones: 000, 001, 010, 011, 100, 101, 110, 111.
- Utilizando N dgitos, se obtienen 2 N combinaciones. En los 3 casos anteriores, se tendra: 21,
22, y 23 combinaciones.
Utilizando cada una de esas combinaciones para representar los nmeros enteros, se tiene el
Sistema o Cdigo Decimal: 0, 1, 2, 3, 4, 5, ...etc.
Binario
Decimal
0
0
1
1
10
2
11
3
100
4
101
5
110
6
111
7
1000
8
1001
9
1010
10
1011
11
1100
12
1101
13
1110
14
1111
15
10000
16
Se puede generalizar diciendo que a partir de un valor escrito en Cdigo Binario se obtiene
el correspondiente valor Natural Entero (Sistema Decimal), expresndolo como una sumatoria de
potencias de 2.
As, un nmero escrito en cdigo Binario usando N dgitos: a N - 1 a N - 2 a N - 3 .... a 2 a 1 a 0 , puede
convertirse en el correspondiente valor Decimal con la expresin a 0 2 0 + a 1 2 1 + a 2 2 2 + .....+
aN-12N-1:
011000101100110001 N dgitos binarios
a N - 1 a N - 2 a N - 3 .... a 2 a 1 a 0
N1
a 0 2 + a 1 2 + a 2 2 + .....+ a N - 1 2
0
N-1
i= 0
ai 2
256
128
64
32
16
Decimal
16 + 2 = 18
Binario
10010
Otra manera consiste en ir dividiendo el valor decimal por 2. Por ejemplo, si partimos del
decimal 71, obtendremos que le corresponde el valor binario 1000111
71
1
2
35
1
2
17
1
2
8
0
2
4
0
2
2
0
2
1
512
256
128
64
32
16
64 + 4 + 2 + 1 = 71
Programacin
+ 1 = 10 (no 2). Ejemplo: el decimal 10 tiene la siguiente equivalencia binaria: 1010. El decimal 9,
por otra parte, 1001. Con la suma y el producto de ambos valores decimales obtenemos 19 y 90.
Cmo se realizara el clculo trabajando con valores binarios?
Suma
1
Producto
1
0
0
0
1
0
x
1
10
0
0
0
0
1
1
0
0
0
(19)
(90)
Sistema Hexadecimal
Utiliza 16 smbolos para representar valores (los 10 dgitos numricos, 0 a 9, y las 6
primeras letras, A a F. Estos caracteres, en ese orden, se corresponden con los valores 0 a 15
del cdigo decimal.
Lo que se puede representar con 4 dgitos del cdigo binario, se puede representar con un
smbolo del cdigo hexadecimal. Con ese criterio, podemos realizar las conversiones.
Ejemplos:
231(10 =
1110 0111(2
E
E7(16
7
Binario Hexadecimal
11
3
101
5
1101
D
1111
F
1 0000
10
1 0001
11
1 1111
1F
10 0000
20
10 1110
2E
1 1010 1101
1AD
C) Cdigo ASCII
Decimal
3
5
13
15
16
17
31
32
46
429
Programacin
Un ordenador procesa y almacena informacin binaria. Sin embargo, para representar
caracteres, se define el cdigo ASCII (American Standard Code for Information Interchange).
Para ello, se usan octetos de dgitos binarios o Bits (de Binary Digit). Esos paquetes de 8 bits,
denominados Bytes, permiten 28 = 256 combinaciones posibles. Los primeros 128 (decimal 0 a
127) constituyen el conjunto bsico universal, mientras que los siguientes 128 son utilizados de
manera diferente por los diversos fabricantes de equipos y desarrolladores de Software. Adems, los
32 primeros valores estn reservados para control de comunicaciones, de impresoras y otros (el
retorno de carro est representado por el carcter ASCII con valor decimal 13).
El que corresponde a decimal 0 (primer valor de la tabla), indica vaco (una cadena de caracteres
de longitud 0, lo que no debe confundirse con un dato nulo o inexistente). El carcter
correspondiente al decimal 32 (espacio en blanco) inicia el set de caracteres que normalmente
encontramos en cualquier teclado. Es importante tener la tabla de conversin: en cualquier
momento podemos generar el carcter escribiendo en el teclado numrico el nmero
correspondiente en el cdigo decimal, mientras se mantiene pulsada la tecla ALT.
Se debe destacar que caracteres como , , , etc, se encuentran ya en el conjunto extendido de
caracteres (entre decimal 128 y 255).
En los ejemplos anteriores se ha visto que en el sistema Binario se utilizan dgitos (0 o 1)
puestos uno al lado del otro. Cada uno de los dgitos se llama Bit (de Binary Digit).
Un octeto de dgitos binarios resulta suficiente para representar cualquiera de los smbolos
utilizados normalmente en un teclado. De esa manera se define el Byte, y el cdigo donde se
representa cada smbolo (letras, nmeros, smbolos, etc.) se denomina ASCII (Cdigo Estndar
Americano para el Intercambio de Informacin). Un Byte puede tomar 256 combinaciones
posibles: suficientes para que cada una de ellas represente un carcter.
Conjunto Bsico Universal de Caracteres ASCII
Binario
0
1
10
11
100
101
110
111
1000
1001
1010
1011
1100
1101
1110
1111
10000
10001
10010
10011
10100
10101
10110
Decimal
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Hexadecimal
0
ASCII
(vacio)
Binario
1000001
1000010
1000011
1000100
1000101
1000110
1000111
1001000
1001001
1001010
1001011
1001100
1001101
1001110
1001111
1010000
10
1010001
11
1010010
12
1010011
13
1010100
14
1010101
15
1010110
16
1010111
Decimal
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
Hexadecimal
41
42
43
44
45
46
47
48
49
4A
4B
4C
4D
4E
4F
50
51
52
53
54
55
56
57
ASCII
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
Programacin
10111
11000
11001
11010
11011
11100
11101
11110
11111
100000
100001
100010
100011
100100
100101
100110
100111
101000
101001
101010
101011
101100
101101
101110
101111
110000
110001
110010
110011
110100
110101
110110
110111
111000
111001
111010
111011
111100
111101
111110
111111
1000000
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
17
1011000
18
1011001
19
1011010
1A
1011011
1B
1011100
1C
1011101
1D
1011110
1E
1011111
1F
20
21
22
23
24
25
26
27
28
29
2A
2B
2C
2D
2E
2F
30
31
32
33
34
35
36
37
38
39
3A
3B
3C
3D
3E
3F
40
1100000
(espacio)
!
"
#
$
%
&
'
(
)
*
+
,
.
/
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
@
1100001
1100010
1100011
1100100
1100101
1100110
1100111
1101000
1101001
1101010
1101011
1101100
1101101
1101110
1101111
1110000
1110001
1110010
1110011
1110100
1110101
1110110
1110111
1111000
1111001
1111010
1111011
1111100
1111101
1111110
1111111
10000000
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
58
59
5A
5B
5C
5D
5E
5F
60
61
62
63
64
65
66
67
68
69
6A
6B
6C
6D
6E
6F
70
71
72
73
74
75
76
77
78
79
7A
7B
7C
7D
7E
7F
80
X
Y
Z
[
\
]
^
_
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
Programacin
Bibliografa:
o
Mathews, John H.; Fink, Kurtis D. Mtodos Numricos con Matlab. Prentice Hall Madrid 2000 ISBN:
84-8322-181-0
Garca, Javier; Rodrguez, Jos; Brazales, Alfonso. Introduccin al Matlab. Universitas (Universidad
Cientfica Universitaria) Crdoba, Argentina- 2002 ISBN: 987-9406-06-8
Etter, Delores M. Soluciones de problemas de ingeniera con Matlab - Prentice Hall 1998 ISBN: 98017-0111-9.
Disponible en Internet:
Garca de Jaln, Javier. Aprenda Matlab 6.5 como si estuviera en primero. Escuela Tcnica
Superior de Ingenieros Industriales. Universidad Politcnica de Madrid. Agosto 2004
(http://mat21.etsii.upm.es/ayudainf/aprendainf/Matlab65/matlab65pro.pdf)
(http://personales.unican.es/cordonj/doctor98/curmat/index.html#tabla-contenidos)
Urea, Luis A.,y otros . Fundamentos de Informtica. 1999 Editorial Alfaomega. Ra-ma (citado en
http://www.mailxmail.com/curso/informatica/programacionestructurada/capitulo22.htm)
Direcciones varias: