Sei sulla pagina 1di 186

UNIVERSIDAD AUTNOMA AGRARIA

ANTONIO NARRO
DEPARTAMENTO DE ESTADSTICA Y CLCULO
DIVISION DE INGENIERA
ACADEMIA DE COMPUTACIN
Manual de MATLAB
M. C. Sergio Snchez Martnez
ii
Introduccin a la
Programacin
1.1 BREVE HISTORIA DE LA PROGRAMACION.
Conocer la historia del desarrollo de cualquier campo del saber humano es de
gran importancia para aquellos que planeen desenvolverse en dicho campo, ya
que tiene cuando menos dos beneficios tangibles: Conocer el estado promedio del
arte y evitar cometer errores ya cometidos. As es ms fcil tomar las decisiones
correctas y sobrevivir sin esfuerzo a muchas modas que estridentemente
proclaman la reinvencin del hilo negro. Como dijo el filsofo espaol Gorge
Santayana El que no conoce la historia est condenado a repetirla.
Es comnmente aceptado que la historia de la computacin moderna comienza
con Charles Babbage, en 1822, sin embargo las primeras computadoras
mecnicas y elctricas no contaban con un lenguaje de programacin tal como lo
conocemos ahora, la mayora de ellas era construida para llevar a cabo una tarea
especfica; por lo tanto la forma de programarla era particular a cada computadora.
Fue en el ao de 1945 cuando el matemtico Jhon Von Neumann fascinado por
las posibilidades de ENIAC, elabor un estudio que demostr que una
computadora poda tener una estructura fsica muy simple y fija, y aun as ser
capaz de ejecutar cualquier tipo de programa mediante un control correcto, sin la
necesidad de modificar la computadora para esto.
A partir de esta innovacin de Von Neumann, que en conjunto se conoce como la
tcnica de programa almacenado es que se inicia la era de los lenguajes de
programacin.
1
1
1.2 LENGUAJES DE PROGRAMACION.
Shortcode
En 1949, aparece el primer lenguaje que se us en computadoras electrnicas:
Shortcode, requera que el programador convirtiera (compilara) su programa a
ceros y unos de manera manual.
A-0
Fue hasta el ao de 1951, que Grace Hopper trabajando para Remington Rand,
comienza a desarrollar el primer compilador, lo que trajo consigo una
programacin ms rpida.
Fortran
Es en el ao de 1957 cuando aparece el primero de los grandes lenguajes de
programacin de uso an actualmente: FORTRAN, que proviene de FORmula
TRANslating system.
Fue desarrollado por IBM para cmputo cientfico, el lder del proyecto fue John
Backus, que despus contribuira en ALGOL.
El lenguaje original solo inclua FOR, DO y GOTO. Tambin defini los tipos de
datos bsicos: TRUE, FALSE, INTEGER, REAL, DOUBLE PRESICION.
El lenguaje original era bueno manejando nmeros, pero malo manejando entrada
y salida, lo cual propicio la aparicin de otros lenguajes orientados a negocios.
LISP
En el ao de 1958, el profesor John McCarthy del M.I.T. comenz a desarrollar la
teora de un lenguaje de procesamiento de listas. En 1959 aparece pblicamente
la primer implementacin llamada LISP 1.5.
En 1960 McCarthy publica un histrico articulo] acerca de los fundamentos de
LISP que hizo por la programacin lo mismo que hizo Euclides por la geometra,
demostrar como con unos cuantos operadores y una notacin para funciones es
posible construir un lenguaje de programacin completo.
Es importante hacer notar que McCarthy no solo marco un hito en la historia de los
lenguajes de programacin sino que cre un modelo de programacin que ha
demostrado ser superior, tanto que podemos decir que en la actualidad existen
dos grandes modelos de programacin el de C y el de Lisp, y podemos notar que
los lenguajes del modelo C tratan de parecerse cada vez ms a Lisp.
2
ALGOL
En el ao de 1958 un comit crea la especificacin del lenguaje ALGOL, la cual
tena la particularidad de no definir la manera de manejar entrada y salida, dejando
esta parte libre a cada implementacin.
Es en 1960 cuando aparece el lenguaje ALGOL 6.0 el primer lenguaje
estructurado en bloques. Este lenguaje fue muy popular en el segundo lustro de
los 60's.
Su principal contribucin es ser la raz del rbol que ha producido lenguajes tales
como pascal, C, C++, y Java.
COBOL
En 1959, Conference on Data Systems and Languages (CODASYL) crea COBOL,
un lenguaje para negocios; que fuera fcil de aprender para gente que no tuviera
formacin en ciencias de la computacin. Sus nicos tipos de datos fueron
cadenas y nmeros. Lo que le dio la caracterstica de poder agruparlos en arreglos
sencillos, de modo que los datos podan ser organizados y seguidos de una mejor
manera. Las sentencias de COBOL se parecen mucho a las usadas por el idioma
ingls, haciendo que fuera fcil de aprender. Todo esto con la finalidad de que los
negocios promedio lo pudieran aprender y usar.
Otros de los primeros tiempos
Existieron otros lenguajes de programacin en los primeros tiempos, sin embrago
la tarea de describir las caractersticas de cada uno es demasiado ambiciosa para
esta pequea introduccin as que solo se mencionan brevemente:
- 1946 Plankalkul del alemn Conrad Zuse aplicado para jugar ajedrez.
- 1952 Autocode un compilador de Alick E. Glennie.
- 1960 APL de Kenneth Iverson.
- 1962 SNOBOL de la empresa sure-fire.

Para ver una lista ms completa de los lenguajes de programacin existentes se
sugiere visitar la pgina de rick Lvnez: http://www.levenez.com/lang/ que
mantiene un poster de la historia de los lenguajes de programacin en una lnea
de tiempo.
Otra pagina recomendable es la de Bill Kinnersly:
http://people.ku.edu/~nkinners/LangList/Extras/langlist.htm que mantiene una lista
de los lenguajes de programacin que han existido, y actualmente contiene
aproximadamente 2,500 lenguajes de programacin.
3
Desarrollo de los lenguajes de programacin
Basados en los primeros lenguajes de programacin han surgido muchos otros
lenguajes que siempre tienen la intencin de tomar lo mejor, desechar lo malo, y
agregar alguna novedad, respecto a los existentes. Solo se hace referencia a los
ms conocidos.
Basic
Inventado en 1964 por John George Kemeny y Thomas Eugene Kurtz en el
Colegio Dartmounth.
Es un lenguaje muy limitado que fue diseado para personas que no fueran del
rea de ciencias de la computacin.
El nombre de BASIC, significa Beginners All-purposeSymbolic Instruction Code.
Los ocho principios de diseo de BASIC fueron:
1. Ser fcil de usar para los principiantes.
2. Ser un lenguaje de propsito general.
3. Permitir que los expertos aadieran caractersticas avanzadas, mientras
que el lenguaje permaneca simple para los principiantes.
4. Ser interactivo.
5. Proveer mensajes de error, claros y amigables.
6. Responder rpido a los programas pequeos.
7. No requerir un conocimiento del hardware de la computadora.
8. El lenguaje se baso en Fortran y Algol 6.0
Pascal
Diseado por Niklaus Wirth, como una herramienta de enseanza de la
programacin. Sus desarrolladores se concentraron en desarrollar buenas
herramientas que contribuyeran a la enseanza, tal como un buen debugger, y un
buen editor. Adems tuvieron como meta el tener soporte para la mayora de los
microprocesadores populares en esa poca en las instituciones de enseanza.
Fue diseado de una manera muy ordenada, reflejando la experiencia de su
diseador, tomo las mejores caractersticas de los lenguajes de su tiempo,
COBOL, ALGOL, y FORTRAN, al mismo tiempo que busc evitar sus deficiencias,
y hacerlo lo ms claro posible. La combinacin de sus caractersticas de
entrada/salida, y sus solidas caractersticas matemticas pronto lo convirtieron en
un lenguaje muy exitoso. Tambin implement el tipo apuntador y agreg el
CASE, e hizo uso de variables dinmicas. Sin embargo no implement arreglos
dinmicos ni agrupamiento de variables lo cual contribuy a su prdida de
popularidad frente a nuevos lenguajes.
4
Delphi es una versin moderna y orientada a objetos de Pascal.
Prolog
Diseado en 1970 en la universidad de Aix-Marseille por los profesores Alain
Colmerauer y Phillipe Roussel, su nombre proviene del francs Programation et
Logique, es popular en los crculos de inters en Inteligencia Artificial.
Inicialmente era un lenguaje interpretado, hasta que a mediados de la dcada de
los 70's David Warren desarrollo un compilador, que converta el programa en
Prolog a un conjunto de instrucciones de una mquina abstracta denominada
Warren Abstract Machine, o WAM.
Su sintaxis y semntica son considerados simples y claros, su paradigma de
programacin es el declarativo y un programa en Prolog se compone de clusulas
que constituyen reglas del tipo modus ponens, es decir, "Si es verdad el
antecedente, entonces es verdad el consecuente". No obstante, la forma de
escribir las clusulas es al contrario de lo habitual. Primero se escribe el
consecuente y luego el antecedente.
C
Fue diseado en 1971, por Dennis Ritchie y Ken Thompson mientras trabajaban
para los Laboratorios Bell, y se bas en los lenguajes de programacin B y BCPL.
Se basa en el paradigma imperativo y desde su creacin estuvo pensado para
programacin de sistemas operativos, se cre para usarse en UNIX, y creci de la
mano del desarrollo de UNIX, lo que propici la creacin de caractersticas
avanzadas tales como variables dinmicas, multitarea, manejo de interrupciones,
forking y un poderoso manejo entrada/salida de bajo nivel. Debido a esto C es
comnmente usado para programacin de nivel de sistema en UNIX, Linux y Mac.
Se trata de un lenguaje no fuertemente tipeado de medio nivel pero con muchas
caractersticas de bajo nivel. Dispone de las estructuras tpicas de los lenguajes de
alto nivel pero, a su vez, dispone de construcciones del lenguaje que permiten un
control a muy bajo nivel. Destaca su gran riqueza de operadores y expresiones.
C++
A finales de los 70's y principio de los 80's un nuevo modelo de de programacin
fue desarrollado, la programacin orientada a objetos, la idea bsica es que los
objetos son piezas de cdigo auto contenidas y reusables. Bjarne Stroustroup,
tambin de los Laboratorios Bell, desarrollo un nuevo lenguaje basado en C que
aplica los conceptos de la programacin orientada a objetos, inicialmente se llamo
C con clases, para posteriormente tomar su nombre definitivo C++ cuando fue
publicado en 1983.
5
Las principales caractersticas del C++ son abstraccin, el soporte para
programacin orientada a objetos y el soporte de plantillas o programacin
genrica. Por lo cual, se puede decir que C++ es un lenguaje multi paradigma que
abarca tres paradigmas de la programacin: La programacin estructurada, la
programacin genrica y la programacin orientada a objetos.
Actualmente cuenta con un estndar ISO y es muy popular en la programacin de
aplicaciones.
Perl
Perl (Practical Extraction and Report Language), fue desarrollado por Larry Wall,
inicialmente motivado para cubrir las carencias de sed y awk y las limitaciones del
shell, su primer versin publica fue anunciada en el Newsgroup comp. sources.
misc el 18 de diciembre de 1987.
Actualmente Perl es un lenguaje de propsito general, usado para amplia gama de
tareas que incluyen administracin de sistemas, desarrollo web, programacin en
red, desarrollo GUI, si lo deseas, puedes programar orientado a objetos y mucho
mas.
Es uno de los lenguajes ms flexibles y poderosos, junto con Lisp, permite
desarrollar prcticamente cualquier cosa con l, es poderoso, flexible y expresivo.
Perl es libre y es divertido, permite ser creativo y no te ata a las restricciones
impuestas por el diseador del lenguaje, en Perl siempre hay ms de una manera
de hacer las cosas.
Sin embargo, esta flexibilidad y poder no son apreciados por los programadores
promedio que prefieren lenguajes ms simples y fciles de aprender, por lo cual
Perl es el blanco de muchas crticas nacidas de la ignorancia.
Perl es multiplataforma y desde hace muchos aos a demostrado en el mundo real
producir cdigo completamente reusable sin necesitar programacin orientada a
objetos.
Python
Es un lenguaje interpretado e interactivo, creado por Guido Van Rossum en 1991.
Es completamente tipeado dinamicamente, usa manejo automtico de memoria,
por lo cual es similar a Lisp, Perl, Ruby, Scheme y Tcl.
Es desarrollado como proyecto de software libre, manejado por la Python Software
Foundation. Tomo varias de sus caractersticas de Lisp.
Algunos lo consideran la "oposicin leal" a Perl, lenguaje con el cual mantiene una
rivalidad amistosa. Los usuarios de Python consideran a ste mucho ms limpio y
elegante para programar. Sin embargo esto es ms un punto de vista de sus
usuarios que una realidad.
6
Su facilidad de aprendizaje, su orientacin a programadores promedio, su limpieza
de cdigo, hacen que sea uno de los lenguajes ms exitosos.
Ruby
Es un lenguaje de programacin interpretado, orientado a objetos, con una sintaxis
inspirada por Perl y Ada, que tambin tomo ideas de Lisp, Python, Dylan y CLU.
Fue creado por Yukihiro Matsumoto, quien comenz su desarrollo en 1993, y lo
public en 1995.
El nombre Ruby fue elegido para reflejar su herencia de Perl.
Entre sus caractersticas tenemos:
Lenguaje de guiones interpretado:
- Posibilidad de realizar directamente llamadas al sistema operativo
- Potentes operaciones sobre cadenas de caracteres y expresiones regulares
- Retroalimentacin inmediata durante el proceso de desarrollo
Rpido y sencillo:
- Son innecesarias las declaraciones de variables
- Las variables son de tipo dinmico.
- La sintaxis es simple y consistente
- La gestin de la memoria es automtica
Programacin orientada a objetos:
- Todo es un objeto
- Clases, herencia, mtodos, ...
- Mtodos singleton
- Mixins por mdulos
- Iteradores y cierres
Tambin:
- Enteros de precisin mltiple
- Modelo de procesamiento de excepciones
- Carga dinmica
- Hilos
7
Ansi Common Lisp
En abril de 1981, despus de una reunin patrocinada por DARPA, se unieron los
esfuerzos de Symbolics, el proyecto SPICE, el proyecto NIL y el proyecto S-1 Lisp,
para definir Common Lisp.
Common Lisp fue diseado como una descripcin de una familia de dialectos de
Lisp. Common Lisp recibi alimentacin de La Maquina Lisp, MacLisp, NIL, S-1
Lisp, Spice Lisp y Scheme. El libro Common Lisp: The language es la
descripcin de ese diseo.
Su semntica fue dejada sin especificar en aquellas partes donde una fuerte
especificacin pudiera ser un obstculo en el uso e investigacin de Lisp.
En 1986 se formo un grupo de trabajo para producir un draft para un estndar
ANSI de Common Lisp, entre las especificaciones que present se encontraban
estandarizaciones para portabilidad, facilidades de iteracin, manejo de grandes
conjuntos de caracteres, un sistema de programacin orientada a objetos, entre
otras. El estndar ANSI Common Lisp fue publicado en 1994.
Lisp se consolido como el lenguaje de programacin ms poderoso y flexible
jams inventado. Muchos de los lenguajes modernos han copiado la mayora de
sus caractersticas, sin embrago no todas ya que entonces no podran decir que
son un nuevo lenguaje sino simplemente otro dialecto de Lisp.
Java
Java es una plataforma de softwaredesarrollada por Sun Microsystems, de tal
manera que los programas creados en ella puedan ejecutarse sin cambios en
diferentes tipos de arquitecturasy dispositivos computacionales.
La plataforma Java consta de las siguientes partes:
- El lenguaje de programacin, mismo.
- La mquina virtual de Java o JRE, que permite la portabilidad en ejecucin.
- El API Java, una biblioteca estndar para el lenguaje
El lenguaje de programacin fue desarrollado por James Gosling, y sus equipo en
Sun Microsystems,entre 1990 y 1994, pensado originalmente como un reemplazo
de C++, orientado a dispositivos embebidos, y a la televisin interactiva,
posteriormente que para rescatarlo del fracaso y fue reorientado hacia su
aplicacin en la Web.
Las cinco metas del lenguaje Java son:
o Orientado a objetos
o Multiplataforma
o Soporte integrado para redes de computadoras
8
o Diseado para ejecutar cdigo de fuentes remotas de modo seguro
o Fcil de usar
Desde sus inicios Java no fue bien recibido por su falta de aportaciones originales,
su lentitud, y su rgida estructura, sin embargo en base a intensas campaas de
marketing Sun ha logrado que en los ambientes empresariales Java sea uno de
los estndares sobre todo para aplicaciones del lado del servidor.
Java tambin es presentado muchas veces como un lenguaje Libre lo cual no es
completamente cierto.
Java Script
Es un lenguaje de script basado en objetos, que se apoya en el modelo de
prototipos. Es muy popular por su uso en sitios Web.
Fue desarrollado por Brendan Eich, en su trabajo para Netscape, quien lo public
en diciembre de 1995.
Su sintaxis es parecida a la de C, y al igual que C utiliza el concepto de palabras
reservadas, tiene soporte para expresiones regulares y UTF.
Cuando se usa en Web, se conecta a travs de su interfaz DOM (Document
Object Model) a las aplicaciones tanto del lado del cliente como del servidor.
Gracias a esto es usado para crear poderosas aplicaciones web dinmicas.
Desafortunadamente los diferentes navegadores exponen diferentes objetos y
mtodos por lo cual es necesario escribir versiones especificas de un programa en
Javascript para los diferentes tipos de navegadores.
Entre las principales tecnologas para interactuar con DOM que usan JavaScript
esta AJAX y DHTML.
Php
Creado por Rasmus Lerdorf, en 1994, inicialmente eran una serie de scripts en
Perl y posteriormente estos scripts fueron reescritos en C, que el usaba para
algunas tareas Web. Inicialmente significaba Personal Home Page Tools, y fue
publicado por primera vez el 8 de junio de 1995, actualmente su nombre oficial es:
PHP Hypertext Preprocessor.
Las caractersticas ms destacadas de PHP son su facilidad de aprendizaje y que
es software libre.
9
Las anteriores caractersticas, sumadas a su amplio soporte a manejadores de
bases de datos lo han convertido en uno de los lenguajes ms populares para
programacin Web, los famosos desarrollos LAMP.
Comparte caractersticas con otros lenguajes de programacin como C y perl y
recientemente con Java.
Adems de ser usado en web, puede usarse desde la lnea de comandos y para
construir GUI's con PHP-GTK.
C#
Es un lenguaje orientado a objetos desarrollado por Microsoft, tomando ideas de
C++ y Java, como parte de su estrategia comercial .Net.
Esta normalizado, por ECMA quien en el ao 2001 publico laECMA-334 C#
Language Specification; en el ao 2003 se convirti en un estndar ISO (ISO/IEC
23270).
Adems de la implementacin de Microsoft existen implementaciones libres como
Mono y dotGNU.
Gracias a la maquinara comercial de Microsoft y la amplia base de escritorios
Windows, el uso de C# es muy extendido en entornos corporativos y en el mundo
Windows en general.
Los proyectos libres de C#, no son muy populares entre la comunidad del software
libre, por la desconfianza hacia Microsoft y sus patentes.
Conclusin
La historia de los lenguajes de programacin es materia obligada y fascinante para
cualquier interesado en la programacin. Permite tener un mejor panorama de que
es y que no es cada lenguaje y as elegir de una mejor manera los que le
interesen y profundizar en los fundamentos de cada uno para encontrar el
adecuado a su necesidad con bases solidas, sin dejarse llevar por modas o
mercadotecnia.
10
1.3 ALGORITMOS.
Un algoritmo es un conjunto de operaciones y procedimientos que deben seguirse
para resolver un problema. La palabra algoritmo se deriva del nombre latinizado
del gran Matemtico rabe Mohamed Ibn Al Kow Rizmi, el cual escribi sobre los
aos 800 y 825 su obra Quitad Al Mugabala, donde se recoga el sistema de
numeracin hind y el concepto del cero. Fue Fibonacci, el que tradujo la obra al
latn y el inicio con la palabra: Algoritm Dicit. El lenguaje algortmico es aquel por
medio del cual se realiza un anlisis previo del problema a resolver y encontrar un
mtodo eficaz que permita resolverlo. El conjunto de todas las operaciones a
realizar y el orden en que se deben efectuar recibe el nombre de algoritmo. Es un
mtodo para resolver un problema mediante una serie de datos precisos, definidos
y finitos.
Generalidades
El programador de computadoras es antes que nada una persona que resuelve
problemas, por lo que para llegar a ser un programador eficaz se necesita
aprender a resolver problemas de un modo riguroso y sistemtico. A la
metodologa necesaria para resolver problemas mediante programas se denomina
Metodologa de la Programacin. El eje central de esta metodologa es el
concepto, ya tratado, de algoritmo.
Un algoritmo es un mtodo para resolver un problema. Aunque la popularizacin
del trmino ha llegado con el advenimiento de la era informtica, algoritmo
proviene de Mohammed al-Khowarizmi, matemtico persa que vivi durante el
siglo IX y alcanzo gran reputacin por el enunciado de las reglas para sumar,
restar, multiplicar y dividir nmeros decimales; la traduccin al latn del apellido de
la palabra algorismus deriv posteriormente en algoritmo. Euclides, el gran
matemtico griego (del siglo IV antes de Cristo) que invento un mtodo para
encontrar el mximo comn divisor de dos nmeros, se considera con Al-
Khowarizmi el otro gran padre de la algoritmia.
El profesor Niklaus Wirth, inventor de pascal, Modula-2 y Oberon, titulo uno de sus
ms famosos libros, Algoritmos + Estructuras de Datos = Programas,
significndonos que solo se puede llegar a realizar un buen programa con el
diseo de un algoritmo y una correcta estructura de datos. Esta ecuacin ser de
una de las hiptesis fundamentales consideradas.
La resolucin de un problema exige el diseo de un algoritmo que resuelva el
problema propuesto.
Los pasos para la resolucin de un problema son:
11
1. Diseo del algoritmo, que describe la secuencia ordenada de pasos que
conducen a la solucin de un problema dado. (Anlisis del problema y
desarrollo del algoritmo).
2. Expresar el algoritmo como un programa de lenguaje de programacin
adecuado. (Fase de codificacin.)
3. Ejecucin y validacin del programa por la computadora.
Para llegar a la realizacin de un programa es necesario el diseo previo de
algoritmo, de modo que sin algoritmo no puede existir un programa.
Los algoritmos son independientes tanto del lenguaje de programacin en que se
expresan como de la computadora que lo ejecuta. En cada problema el algoritmo
se puede expresar en un lenguaje diferente de programacin y ejecutarse en una
computadora distinta; sin embargo, el algoritmo ser siempre el mismo. As, por
ejemplo, en una analoga con la vida diaria, una receta de un plato de cocina se
puede expresar en espaol, ingles o francs, pero cualquiera que sea el lenguaje,
los pasos para la elaboracin del plato se realizaran sin importar el idioma del
cocinero.
En la ciencia de la computacin y en la programacin, los algoritmos son ms
importantes que los lenguajes de programacin o las computadoras. Un lenguaje
de programacin es tan solo un medio para expresar un algoritmo y una
computadora es solo un procesador para ejecutarlo. Tanto el lenguaje de
programacin como la computadora son los medios para obtener un fin: conseguir
que el algoritmo se ejecute y se efecte el proceso correspondiente.
Dada la importancia del algoritmo en la ciencia de la computacin, un aspecto muy
importante ser el diseo de algoritmos. El diseo de la mayora de los algoritmos
requiere creatividad y conocimientos profundos de la tcnica de la programacin.
En esencia, la solucin de un problema se puede expresar mediante un algoritmo.
Caractersticas de los Algoritmos:
Las caractersticas fundamentales que debe cumplir todo algoritmo son:
- Un algoritmo debe ser preciso e indicar el orden de realizacin de cada paso.
- Un algoritmo debe estar definido. Si se sigue un algoritmo dos veces, se debe
obtener el mismo resultado cada vez.
- Un algoritmo debe ser finito. Si se sigue un algoritmo se debe terminar en algn
momento; o sea, debe tener un numero finito de pasos.
La definicin de un algoritmo debe definir tres partes: Entrada, Proceso y Salida.
En el algoritmo de receta de cocina citado anteriormente se tendr: Entrada:
ingrediente, utensilios y empleados. Proceso: elaboracin de la receta en la
cocina. Salida: terminacin del plato (por ejemplo, cordero).
Ejemplo de Algoritmo:
Un cliente ejecuta un pedido a una fbrica. Esta examina en su banco de datos la
ficha del cliente; si el cliente es solvente entonces la empresa acepta el pedido; en
caso contrario rechazar el pedido.
12
Redactar el algoritmo correspondiente.
Los pasos del algoritmo son:
1. Inicio
2. Leer el pedido
3. Examinar la ficha del cliente
Si ve al paso 5
4. Pregunta el cliente es solvente?
No ve al paso 7
5. Acepta el pedido
6. Ve al paso 8
7. Rechaza el pedido
8. Fin
Diseo del Algoritmo:
En la etapa de anlisis del proceso de programacin se determina que hace el
programa. En la etapa de diseo se determina como hace el programa la tarea
solicitada. Los mtodos ms eficaces para el proceso de diseo se basan en el
conocido Divide y Vencers, es decir, la resolucin de un problema complejo se
realiza dividiendo el problema en sub problemas y a continuacin dividir estos sub
problemas en otros de nivel ms bajo, hasta que pueda ser implementada una
solucin en la computadora. Este mtodo se conoce tcnicamente como diseo
descendente (Top Down) o modular. El proceso de romper el problema en cada
etapa y expresar cada paso en forma ms detallada se denomina refinamiento
sucesivo.
Cada sub programa es resuelto mediante un modulo (sub programa) que tiene un
solo punto de entrada y un solo punto de salida. Cualquier programa bien
diseado consta de un programa principal (el modulo de nivel ms alto) que llama
a sub programas (mdulos de nivel ms bajo) que a su vez pueden llamar a otros
sub programas.
Los programas estructurados de esta forma se dice que tienen un diseo modular
y el mtodo de romper el programa en mdulos ms pequeo se llama
Programacin Modular. Los mdulos pueden ser planeados, codificados,
comprobados y depurados independientemente (incluso por diferentes
programadores) y a continuacin combinarlos entre s. El proceso implica la
ejecucin de los siguientes pasos hasta que el programa se termina:
- programar modulo.
- Comprobar el modulo.
- Si es necesario, depurar el modulo.
- Combinar el modulo con los mdulos anteriores.
El proceso que convierte los resultados del anlisis del problema en un diseo
modular con refinamiento sucesivo que permitan una posterior traduccin al
lenguaje se denomina diseo de algoritmo. El diseo del algoritmo es
13
independiente del lenguaje de programacin en el que se vaya a codificar
posteriormente.
Ejemplos de algoritmos:
I. Hacer un algoritmo que sirva para calcular el area de un rectngulo
1. Inicio
2. valor de la base?
3. valor de la altura?
4. Multiplica el valor de la base por el valor de la altura
5. El rea del rectngulo es el resultado del paso 4
6. Fin
II. Hacer un algoritmo para cambiar una llanta de un carro que esta desinflada
1. Inicio
2. Abrir la cajuela
Si ve al paso 4
3. Pregunta hay herramienta y refaccin?
No ve al paso 16
4. Saca la herramienta de la cajuela
5. Coloca el gato debajo del carro en posicin adecuada
6. Levanta el carro
7. Afloja una tuerca
Si ve al paso 9
8. Pregunta son todas las tuercas?
No ve al paso 7
9. Quita la llanta
10. Coloca la llanta nueva
11. pon un una tuerca
Si ve al paso 13
12. Pregunta son todas las tuercas?
No ve al paso 11
13. Baja el carro
14. Quita el gato
15. Guarda la herramienta
16. Cierra la cajuela
17. Fin
III. Hacer un algoritmo para calcular el rea, permetro y volumen de una esfera.
1. inicio
2. valor del radio?
3. El valor de pi es 3.1416
14
4. Multiplica el valor del radio por dos
5. Multiplica el valor de pi por el resultado del paso 4
6. El valor del radio multiplcalo por si mismo
7. Multiplica el valor de pi por el resultado del paso 6
8. Divide 4 entre 3
9. El resultado del paso 6 multiplcalo por el valor del radio
10. El resultado del paso 8 multiplcalo por el valor de pi y por el resultado
del paso 9.
11. El rea del crculo es el resultado del paso 7
12. El permetro del crculo es el resultado del paso 5
13. El volumen de la esfera es el resultado del paso 10
14. Fin
IV. Hacer un algoritmo para calcular el rea de un circulo, solo si el radio es
menor que 20, de otra manera que calcule el permetro de un circulo
1. Inicio
2. El valor de pi es 3.1416
3. Valor del radio?
Si ve al paso 5
4. Pregunta el radio es menor que 20?
No ve al paso 9
5. El valor del radio multiplcalo por si mismo
6. El resultado del paso 5 multiplcalo por el valor de pi
7. El valor del rea del crculo es el resultado del paso 6
8. Ve al paso 12
9. El valor del radio multiplcalo por dos
10. El resultado del paso 9 multiplcalo por el valor de pi
11. El valor del permetro es el resultado del paso 10
12. Fin
Problemas propuestos.
Hacer el algoritmo necesario para dar solucin a cada problema.
1. Suponga que un individuo desea invertir su capital en un banco y desea saber
cunto dinero ganar despus de un mes si el banco paga a razn de 2%
mensual.
2. Un vendedor recibe un sueldo base ms un 10% extra por comisin de sus
ventas, el vendedor desea saber cunto dinero obtendr por concepto de
comisiones por las tres ventas que realiza en el mes y el total que recibir en
el mes tomando en cuenta su sueldo base y comisiones.
15
3. Una tienda ofrece un descuento del 15% sobre el total de la compra y un
cliente desea saber cunto deber pagar finalmente por su compra.
4. Un aprendiz desea saber cul ser su calificacin final en la materia de
Algoritmos. Dicha calificacin se compone de los siguientes porcentajes:
55% del promedio de sus tres calificaciones parciales.
30% de la calificacin del examen final.
15% de la calificacin de un trabajo final.
5. Un maestro desea saber qu porcentaje de hombres y que porcentaje de
mujeres hay en un grupo de estudiantes.
6. Realizar un algoritmo que calcule la edad de una persona dadas la fecha de
nacimiento y la fecha actual
7. Dada una cantidad en pesos, obtener la equivalencia en dlares, asumiendo
que la unidad cambiara es un dato desconocido.
8. Leer un nmero y escribir el valor absoluto del mismo.
9. La presin, el volumen y la temperatura de una masa de aire se relacionan
por la formula:
Masa = (presin * volumen)/(0.37 * (temperatura + 460))
10. Calcular el nmero de pulsaciones que una persona debe tener por cada 10
segundos de ejercicio, si la formula es:
num. Pulsaciones = (220 - edad)/10
11. Calcular el nuevo salario de un obrero si obtuvo un incremento del 25% sobre
su salario anterior.
12. En un hospital existen tres reas: Ginecologa, Pediatra, Traumatologa. El
presupuesto anual del hospital se reparte conforme a la siguiente tabla:
rea Porcentaje del presupuesto
Ginecologa 40%
Traumatologa 30%
Pediatra 30%
Obtener la cantidad de dinero que recibir cada rea, para cualquier monto
presupuestal.
13. El dueo de una tienda compra un artculo a un precio determinado. Obtener
el precio en que lo debe vender para obtener una ganancia del 30%.
16
14. Todos los lunes, mircoles y viernes, una persona corre la misma ruta y
cronometra los tiempos obtenidos. Determinar el tiempo promedio que la
persona tarda en recorrer la ruta en una semana cualquiera.
15. Tres personas deciden invertir su dinero para fundar una empresa. Cada una
de ellas invierte una cantidad distinta. Obtener el porcentaje que cada quien
invierte con respecto a la cantidad total invertida.
16. Un aprendiz desea saber cul ser su promedio general en las tres materias
ms difciles que cursa y cul ser el promedio que obtendr en cada una de
ellas. Estas materias se evalan como se muestra a continuacin:
La calificacin de Matemticas se obtiene de la sig. Manera:
Examen 90%
Promedio de tareas 10%
En esta materia se pidi un total de tres tareas.
La calificacin de Fsica se obtiene de la sig. Manera:
Examen 80%
Promedio de tareas 20%
En esta materia se pidi un total de dos tareas.
La calificacin de Qumica se obtiene de la sig. Manera:
Examen 85%
Promedio de tareas 15%
En esta materia se pidi un promedio de tres tareas.
17. Un hombre desea saber cunto dinero se genera por concepto de intereses
sobre la cantidad que tiene en inversin en el banco. El decidir reinvertir los
intereses siempre y cuando estos excedan a $7000, y en ese caso desea
saber cunto dinero tendr finalmente en su cuenta.
18. Determinar si un aprendiz aprueba a reprueba un curso, sabiendo que
aprobara si su promedio de tres calificaciones es mayor o igual a 70;
reprueba en caso contrario.
19. En un almacn se hace un 20% de descuento a los clientes cuya compra
supere los $1000 Cul ser la cantidad que pagara una persona por su
compra?
20. Un obrero necesita calcular su salario semanal, el cual se obtiene de la
siguiente manera:
Si trabaja 40 horas o menos se le paga $16 por hora
Si trabaja ms de 40 horas se le paga $16 por cada una de las primeras 40
horas y $20 por cada hora extra.
17
21. Un hombre desea saber cunto dinero se genera por concepto de intereses
sobre la cantidad que tiene en inversin en el banco. El decidir reinvertir los
intereses siempre y cuando estos excedan a $7000, y en ese caso desea
saber cunto dinero tendr finalmente en su cuenta.
22. Que lea dos nmeros y los imprima en forma ascendente
23. Una persona enferma, que pesa 70 kg, se encuentra en reposo y desea saber
cuntas caloras consume su cuerpo durante todo el tiempo que realice una
misma actividad. Las actividades que tiene permitido realizar son nicamente
dormir o estar sentado en reposo. Los datos que tiene son que estando
dormido consume 1.08 caloras por minuto y estando sentado en reposo
consume 1.66 caloras por minuto.
24. Hacer un algoritmo que imprima el nombre de un artculo, clave, precio
original y su precio con descuento. El descuento lo hace en base a la clave,
si la clave es 01 el descuento es del 10% y si la clave es 02 el descuento en
del 20% (solo existen dos claves).
25. Hacer un algoritmo que calcule el total a pagar por la compra de camisas. Si
se compran tres camisas o mas se aplica un descuento del 20% sobre el
total de la compra y si son menos de tres camisas un descuento del 10%
26. Una empresa quiere hacer una compra de varias piezas de la misma clase a
una fbrica de refacciones. La empresa, dependiendo del monto total de la
compra, decidir qu hacer para pagar al fabricante.
Si el monto total de la compra excede de $500 000 la empresa tendr la
capacidad de invertir de su propio dinero un 55% del monto de la compra,
pedir prestado al banco un 30% y el resto lo pagara solicitando un crdito al
fabricante.
Si el monto total de la compra no excede de $500 000 la empresa tendr
capacidad de invertir de su propio dinero un 70% y el restante 30% lo pagara
solicitando crdito al fabricante.
El fabricante cobra por concepto de intereses un 20% sobre la cantidad que
se le pague a crdito.
27. Calcular el total que una persona debe pagar en un llantera, si el precio de
cada llanta es de $800 si se compran menos de 5 llantas y de $700 si se
compran 5 o ms.
28. En un supermercado se hace una promocin, mediante la cual el cliente
obtiene un descuento dependiendo de un numero que se escoge al azar. Si
el numero escogido es menor que 74 el descuento es del 15% sobre el total
de la compra, si es mayor o igual a 74 el descuento es del 20%. Obtener
cunto dinero se le descuenta.
18
29. Calcular el nmero de pulsaciones que debe tener una persona por cada 10
segundos de ejercicio aerbico; la formula que se aplica cuando el sexo es
femenino es:
num. Pulsaciones = (220 - edad)/10
y si el sexo es masculino:
num. Pulsaciones = (210 - edad)/10
30. Una compaa de seguros est abriendo un depto. de finanzas y estableci
un programa para captar clientes, que consiste en lo siguiente: Si el monto
por el que se efecta la fianza es menor que $50 000 la cuota a pagar ser
por el 3% del monto, y si el monto es mayor que $50 000 la cuota a pagar
ser el 2% del monto. La afianzadora desea determinar cul ser la cuota
que debe pagar un cliente.
31. En una escuela la colegiatura de los aprendiz se determina segn el numero
de materias que cursan. El costo de todas las materias es el mismo.
Se ha establecido un programa para estimular a los aprendiz, el cual consiste
en lo siguiente: si el promedio obtenido por un aprendiz en el ltimo periodo
es mayor o igual que 9, se le har un descuento del 30% sobre la colegiatura
y no se le cobrara IVA; si el promedio obtenido es menor que 9 deber pagar
la colegiatura completa, la cual incluye el 10% de IVA.
Obtener cuanto debe pagar un aprendiz.
32. Una empresa de bienes races ofrece casas de inters social, bajo las
siguientes condiciones: Si los ingresos del comprador son menores de $8000
o mas el enganche ser del 15% del costo de la casa y el resto se distribuir
en pagos mensuales, a pagar en diez aos. Si los ingresos del comprador
son menos de $8000 o ms el enganche ser del 30% del costo de la casa y
el resto se distribuir en pagos mensuales a pagar en 7 aos.
La empresa quiere obtener cuanto debe pagar un comprador por concepto
de enganche y cuanto por cada pago parcial.
33. El gobierno ha establecido el programa SAR (Sistema de Ahorro para el
Retiro) que consiste en que los dueos de la empresa deben
obligatoriamente depositar en una cuenta bancaria un porcentaje del salario
de los trabajadores; adicionalmente los trabajadores pueden solicitar a la
empresa que deposite directamente una cuota fija o un porcentaje de su
salario en la cuenta del SAR, la cual le ser descontada de su pago.
Un trabajador que ha decidido aportar a su cuenta del SAR desea saber la
cantidad total de dinero que estar depositado a esa cuenta cada mes, y el
pago mensual que recibir.
34. Una persona desea iniciar un negocio, para lo cual piensa verificar cunto
dinero le prestara el banco por hipotecar su casa. Tiene una cuenta bancaria,
pero no quiere disponer de ella a menos que el monto por hipotecar su casa
sea muy pequeo. Si el monto de la hipoteca es menor que $1000000
19
entonces invertir el 50% de la inversin total y un socio invertir el otro 50%.
Si el monto de la hipoteca es de $ 1000000 o ms, entonces invertir el
monto total de la hipoteca y el resto del dinero que se necesite para cubrir la
inversin total se repartir a partes iguales entre el socio y el.
35. El gobierno del estado de Mxico desea reforestar un bosque que mide
determinado nmero de hectreas. Si la superficie del terreno excede a 1
milln de metros cuadrados, entonces decidir sembrar de la sig. manera:
Porcentaje de la superficie del bosque Tipo de rbol
70% pino
20% oyamel
10% cedro
Si la superficie del terreno es menor o igual a un milln de metros cuadrados,
entonces decidir sembrar de la sig. manera:
Porcentaje de la superficie del bosque Tipo de rbol
50% pino
30% oyamel
20% cedro
El gobierno desea saber el nmero de pinos, oyameles y cedros que tendr
que sembrar en el bosque, si se sabe que en 10 metros cuadrados caben 8
pinos, en 15 metros cuadrados caben 15 oyameles y en 18 metros
cuadrados caben 10 cedros. Tambin se sabe que una hectrea equivale a
10 mil metros cuadrados.
36. Una fbrica ha sido sometida a un programa de control de contaminacin
para lo cual se efecta una revisin de los puntos IMECA generados por la
fbrica. El programa de control de contaminacin consiste en medir los
puntos IMECA que emite la fabrica en cinco das de una semana y si el
promedio es superior a los 170 puntos entonces tendr la sancin de parar
su produccin por una semana y una multa del 50% de las ganancias diarias
cuando no se detiene la produccin. Si el promedio obtenido de puntos
IMECA es de 170 o menor entonces no tendr ni sancin ni multa. El dueo
de la fabrica desea saber cunto dinero perder despus de ser sometido a
la revisin.
37. Una persona se encuentra con un problema de comprar un automvil o un
terreno, los cuales cuestan exactamente lo mismo. Sabe que mientras el
automvil se devala, con el terreno sucede lo contrario. Esta persona
comprara el automvil si al cabo de tres aos la devaluacin de este no es
mayor que la mitad del incremento del valor del terreno. Aydale a esta
persona a determinar si debe o no comprar el automvil.
38. Leer 2 nmeros; si son iguales que los multiplique, si el primero es mayor que
el segundo que los reste y si no que los sume.
20
39. Leer tres nmeros diferentes e imprimir el nmero mayor de los tres.
40. Determinar la cantidad de dinero que recibir un trabajador por concepto de
las horas extras trabajadas en una empresa, sabiendo que cuando las horas
de trabajo exceden de 40, el resto se consideran horas extras y que estas se
pagan al doble de una hora normal cuando no exceden de 8; si las horas
extras exceden de 8 se pagan las primeras 8 al doble de lo que se pagan las
horas normales y el resto al triple.
1.4 CARACTERISTICAS DE MATLAB
MATLAB es el nombre abreviado de MATrix LABoratory. Es un programa que
sirve para realizar clculos numricos con vectores y matrices. Como caso
particular puede tambin trabajar con nmeros escalares, reales, complejos,
imaginarios, cadenas de caracteres y otras estructuras de informacin ms
complejas.
Una de las capacidades ms atractivas es la de realizar una amplia variedad de
grficos de dos y tres dimensiones. MATLAB tiene tambin un lenguaje propio de
programacin, que a comparacin con otros lenguajes, ste es mucho ms
amigable y cuenta con una gama amplia de aplicaciones.
MATLAB es un gran lenguaje de programacin del tipo clculo tcnico y cientfico
que para ciertas operaciones es mucho ms rpido que otros lenguajes que
existen en el mercado, esto aprovechando la capacidad de vectorizacin con que
cuenta el lenguaje. En otras aplicaciones resulta un poco ms lento que el cdigo
equivalente desarrollado en por ejemplo C/C++ o Fortran.
En la versin 2010, que es con la que vamos a trabajar, MATLAB cuenta con un
acelerador JIT (Just In Time), que mejora significativamente la velocidad de
ejecucin de los ficheros *.m, (ficheros propios de MATLAB) en ciertas
circunstancias, por ejemplo cuando no se hacen llamados a otros ficheros *.m, no
se utilizan estructuras y clases, etc. Aunque limitado en ese momento, cuando es
aplicable la propiedad de vectorizacin de los algoritmos mejora sensiblemente la
velocidad.
En cualquier caso, el lenguaje de programacin de MATLAB siempre es una
magnifica herramienta de alto nivel para desarrollar aplicaciones tcnicas, de fcil
manejo y que, como ya se ha dicho, aumenta de gran manera la productividad de
los programadores respecto a otros entornos de desarrollo.
MATLAB dispone de un cdigo bsico y de muchas libreras especializadas
llamadas toolboxes que como su nombre lo dice son herramientas ya creadas
21
con un fin especifico, lo cual es otra de las grandes bondades y ventajas de usar
un entorno de desarrollo como ste.
Matlab sirve adems para analizar y resolver una gran diversidad de problemas
que pueden abarcar temas distintos tales como:
- Anlisis de circuitos elctricos
- Diseo de estructuras mecanicas
- Modelacin de sistemas de control
- Tratamiento de seales electrnicas
- Matemticas
- Estadstica
- Diseo
- Redes neuronales
- Simulacin
- Etc.
22
Introduccin a
MATLAB
2.1 INSTALACION DE MATLAB
Matlab 2010 requiere de las siguientes caractersticas en el equipo para que
pueda funcionar adecuadamente:
Necesidades del Matlab de 32 bits
Sistema Operativo: Windows xp, service pack 2 o 3, Windows Vista service pack
2, Windows 7
Procesador: Intel Pentium 4 o mayor, AMD athlon64**, AMD sempron
Memoria: 510 MB libres solo para Matlab
Memoria RAM: 1024 MB
Procesador de textos: Microsoft Word 2002 o mayor
Hoja de clculo: Microsoft Excel 2002 o mayor
Unidad de discos compactos (DVD)
Tarjeta de sonido
Tarjeta de video
Acceso a internet
Matlab es un entorno de trabajo y un lenguaje de programacin. Matlab incluye
una serie de aplicaciones especializadas llamados toolboxes, tiles para trabajar
en una disciplina especfica o rama de la ciencia. Algunos de ellos son:
- ADCPtools - acoustic doppler current profiler data processing
- AFDesign - designing analog and digital filters
- AIRES - automatic integration of reusable embedded software
- Air-Sea - air-sea flux estimates in oceanography
- Animation - developing scientific animations
- ARfit - estimation of parameters and eigenmodes of multivariate autoregressive
methods
- ARMASA - power spectrum estimation
- AR-Toolkit - computer vision tracking
- Auditory - auditory models
- b4m - interval arithmetic
- Bayes Net - inference and learning for directed graphical models
- Binaural Modeling - calculating binaural cross-correlograms of sound
2
23
- Bode Step - design of control systems with maximized feedback
- Bootstrap - for resampling, hypothesis testing and confidence interval estimation
- BrainStorm - MEG and EEG data visualization and processing
- BSTEX - equation viewer
- CALFEM- interactive program for teaching the finite element method
- Calibr - for calibrating CCD cameras
- Camera Calibration
- Captain - non-stationary time series analysis and forecasting
- CHMMBOX - for coupled hidden Markov modeling using maximum likelihood
EM
- Classification - supervised and unsupervised classification algorithms
- CLOSID
- Cluster - for analysis of Gaussian mixture models for data set clustering
- Clustering - cluster analysis
- ClusterPack - cluster analysis
- COLEA - speech analysis
- CompEcon - solving problems in economics and finance
- Complex - for estimating temporal and spatial signal complexities
- Computational Statistics
- Coral - seismic waveform analysis
- DACE - kriging approximations to computer models
- DAIHM- data assimilation in hydrological and hydrodynamic models
- Data Visualization
- DBT - radar array processing
- DDE-BIFTOOL - bifurcation analysis of delay differential equations
- Denoise - for removing noise from signals
- DiffMan - solving differential equations on manifolds
- Dimensional Analysis -
- DIPimage - scientific image processing
- Direct - Laplace transform inversion via the direct integration method
- DirectSD - analysis and design of computer controlled systems with process-
oriented models
- DMsuite - differentiation matrix suite
- DMTTEQ - design and test time domain equalizer design methods
- DrawFilt - drawing digital and analog filters
- DSFWAV - spline interpolation with Dean wave solutions
- DWT - discrete wavelet transforms
- EasyKrig
- Econometrics
- EEGLAB
- EigTool - graphical tool for nonsymmetric eigenproblems
- EMSC - separating light scattering and absorbance by extended multiplicative
signal correction
- Engineering Vibration
- FastICA - fixed-point algorithm for ICA and projection pursuit
- FDC - flight dynamics and control
- FDtools - fractional delay filter design
24
- FlexICA - for independent components analysis
- FMBPC - fuzzy model-based predictive control
- ForWaRD - Fourier-wavelet regularized deconvolution
- FracLab - fractal analysis for signal processing
- FSBOX - stepwise forward and backward selection of features using linear
regression
- GABLE - geometric algebra tutorial
- GAOT - genetic algorithm optimization
- Garch - estimating and diagnosing heteroskedasticity in time series models
- GCE Data - managing, analyzing and displaying data and metadata stored using the
GCE data structure specification
- GCSV - growing cell structure visualization
- GEMANOVA - fitting multilinear ANOVA models
- Genetic Algorithm
- Geodetic - geodetic calculations
- GHSOM- growing hierarchical self-organizing map
- glmlab - general linear models
- GPIB - wrapper for GPIB library from National Instrument
- GTM- generative topographic mapping, a model for density modeling and data
visualization
- GVF - gradient vector flow for finding 3-D object boundaries
- HFRadarmap - converts HF radar data from radial current vectors to total vectors
- HFRC - importing, processing and manipulating HF radar data
- Hilbert - Hilbert transform by the rational eigenfunction expansion method
- HMM- hidden Markov models
- HMMBOX - for hidden Markov modeling using maximum likelihood EM
- HUTear - auditory modeling
- ICALAB - signal and image processing using ICA and higher order statistics
- Imputation - analysis of incomplete datasets
- IPEM- perception based musical analysis
- JMatLink - Matlab Java classes
- Kalman - Bayesian Kalman filter
- Kalman Filter - filtering, smoothing and parameter estimation (using EM) for linear
dynamical systems
- KALMTOOL - state estimation of nonlinear systems
- Kautz - Kautz filter design
- Kriging
- LDestimate - estimation of scaling exponents
- LDPC - low density parity check codes
- LISQ - wavelet lifting scheme on quincunx grids
- LKER - Laguerre kernel estimation tool
- LMAM-OLMAM- Levenberg Marquardt with Adaptive Momentum algorithm for
training feedforward neural networks
- Low-Field NMR - for exponential fitting, phase correction of quadrature data and
slicing
- LPSVM- Newton method for LP support vector machine for machine learning
problems
25
- LSDPTOOL - robust control system design using the loop shaping design procedure
- LS-SVMlab
- LSVM- Lagrangian support vector machine for machine learning problems
- Lyngby - functional neuroimaging
- MARBOX - for multivariate autogressive modeling and cross-spectral estimation
- MatArray - analysis of microarray data
- Matrix Computation - constructing test matrices, computing matrix factorizations,
visualizing matrices, and direct search optimization
- MCAT - Monte Carlo analysis
- MDP - Markov decision processes
- MESHPART - graph and mesh partioning methods
- MILES - maximum likelihood fitting using ordinary least squares algorithms
- MIMO - multidimensional code synthesis
- Missing - functions for handling missing data values
- M_Map - geographic mapping tools
- MODCONS - multi-objective control system design
- MOEA - multi-objective evolutionary algorithms
- MS - estimation of multiscaling exponents
- Multiblock - analysis and regression on several data blocks simultaneously
- Multiscale Shape Analysis
- Music Analysis - feature extraction from raw audio signals for content-based music
retrieval
- MWM- multifractal wavelet model
- NetCDF
- Netlab - neural network algorithms
- NiDAQ - data acquisition using the NiDAQ library
- NEDM- nonlinear economic dynamic models
- NMM- numerical methods in Matlab text
- NNCTRL - design and simulation of control systems based on neural networks
- NNSYSID - neural net based identification of nonlinear dynamic systems
- NSVM- newton support vector machine for solving machine learning problems
- NURBS - non-uniform rational B-splines
- N-way - analysis of multiway data with multilinear models
- OpenFEM - finite element development
- PCNN - pulse coupled neural networks
- Peruna - signal processing and analysis
- PhiVis - probabilistic hierarchical interactive visualization, i.e. functions for visual
analysis of multivariate continuous data
- Planar Manipulator - simulation of n-DOF planar manipulators
- PRTools - pattern recognition
- psignifit - testing hyptheses about psychometric functions
- PSVM- proximal support vector machine for solving machine learning problems
- Psychophysics - vision research
- PyrTools - multi-scale image processing
- RBF - radial basis function neural networks
- RBN - simulation of synchronous and asynchronous random boolean networks
- ReBEL - sigma-point Kalman filters
26
- Regression - basic multivariate data analysis and regression
- Regularization Tools
- Regularization Tools XP
- Restore Tools
- Robot - robotics functions, e.g. kinematics, dynamics and trajectory generation
- Robust Calibration - robust calibration in stats
- RRMT - rainfall-runoff modelling
- SAM- structure and motion
- Schwarz-Christoffel - computation of conformal maps to polygonally bounded
regions
- SDH - smoothed data histogram
- SeaGrid - orthogonal grid maker
- SEA-MAT - oceanographic analysis
- SLS - sparse least squares
- SolvOpt - solver for local optimization problems
- SOM- self-organizing map
- SOSTOOLS - solving sums of squares (SOS) optimization problems
- Spatial and Geometric Analysis
- Spatial Regression
- Spatial Statistics
- Spectral Methods
- SPM- statistical parametric mapping
- SSVM- smooth support vector machine for solving machine learning problems
- STATBAG - for linear regression, feature selection, generation of data, and
significance testing
- StatBox - statistical routines
- Statistical Pattern Recognition - pattern recognition methods
- Stixbox - statistics
- SVM- implements support vector machines
- SVM Classifier
- Symbolic Robot Dynamics
- TEMPLAR - wavelet-based template learning and pattern classification
- TextClust - model-based document clustering
- TextureSynth - analyzing and synthesizing visual textures
- TfMin - continous 3-D minimum time orbit transfer around Earth
- Time-Frequency - analyzing non-stationary signals using time-frequency
distributions
- Tree-Ring - tasks in tree-ring analysis
- TSA - uni- and multivariate, stationary and non-stationary time series analysis
- TSTOOL - nonlinear time series analysis
- T_Tide - harmonic analysis of tides
- UTVtools - computing and modifying rank-revealing URV and UTV
decompositions
- Uvi_Wave - wavelet analysis
- varimax - orthogonal rotation of EOFs
- VBHMM- variation Bayesian hidden Markov models
- VBMFA - variational Bayesian mixtures of factor analyzers
27
- VMT - VRML Molecule Toolbox, for animating results from molecular dynamics
experiments
- VOICEBOX
- VRMLplot - generates interactive VRML 2.0 graphs and animations
- VSVtools - computing and modifying symmetric rank-revealing decompositions
- WAFO - wave analysis for fatique and oceanography
- WarpTB - frequency-warped signal processing
- WAVEKIT - wavelet analysis
- WaveLab - wavelet analysis
- Weeks - Laplace transform inversion via the Weeks method
- WetCDF - NetCDF interface
- WHMT - wavelet-domain hidden Markov tree models
- WInHD - Wavelet-based inverse halftoning via deconvolution
- WSCT - weighted sequences clustering toolkit
- XMLTree - XML parser
- YAADA - analyze single particle mass spectrum data
- ZMAP - quantitative seismicity analysis
Para instalar la versin 2010 de Matlab, introduzca el DVD en la unidad
correspondiente, este DVD tiene un archivo autoejecutable que se ejecutar
automticamente mostrando la siguiente pantalla.
En esta pantalla vemos a escoger la opcin segunda que dice Install without using
internet
28
En seguida se presiona el botn que tiene la leyenda Next > y aparece una ventana
como la que se muestra en seguida.
Debajo de este recuadro nos pregunta que si aceptamos los trminos de la
licencia, le decimos que si (yes) y presionamos el botn de Next >
29
Ahora nos pregunta si tenemos licencia para instalar este programa. En el
recuadro que aparece en la parte de arriba tecleamos la clave que nos fue
proporcionada junto con el DVD y presionamos nuevamente el botn de Next >
Esta vez nos pregunta que tipo de instalacin queremos hacer, tpica o
personalizada, elegimos la tpica y presionamos nuevamente el botn
acostumbrado.
30
Ahora nos da el directorio raz en donde va a instalar el programa, en caso de no
existir lo va a crear.
Antes de empezar a instalar me da una lista de todas las aplicaciones que va a
instalar (toolboxes), con el fin de que se tenga esta informacin presente.
Acto seguido presionamos el botn Install >
31
Ahora lo que resta es esperar a que se termine de instalar.
Cuando ya termina de instalar el Matlab pregunta si lo quieres activar, para ello
vamos a presionar la tecla de costumbre.
32
Vamos a activarlo sin usar el internet. Para ello le vamos a proporcionar las dos
claves que vienen incluidas en el DVD, estas claves son diferentes a la que se dio
cuando empezamos a instalarlo.
Una vez instalado MATLAB crea un icono en nuestro escritorio con la siguiente
apariencia.
Basta con dar un doble clic sobre el y se ejecutar Matlab, mostrando el escritorio
de Matlab
Al arrancar MATLAB se abre una ventana similar a la mostrada en la figura 1.1.
Esta es la vista que se obtiene eligiendo la opcin Desktop Layout/Default, en el
men Desktop. Como esta configuracin puede ser cambiada fcilmente por el
usuario, es posible que en muchos casos concretos lo que aparezca sea muy
diferente, en cualquier caso, una vista similar se puede conseguir con el citado
comando antes mencionado. Esta ventana inicial requiere de algunas
explicaciones que a continuacin se enuncian.
33
Figura 1.1. Ventana inicial de Matlab 2009a
La parte ms importante de la ventana inicial es la parte central (ventana ms
grande), llamada Command Window, que incluso puede existir sola sin las
dems ventanas que le acompaan.
En esta sub-ventana es donde se ejecutan los comandos de MATLAB, en seguida
del prompt (aviso) caracterstico de este lenguaje de programacin (fx >>), que
indica que el programa est preparado para recibir instrucciones
En la parte izquierda aparecen dos sub-ventanas que son de mucha utilidad: en la
parte superior aparece la llamada Current Directory, que muestra los
documentos del directorio activo o actual. El directorio activo se puede cambiar
desde el Command Window, o desde la propia ventana con los mtodos de
navegacin de directorios propios de Windows. Haciendo click dos veces sobre
alguno de los archivos *.m del directorio activo se abre el editor de documentos de
MATLAB, herramienta fundamental para la programacin sobre la que hablaremos
ms delante.
En la parte inferior se muestra un pequeo navegador que me permite seleccionar
alguno de los documentos creados para checar detalles en caso de ser necesario.
Pasando a la parte derecha en donde tambin aparecen dos sub-ventanas, las
cuales son el Workspace y el Command History que sirven para lo siguiente.
34
El Workspace contiene informacin sobre todas las variables que se hayan
definido en esta sesin y permite ver y modificar las matrices o vectores con los
que se est trabajando.
En la parte inferior derecha se encuentra el Command History que muestra los
ltimos comandos ejecutados en el Command Window. Estos comandos se
pueden volver a ejecutar haciendo doble click sobre ellos. As mismo si la accin
la ejecutamos con el botn derecho del ratn sobre cualquier comando se
mostrar un men contextual con las posibilidades disponibles en ese momento.
Para editar uno de estos comandos hay que copiarlo antes en el Command
Window.
En la parte inferior izquierda de la pantalla aparece el botn Start, con una funcin
anloga a la del botn Inicio de Windows. Start da acceso inmediato a ciertas
capacidades del programa. La figura 1.2. Muestra algunas de las posibilidades
antes mencionadas.
Figura 1.2. Men Start
Puede hacerse que al arrancar MATLAB se ejecute automticamente un archivo,
de modo que aparezca por ejemplo un saludo inicial personalizado. Esto se hace
mediante un archivo de comandos que se ejecuta de modo automtico cada vez
que se entra en el programa (el archivo startup.m, que deber estar en un
directorio determinado, por ejemplo C:\matlab2010\Work)
2.2 MATLAB EN INTERNET
Se puede accesar al sitio web de MATLAB en la siguiente direccin
http://www.mathworks.com
35
otra informacin esta en:
http://www.prenhall.com
http://ece-www.colorado.edu/faculty/etter.html
http://mat21.etsii.upm.es/ayudainf/aprendainf/Matlab70/matlab70primero.pdf
http://jchafon.galeon.com/
etc.
2.3 EL AMBIENTE DE TRABAJO CON MATLAB
El entorno de trabajo de MATLAB es muy grfico e intuitivo, similar al de otras
aplicaciones profesionales de Windows, en la figura 1.1 ya se han citado algunos
de los componentes ms importantes de este entorno de trabajo o desarrollo.
Ahora hemos de explicar estas componentes un poco ms a detalle.
Las componentes ms importantes del entorno de trabajo de MATLAB 2010 son
las siguientes:
1. El escritorio de MATLAB (Matlab Desktop), que es la ventana o contenedor
de mximo nivel en la que se pueden situar las dems componentes.
2. Las componentes individuales, orientadas a tareas concretas, entre las que se
pueden citar las siguientes:
a) La ventana de comandos (Command Window)
b) La ventana histrica de comandos (Command History)
c) El espacio de trabajo (Workspace)
d) La plataforma de lanzamiento (Launch Pad)
e) El directorio actual (Current Directory)
f) La ventana de ayuda (Help)
g) El editor de documentos y depurador de errores (Editor and Debugger)
h) El editor de vectores y matrices (Array Editor)
i) La ventana que permite estudiar cmo se emplea el tiempo de ejecucin
(Profiler)
A continuacin se describen brevemente estas componentes. Tngase en cuenta
que utilizar Matlab y desarrollar programas para Matlab es mucho ms fcil si
se conoce bien este entorno de trabajo. Para alcanzar la mxima
productividad personal en el uso de esta aplicacin es por ello de vital
importancia leer con atencin las secciones siguientes.
2.3.1 El Escritorio de MATLAB (Matlab Desktop)
36
El Matlab Desktop es la ventana ms general de la aplicacin. El resto de las
ventanas o componentes citadas pueden alojarse en sta o ejecutarse como
ventanas independientes. A su vez, los componentes alojados en el escritorio
pueden aparecer como sub-ventanas independientes o como pestaas dentro de
una de las sub-ventanas. MATLAB ofrece una gran flexibilidad al respecto y es
cada usuario quien decide en qu forma desea utilizar la aplicacin.
Cuando se arranca MATLAB por primera vez o cuando se ejecuta el comando
View/Desktop Layout/Default aparece una ventana como la mostrada en la
figura 1.1.
2.3.2 Command Window
Esta es la ventana en la que se ejecutan interactivamente las instrucciones de
MATLAB y en donde se muestran los resultados correspondientes, si es el caso.
En cierta forma es la ventana ms importante y la nica que exista en las
primeras versiones de la aplicacin. En esta nueva versin se han aadido
algunas mejoras significativas, como las siguientes:
1. Se permiten lneas de comandos muy largas que automticamente siguen en
la lnea siguiente al llegar al margen derecho de la ventana. Para ello hay que
activar la opcin Wrap Lines, en el men File/Preferences/Command
Window.
2. Haciendo click con el botn derecho sobre el nombre de una funcin que
aparezca en esta ventana se tiene acceso a la pagina del Help sobre dicha
funcin. Si el cdigo fuente est disponible, tambin se puede acceder al
archivo correspondiente por medio del Editor/Debugger.
3. Comenzando a teclear el nombre de una funcin y pulsando la tecla de Tab,
MATLAB completa automticamente el nombre de la funcin, o bien muestra
en la lnea siguiente todas las funciones disponibles que comienzan con las
letras tecleadas por el usuario.
4. Cuando al ejecutar un archivo .m se produce un error y se obtiene el
correspondiente mensaje en la Command Window, MATLAB muestra
mediante un subrayado un enlace a la lnea del archivo fuente en el que se ha
producido el error. Haciendo click en ese enlace se puede acceder a la lnea
correspondiente del archivo por medio del Editor/Debugger.
2.3.3 Command History Browser
37
La vantana Command History ofrece acceso a las sentencias que se han
ejecutado anteriormente en la Command Window . estas sentencias estn
tambin accesibles por medio de las teclas + | y como en versiones anteriores,
pero esta ventana facilita mucho el tener una visin ms general de lo hecho
anteriormente y seleccionar lo que realmente se desea repetir.
Las sentencias ejecutadas anteriormente se pueden volver a ejecutar mediante un
doble click o por medio del men contextual que se abre al dar click sobre ellas
con botn derecho del ratn. Tambin se pueden copiar y volcar sobre la lnea de
comandos, pero se ha de copiar toda la lnea, sin que se admita la copia de un
fragmento de la sentencia. Existen opciones para borrar algunas o todas las lneas
de esta ventana. Se puede tambin hacer un profile (evaluar la eficiencia relativa)
de una sentencia o de un grupo de ellas.
2.3.4 Current Directory Browser
El concepto de directorio activo o directorio actual es muy importante en Matlab.
Los programas se encuentran en archivos con la extensin .m. Estos archivos se
ejecutan tecleando su nombre en la lnea de comandos (sin la extensin), seguido
de los argumentos entre parntesis, si se trata de funciones. No todos los archivos
con esta extensin que se encuentran en el disco duro o en otra unidad de
almacenamiento son accesibles. Para que un archivo con esta extensin se pueda
ejecutar es necesario que cumpla con una de las condiciones siguientes.
1. Que est en el directorio actual. Matlab mantiene en todo momento un nico
directorio con esta condicin. Este directorio es el primer sitio en el que Matlab
busca cuando desde la lnea de comandos se le pide que se ejecute un
archivo.
2. Que est en uno de los directorios indicados en el Path de Matlab. El Path es
una lista ordenada de directorios en los que el programa busca los archivos o
las funciones que ha de ejecutar. Muchos de los directorios del Path son
propios de Matlab, pero los usuarios tambin pueden aadir sus propios
directorios, normalmente al principio o al final de la lista.
2.3.5 Path de Matlab: establece el camino de bsqueda
Matlab puede llamar a una gran variedad de funciones, tanto propias como
programadas por los usuarios. Puede incluso haber funciones distintas con el
mismo nombre. Interesa saber cules son las reglas que determinan que funcin o
que archivo es el que se va a ejecutar cuando su nombre aparezca en una lnea
de comandos del programa. Esto queda determinado por el camino de bsqueda
38
(Search Path) que el programa utiliza cuando se encuentra el nombre de una
funcin.
El Search Path de Matlab es una lista de directorios que se pueden ver y
modificar a partir de la lnea de comandos. O utilizando el cuadro de dialogo Set
Path, del men File. El comando Path hace que se escriba el Search Path de
MATLAB (el resultado depende de en que directorio este instalado Matlab; se
muestran solo unas pocas lneas de la respuesta real del programa):
>> path
MATLABPATH
C:\MATLAB\R2010a\toolbox\matlab\general
C:\MATLAB\R2010a\toolbox\matlab\ops
C:\MATLAB\R2010a\toolbox\matlab\lang
C:\MATLAB\R2010a\toolbox\matlab\elmat
.
.
.
C:\MATLAB\R2010a\toolbox\rtw\targets\xpc\target\build\xpcblocks
C:\MATLAB\R2010a\toolbox\rtw\targets\common\can\blocks\tlc_c
C:\MATLAB\R2010a\toolbox\rtw\targets\xpc\xpcdemos
C:\MATLAB\R2010a\toolbox\rtw\targets\xpc\xpc\xpcmngr
C:\MATLAB\R2010a\toolbox\rtw\targets\xpc\target\kernel\embedded
Para ver como se utiliza el Search Path supngase que se utiliza la palabra
nombre1 en un comando, el proceso que sigue el programa para tratar de conocer
que es nombre1 es el siguiente.
1. Comprueba si nombre1 es una variable previamente definida por el usuario
2. Comprueba si nombre1 es una funcin interna o intrnseca de Matlab
3. Comprueba si nombre1 es una sub-funcin o una funcin privada del usuario
4. Comprueba si hay un archivo llamado nombre1.mex, nombre1.dll o nombre1.m en
los directorios incluidos en el search path de Matlab
2.3.6 Workspace Browser Array Editor
El espacio de trabajo de Matlab (Workspace) es el conjunto de variables y de
funciones de usuario que en un determinado momento estn definidas en la
memoria del programa o de la funcin que se est ejecutando. Para obtener
informacin sobre el Workspace desde la lnea de comando se pueden utilizar los
39
comandos who y whos. El segundo proporciona una informacin ms detallada
que el primero. Por ejemplo, una salida tpica del comando whos es la siguiente:
>> whos
Name Size Bytes Class Atributes
A 1x3 24 double
B 2x3 48 double
c 1x1 8 double
d 1x1 8 double
e 5x1 40 double
Estas son las variables del espacio de trabajo base (el de la lnea de comandos de
Matlab).
2.3.7 El Editor/Debugger
En Matlab tiene particular importancia los ya citados archivos con extensin .m ( o
M.files). son archivos de texto ASCII, con la extensin mencionada que contienen
conjuntos de comandos o definicin de funciones. La importancia de estos
archivos es que al teclear su nombre en la lnea de comandos y pulsar enter, se
ejecutan uno tras otro todos los comandos contenidos en dicho archivo. El poder
guardar instrucciones y grandes matrices en un archivo permite ahorrar mucho
trabajo de tecleado.
Aunque los archivos se pueden crear con cualquier editor de textos ASCII tal
como Notepad, MATLAB dispone de un editor propio que permite tanto crear y
modificar estos archivos, como ejecutarlos paso a paso para ver si contienen
errores (proceso de depuracin Debugg). La figura 1.6. Muestra la ventana
principal del Editor/Debugger, en la que se ha tecleado un archivo llamado
prueba1.m, que contiene un comentario y seis sentencias. El editor muestra con
diferentes colores los diferentes tipos o elementos constitutivos de los comandos.
El Editor se preocupa tambin de que las comillas o parntesis que se abren, no
se queden sin el correspondiente elemento de cierre. Colocando el cursor antes o
despus de una apertura o cierre de corchetes o parntesis y pulsando las teclas
flecha izquierda o flecha derecha, el Editor muestra con que cierre o apertura de
corchetes o parntesis se empareja el elemento considerado; si no se empareja
con ninguna, aparece con una rayita de tachado.
40
Figura 1.6. ejecucin interactiva con el editor Debugger
La figura 1.6. Corresponde a una ejecucin del archivo de comandos controlada
con el Debugger. Dicha ejecucin se comienza eligiendo el comando Run en el
men Debug, pulsando la tecla F5, dando click en el botn Continue ( ) de la
barra de herramientas del editor o tecleando el nombre del archivo en la lnea de
comandos de la Command Window. Los puntos rojos que aparecen en el margen
izquierdo son Breakpoints (puntos en los que se detiene la ejecucin del
programa); la flecha verde en el borde izquierdo indica la sentencia en que est
detenida la ejecucin (antes de ejecutar dichas sentencia); cuando el cursor se
coloca sobre una variable aparece una pequea ventana con los valores
numricos de dicha variable, tal como se aprecia.
2.3.8 El Profiler
El profiler es un programa de utilidad que permite saber cmo se ha empleado el
tiempo del CPU en la ejecucin de un determinado programa. El profiler es una
herramienta muy til para determinar los cuellos de botella de un programa, es
decir las funciones y las lneas de cdigo que ms veces se llaman y que se llevan
la mayor parte del tiempo de ejecucin. Por ejemplo, es obvio que si se trata de
mejorar la eficiencia de un programa, sera ms importante mejorar una funcin
que se llevase el 60% del tiempo total que otra solo le llevar el 2%. Dentro de la
funcin ms llamada, el Profiler proporciona informacin sobre el tiempo que se
lleva cada sentencia, y da tambin algunas orientaciones sobre las posibilidades
de mejorarla.
2.4 COMANDOS Y FORMATO DE VARIABLES.
Con Matlab se pueden realizar una amplia gama de operaciones:
41
- Operaciones aritmticas
Suma, resta, multiplicacin, divisin, etc.
- Operaciones con Matrices
Suma, resta, multiplicacin, inversin de matrices, traspuesta de una
matriz, solucin de sistemas lineales, etc.
- Manejo de expresiones algebraicas
- Diferenciacin, integracin, etc.
- Solucin de ecuaciones diferenciales
- Programacin con estructuras de decisin
- Ciclos for-end, while-end, if-end, etc
- Graficacin en 2 y 3 dimensiones
- Y mucho mas
Matlab es sensible al uso de maysculas y minsculas, se maneja por medio de
comandos y funciones ya definidas por lo que se debe ser cuidadoso en la
escritura, ya que, si se define una matriz o una variable A y luego se pide
ejecutar alguna operacin con la matriz o variable llamndola a, no se obtendrn
resultados correctos.
Las ventanas que usa Matlab son
Ventana de comandos
Ventana de grficos
Ventana de edicin ( para crear y/o modificar archivos .m) donde solo se
teclea el nombre del archivo sin la extensin .m
Al inicio de una sesin con Matlab se recomienda teclear los comandos clear
(limpiar variables), clc (limpiar la pantalla), close all (cerrar todas las ventanas de
grficos).
Puede efectuar operaciones sencillas con Matlab, por ejemplo puede definir las
variables a y b con a=5 y b=8, luego efectuar la suma c=a+b. Si despus de cada
asignacin de valores a las variables teclea ; Matlab guarda en la memoria el valor
de la variable, pero no muestra el valor de dicha variable, si no se teclea ; al final
de la asignacin Matlab responde mostrando el valor de la variable. Por ejemplo
esto es lo que muestra la pantalla de Matlab con el ejemplo anterior:
>> a=5;
>> b=8;
>> c=a+b;
>>
Para mostrar el valor de c en seguida tecleamos c sin el punto y coma (;)
>> c
c =
13
42
>>
Si deseamos ver los valores inmediatamente tecleamos lo anterior sin punto y
coma (;)
>> a=5
a =
5
>> b=8
b =
8
>> c=a+b
c =
13
>>
En determinado momento puede ser conveniente conocer las variables que hemos
estado manejando, esto se consigue con el comando who o whos, como ya se vio.
>> who
Your variables are:
a b c
>> whos
Name Size Bytes Class Attributes
a 1x1 8 double
b 1x1 8 double
c 1x1 8 double
Para ver la hora del sistema:
>>clock
ans =
1.0e+003 *
2.0110 0.0070 0.0160 0.0010 0.0560 0.0372
Se puede obtener en un formato mas legible la respuesta de clock con:
>> fix(clock)
ans =
43
2011 7 16 1 57 57
Cuando tecleamos un comando errneamente Matlab responde con:
>> dae
??? Undefined function or variable 'dae'.
Escrito correctamente
>> date
ans =
16-Jul-2011
Informacin acerca de Matlab
>> ver
-------------------------------------------------------------------------------------
MATLAB Version 7.10.0.499 (R2010a)
MATLAB License Number: 161051
Operating System: Microsoft Windows 7 Version 6.1 (Build 7600)
Java VM Version: Java 1.6.0_12-b04 with Sun Microsystems Inc. Java
HotSpot(TM) Client VM mixed mode
-------------------------------------------------------------------------------------
MATLAB Version 7.10
(R2010a)
Simulink Version 7.5
(R2010a)
Aerospace Blockset Version 3.5
(R2010a)
Aerospace Toolbox Version 2.5
(R2010a)
Bioinformatics Toolbox Version 3.5
(R2010a)
Communications Blockset Version 4.4
(R2010a)
Communications Toolbox Version 4.5
(R2010a)
Control System Toolbox Version 8.5
(R2010a)
Curve Fitting Toolbox Version 2.2
(R2010a)
DO Qualification Kit Version 1.2
(R2010a)
Data Acquisition Toolbox Version 2.16
(R2010a)
Database Toolbox Version 3.7
(R2010a)
Datafeed Toolbox Version 3.5
(R2010a)
EDA Simulator Link Version 3.1
(R2010a)
Econometrics Toolbox Version 1.3
(R2010a)
Embedded IDE Link Version 4.1 (R2010a)
Filter Design HDL Coder Version 2.6
(R2010a)
Filter Design Toolbox Version 4.7
(R2010a)
Financial Derivatives Toolbox Version 5.5.1
(R2010a)
Financial Toolbox Version 3.7.1 (R2010a)
Fixed-Income Toolbox Version 1.9 (R2010a) Fixed-Point Toolbox Version 3.1 (R2010a)
Fuzzy Logic Toolbox Version 2.2.11 (R2010a) Gauges Blockset Version 2.0.5
(R2010a)
Global Optimization Toolbox Version 3.0
(R2010a)
IEC Certification Kit Version 1.2 (R2010a)
Image Acquisition Toolbox Version 3.5
(R2010a)
Image Processing Toolbox Version 7.0
(R2010a)
Instrument Control Toolbox Version 2.10
(R2010a)
MATLAB Builder EX Version 1.2.15
(R2010a)
MATLAB Builder JA Version 2.1 (R2010a) MATLAB Builder NE Version 3.1 (R2010a)
MATLAB Compiler Version 4.13 (R2010a) MATLAB Distributed Computing Server
Version 4.3 (R2010a)
MATLAB Report Generator Version 3.8 (R2010a) Mapping Toolbox Version 3.1 (R2010a)
Model Predictive Control Toolbox Version 3.2 Model-Based Calibration Toolbox Version 4.0
44
(R2010a) (R2010a)
Neural Network Toolbox Version 6.0.4 (R2010a) OPC Toolbox Version 2.1.5 (R2010a)
Optimization Toolbox Version 5.0 (R2010a) Parallel Computing Toolbox Version 4.3 (R2010a)
Partial Differential Equation Toolbox Version 1.0.16
(R2010a)
RF Blockset Version 2.5.1 (R2010a)
RF Toolbox Version 2.7 (R2010a) Real-Time Windows Target Version 3.5 (R2010a)
Real-Time Workshop Version 7.5 (R2010a) Real-Time Workshop Embedded Coder
Version 5.5 (R2010a)
Robust Control Toolbox Version 3.4.1 (R2010a) Signal Processing Blockset Version 7.0 (R2010a)
Signal Processing Toolbox Version 6.13
(R2010a)
SimBiology Version 3.2 (R2010a)
SimDriveline Version 1.5.4 (R2010a) SimElectronics Version 1.4 (R2010a)
SimEvents Version 3.1 (R2010a) SimHydraulics Version 1.7 (R2010a)
SimMechanics Version 3.2 (R2010a) SimPowerSystems Version 5.2.1 (R2010a)
Simscape Version 3.3 (R2010a) Simulink 3D Animation Version 5.1.1 (R2010a)
Simulink Control Design Version 3.1 (R2010a) Simulink Design Optimization Version 1.1.1
(R2010a)
Simulink Design Verifier Version 1.6 (R2010a) Simulink Fixed Point Version 6.3 (R2010a)
Simulink HDL Coder Version 1.7 (R2010a) Simulink PLC Coder Version 1.0 (R2010a)
Simulink Report Generator Version 3.8 (R2010a) Simulink Verification and Validation Version 2.7
(R2010a)
Spline Toolbox Version 3.3.8 (R2010a) Spreadsheet Link EX Version 3.1.1 (R2010a)
Stateflow Versin 7.5 (R2010a) Stateflow Coder Version 7.5 (R2010a)
Statistics Toolbox Versin 7.3 (R2010a) Symbolic Math Toolbox Version 5.4 (R2010a)
System Identification SystemTest Version 2.5 (R2010a)
Target Support Package Version 4.1 (R2010a) Vehicle Network Toolbox Version 1.2
(R2010a)
Video and Image Processing Blockset Version 3.0
(R2010a)
Wavelet Toolbox Version 4.5 (R2010a)
xPC Target Version 4.3 (R2010a) xPC Target Embedded Option Version 4.3
(R2010a)
Como ya se mencion Matlab maneja variables cuyo nombre debe ser escrito con
letras, caracteres y tambin puede usarse el guion bajo (_), los primeros 19
caracteres deben ser diferentes; el nombre de la variable debe ser descriptivo de
lo que va a hacer la variable, por ejemplo:
nom_empleado describir una variable que contiene el nombre de un empleado.
angulo_1. Es la variable utilizada para definir al primer ngulo usado.
Matlab maneja adems otras variables o nombres de funciones predefinidos, las
cuales no deben usarse como nombres de variables o funciones que el usuario de
Matlab defina como propias de l ya que esto puede ocasionar problemas.
Algunas de las variables propias de Matlab son:
- ans
- pi (3.14159.)
- eps
- inf (respuesta de la divisin sobre cero)
- NaN (NOt a Number, respuesta de la divisin 0/0)
- i,j (son las raz cuadrada de -1)
- realmin
- realmax
- min
- max
45
- usable
- real
- end
- sqrt
- power
- etc.
Matlab trabaja con nmeros en formato de doble precisin, aunque no muestre
todos los decimales en pantalla. Solicitando ayuda para formato de nmeros se
tiene la siguiente informacin:
>> help format
FORMAT Set output format.
FORMAT with no inputs sets the output format to the default appropriate
for the class of the variable. For float variables, the default is
FORMAT SHORT.
FORMAT does not affect how MATLAB computations are done. Computations
on float variables, namely single or double, are done in appropriate
floating point precision, no matter how those variables are displayed.
Computations on integer variables are done natively in integer. Integer
variables are always displayed to the appropriate number of digits for
the class, for example, 3 digits to display the INT8 range -128:127.
FORMAT SHORT and LONG do not affect the display of integer variables.
FORMAT may be used to switch between different output display formats
of all float variables as follows:
FORMAT SHORT Scaled fixed point format with 5 digits.
FORMAT LONG Scaled fixed point format with 15 digits for double
and 7 digits for single.
FORMAT SHORT E Floating point format with 5 digits.
FORMAT LONG E Floating point format with 15 digits for double and
7 digits for single.
FORMAT SHORT G Best of fixed or floating point format with 5
digits.
FORMAT LONG G Best of fixed or floating point format with 15
digits for double and 7 digits for single.
FORMAT SHORT ENG Engineering format that has at least 5 digits
and a power that is a multiple of three
FORMAT LONG ENG Engineering format that has exactly 16 significant
digits and a power that is a multiple of three.
FORMAT may be used to switch between different output display formats
of all numeric variables as follows:
FORMAT HEX Hexadecimal format.
46
FORMAT + The symbols +, - and blank are printed
for positive, negative and zero elements.
Imaginary parts are ignored.
FORMAT BANK Fixed format for dollars and cents.
FORMAT RAT Approximation by ratio of small integers. Numbers
with a large numerator or large denominator are
replaced by *.
FORMAT may be used to affect the spacing in the display of all
variables as follows:
FORMAT COMPACT Suppresses extra line-feeds.
FORMAT LOOSE Puts the extra line-feeds back in.
Hagamos un pequeo ejemplo:
>> a=pi
a =
3.1416
>> format short
>> a
a =
3.1416
>> format long
>> a
a =
3.141592653589793
>> format short e
>> a
a =
3.1416e+000
>> format long e
>> a
a =
3.141592653589793e+000
>> format short g
>> a
a =
3.1416
>> format long g
>> a
a =
3.14159265358979
>> format short eng
>> a
a =
3.1416e+000
>> format hex
47
>> a
a =
400921fb54442d18
>> format +
>> a
a =
+
>> format bank
>> a
a =
3.14
>> format rat
>> a
a =
355/113
>> format compact
>> a
a =
3.1416
>> format loose
>> a
a =
3.1416
Cuando sea conveniente usar un comentario se le antepone el signo % con lo que
no causa efecto sobre el cdigo de Matlab
Las variables se pueden declarar una por una en cada rengln, en un solo rengln
separndolas por comas o por puntos y coma.
Los operadores en Matlab son:
+ Suma o adicin
- Resta o sustraccin
* Multiplicacin
^ Potenciacin
\ Divisin izquierda
/ Divisin derecha
Los siguientes son ejemplos:
>> 7+3
ans=
10
>> 34-5
ans=
48
29
>> 32*4
ans=
128
>>4/5
ans=
0.8000
>>4\5 % operador de divisin inversa, lo que es lo mismo 5/4.
ans=
1.2500
>>3^2
ans=
9
En este caso que no se han utilizado nombres par a las variables de salida, el
valor resultante se almacena en la variable definida por Matlab llamada ans.
Matlab tambin utiliza los operadores relacionales y lgicos:
< Menor que
> Mayor que
<= Menor o igual que
>= Mayor o igual que
~= Diferente
== Igual que
Los caracteres anterioriores se deben escribir tal cual, y representan un solo
smbolo y un solo significado
Caracteres lgicos
& (y- and)
| (- or)
~ (negacin- not)
Matlab tambin hace uso de funciones definidas y que tienen un solo propsito, el
propsito por el cual fueron escritas.
>> help elfun
Funciones matemticas elementales
Trigonometricas.
sin Sine.
49
sind Sine of argument in degrees.
sinh Hyperbolic sine.
asin Inverse sine.
asind Inverse sine, result in degrees.
asinh Inverse hyperbolic sine.
cos Cosine.
cosd Cosine of argument in degrees.
cosh Hyperbolic cosine.
acos Inverse cosine.
acosd Inverse cosine, result in degrees.
acosh Inverse hyperbolic cosine.
tan Tangent.
tand Tangent of argument in degrees.
tanh Hyperbolic tangent.
atan Inverse tangent.
atand Inverse tangent, result in degrees.
atan2 Four quadrant inverse tangent.
atanh Inverse hyperbolic tangent.
sec Secant.
secd Secant of argument in degrees.
sech Hyperbolic secant.
asec Inverse secant.
asecd Inverse secant, result in degrees.
asech Inverse hyperbolic secant.
csc Cosecant.
cscd Cosecant of argument in degrees.
csch Hyperbolic cosecant.
acsc Inverse cosecant.
acscd Inverse cosecant, result in degrees.
acsch Inverse hyperbolic cosecant.
cot Cotangent.
cotd Cotangent of argument in degrees.
coth Hyperbolic cotangent.
acot Inverse cotangent.
acotd Inverse cotangent, result in degrees.
acoth Inverse hyperbolic cotangent.
hypot Square root of sum of squares.
Exponencial.
exp Exponential.
expm1 Compute exp(x)_1 accurately.
log Natural logarithm.
log1p Compute log(1+x) accurately.
log10 Common (base 10) logarithm.
log2 Base 2 logarithm and dissect floating point number.
pow2 Base 2 power and scale floating point number.
realpow Power that will error out on complex result.
50
reallog Natural logarithm of real number.
realsqrt Square root of number greater than or equal to zero.
sqrt Square root.
nthroot Real n_th root of real numbers.
nextpow2 Next higher power of 2.
Complejo.
abs Absolute value.
angle Phase angle.
complex Construct complex data from real and imaginary parts.
conj Complex conjugate.
imag Complex imaginary part.
real Complex real part.
unwrap Unwrap phase angle.
isreal True for real array.
cplxpair Sort numbers into complex conjugate pairs.
Numerico.
fix Round towards zero.
floor Round towards minus infinity.
ceil Round towards plus infinity.
round Round towards nearest integer.
mod Modulus (signed remainder after division).
rem Remainder after division.
sign Signum.
Es conveniente mencionar que los ngulos se miden en radianes.
2.5 MATLAB Y SUS APLICACIONES
Matlab es un programa interactivo que sirve principalmente para computacin
numrica y visualizacin de datos. Es ampliamente usado por ingenieros en el
anlisis y diseo, posee adems una extraordinaria versatilidad y capacidad para
resolver problemas en matemticas aplicadas, fsica, qumica, ingeniera, finanzas
y muchas ramas del conocimiento ms. Est basado en un sofisticado software de
vectores y matrices para el anlisis de sistemas de ecuaciones. Permite resolver
complicados problemas numricos sin necesidad de escribir un programa.
Matlab sirve adems para analizar y resolver una gran diversidad de problemas
que pueden abarcar temas distintos tales como:
- Anlisis de circuitos elctricos
- Diseo de estructuras mecnicas
- Modelacin de sistemas de control
51
- Tratamiento de seales electrnicas
- Matemticas
- Estadstica
- Diseo
- Redes neuronales
- Simulacin
- Etc.
52
Control de
Flujo
3.1 PROGRAMACION EN MATLAB
Programar en Matlab es mucho ms fcil que en cualquier otro lenguaje de
programacin dado que Matlab posee muchas funciones que ya estn
programadas y que nos son de mucha utilidad para la construccin de los nuestros
y que solo basta con llamarlas para poderlas usar.
Hagamos dos programas sencillos. En el primero de ellos se explicar a detalle
paso a paso la forma de cmo se debe utilizar el editor de Matlab y como ejecutar
dicho programa.
En el segundo de ellos solo pondremos el cdigo que deberemos d escribir en el
editor de Matlab.
1. Programa para sumar, restar, multiplicar y dividir dos nmeros cualesquiera.
- Abrimos el matlab en la forma acostumbrada
- Abrimos el editor de Matlab, File, New, script
3
53
- Tecleamos el cdigo del programa
- Cuando ya terminamos el programa, es hora de grabarlo de la siguiente
forma. File, Save As
- Le ponemos un nombre que me diga algo del programa, por ejemplo
operaciones.m. y guardamos, esto nos regresa al editor de Matlab
54
- Ahora regresamos al command de Matlab (pantalla de inicio) y tecleamos lo
siguiente: operaciones y damos enter
- Ya ejecutamos nuestro primer programa, y cada que lo queramos ejecutar
de nuevo solo basta con teclear la palabra operaciones.
El cdigo del programa anterior que pusimos en el editor de Matlab es el siguiente:
%programa que calcula la suma, resta, multiplicacion y division
clc
clear
close all
a=input(' CUAL ES EL VALOR DEL PRIMER NUMERO ? ');
b=input(' CUAL ES EL VALOR DEL SEGUNDO NUMERO ? ');
suma=a+b;
resta=a-b;
multiplicacion=a*b;
division=a/b;
disp('LA SUMA ES')
disp(suma)
disp('LA RESTA ES')
disp(resta)
disp('LA MULTIPLICACION ES')
disp(multiplicacion)
disp('LA DIVISION ES')
disp(division)
%fin del programa
55
2. Programa que dado el valor del radio, el programa calcular el rea, el
permetro y el volumen de una esfera.
%programa que calcula el area, perimetro y volumen de una esfera
clc
clear
close all
r=input(' VALOR DEL RADIO ? ');
area=pi*r^2;
perimetro=pi*2*r;
volumen=(4/3)*pi*r^3;
disp(' EL AREA DEL CIRCULO ES')
disp(area)
disp(' EL PERIMETRO DEL CIRCULO ES ')
disp(perimetro)
disp( 'EL VOLUMEN DE LA ESFERA ES ')
disp(volumen)
%fin del programa
3. Programa que transforma grados centgrados a grados Fahrenheit.
%programa que transforma grados centigrados a fahrenheit
clc
clear
close all
centigrados=input(' CUAL ES EL NUMERO DE GRADOS CENTIGRADOS ?
');
far=(centigrados*(9/5))+32;
disp(' LOS GRADOS FAHRENHEIT SON: ')
disp(far)
%fin del programa
4. Programa para calcular el rea de un tringulo
%programa que sirve para calcular el area de un rectngulo
clear
clc
close all
lado1=input(' CUAL ES EL VALOR DEL LADO 1 ? ');
lado2=input(' CUAL ES EL VALOR DEL LADO 2 ? ');
area=lado1*lado2;
disp('EL AREA DEL RECTNGULO ES ')
disp(area)
%fin del programa
5. Programa para calcular el rea de un tringulo
56
%programa que sirve para calcular el rea de un tringulo
clc
clear
close all
base=input(' CUAL ES EL VALOR DE LA BASE DEL TRIANGULO ? ');
altura=input(' CUAL ES EL VALOR DE LA ALTURA DEL TRIANGULO ? ');
area=(base*altura)/2;
disp('EL AREA DEL TRIANGULO ES ')
disp(area)
%fin del programa
6. programa que sirve para calcular la velocidad de un proyectil que recorre x
kilmetros en t minutos. Expresar el resultado en metros/segundo.
%programa que calcula la velocidad de un proyectil
clc
clear
close all
x=input(' CUAL ES LA DISTANCIA RECORRIDA POR EL PROYECTIL ? ');
t=input(' CUANTO ES EL TIEMPO QUE TARDA DICHO PROYECTIL EN
LLEGAR ? ');
velocidad=(x*1000)/(t*60);
disp(' LA VELOCIDAD DEL PROYECTIL ES DE ')
disp(velocidad)
%fin del programa
7. Programa para evaluar la siguiente formula
=
( + 7 )
( + 2 ) + 2
%programa que evalua una formula
clc
clear
close all
a=input(' CUAL ES EL VALOR DE a ? ');
b=input(' CUAL ES EL VALOR DE b ? ');
c=input(' CUAL ES EL VALOR DE c ? ');
p=(a+7*c)/((b+2-a)+(2*b));
disp('EL VALOR DE P ES ')
disp(p)
%fin del programa
8. programa que evala la siguiente expresin
57
=
( + 5) 3
( 2 )
%programa que evalua una expresion
clc
clear
close all
a=input(' CUAL ES EL VALOR DE a ? ');
b=input(' CUAL ES EL VALOR DE b ? ');
z=input(' CUAL ES EL VALOR DE z ? ');
h=(((a+5)^5)*3)/((2*b)-z);
disp(' EL VALOR DE H ES ')
disp(h)
%fin del programa
9. programa que evala la siguiente expresin
=
4
2
%programa que evalua la formula general
clc
clear
close all
a=input(' CUAL ES EL VALOR DE a ? ');
b=input(' CUAL ES EL VALOR DE b ? ');
c=input(' CUAL ES EL VALOR DE c ? ');
z=(b^2-(4*a*c));
x1=(-b+sqrt(z))/(2*a);
x2=(-b-sqrt(z))/(2*a);
disp(' EL VALOR DE X1 ES ')
disp(x1)
disp(' EL VALOR DE X2 ES ')
disp(x2)
%fin del programa
10. Programa que calcula el rea y el volumen de un cilindro
%programa que calcula el area y el volumen de un cilindro
clc
clear
close all
r=input(' CUAL ES EL RADIO DE LA BASE DEL CILINDRO ? ');
h=input(' CUAL ES LA ALTURA DEL CILINDRO ? ');
area=((pi*r^2)*2)+(pi*2*r*h);
58
volumen=pi*r^2*h;
disp(' EL AREA DEL CILINDRO ES ')
disp(area)
disp(' EL VLUMEN DEL CILINDRO ES ')
disp(volumen)
%fin del programa
Tarea :
Para cada problema que se expone enseguida hacer un programa en Matlab que
d solucin a dicho problema.
1. Suponga que un individuo desea invertir su capital en un banco y desea saber
cunto dinero ganar despus de un mes si el banco paga a razn de 2%
mensual.
2. Un vendedor recibe un sueldo base ms un 10% extra por comisin de sus
ventas, el vendedor desea saber cunto dinero obtendr por concepto de
comisiones por las tres ventas que realiza en el mes y el total que recibir en
el mes tomando en cuenta su sueldo base y comisiones.
3. Una tienda ofrece un descuento del 15% sobre el total de la compra y un
cliente desea saber cunto deber pagar finalmente por su compra.
4. Un aprendiz desea saber cul ser su calificacin final en la materia de
Algoritmos. Dicha calificacin se compone de los siguientes porcentajes:
55% del promedio de sus tres calificaciones parciales.
30% de la calificacin del examen final.
15% de la calificacin de un trabajo final.
5. Un maestro desea saber qu porcentaje de hombres y que porcentaje de
mujeres hay en un grupo de estudiantes.
6. Realizar un algoritmo que calcule la edad de una persona dadas la fecha de
nacimiento y la fecha actual
7. Dada una cantidad en pesos, obtener la equivalencia en dlares, asumiendo
que la unidad cambiara es un dato desconocido.
8. Leer un nmero y escribir el valor absoluto del mismo.
9. La presin, el volumen y la temperatura de una masa de aire se relacionan
por la formula:
Masa = (presin * volumen)/(0.37 * (temperatura + 460))
59
10. Calcular el nmero de pulsaciones que una persona debe tener por cada 10
segundos de ejercicio, si la formula es:
num. Pulsaciones = (220 - edad)/10
11. Calcular el nuevo salario de un obrero si obtuvo un incremento del 25% sobre
su salario anterior.
12. En un hospital existen tres reas: Ginecologa, Pediatra, Traumatologa. El
presupuesto anual del hospital se reparte conforme a la siguiente tabla:
rea Porcentaje del presupuesto
Ginecologa 40%
Traumatologa 30%
Pediatra 30%
Obtener la cantidad de dinero que recibir cada rea, para cualquier monto
presupuestal.
13. El dueo de una tienda compra un artculo a un precio determinado. Obtener
el precio en que lo debe vender para obtener una ganancia del 30%.
14. Todos los lunes, mircoles y viernes, una persona corre la misma ruta y
cronometra los tiempos obtenidos. Determinar el tiempo promedio que la
persona tarda en recorrer la ruta en una semana cualquiera.
15. Tres personas deciden invertir su dinero para fundar una empresa. Cada una
de ellas invierte una cantidad distinta. Obtener el porcentaje que cada quien
invierte con respecto a la cantidad total invertida.
16. Un aprendiz desea saber cul ser su promedio general en las tres materias
ms difciles que cursa y cul ser el promedio que obtendr en cada una de
ellas. Estas materias se evalan como se muestra a continuacin:
La calificacin de Matemticas se obtiene de la sig. Manera:
Examen 90%
Promedio de tareas 10%
En esta materia se pidi un total de tres tareas.
La calificacin de Fsica se obtiene de la sig. Manera:
Examen 80%
Promedio de tareas 20%
En esta materia se pidi un total de dos tareas.
La calificacin de Qumica se obtiene de la sig. Manera:
Examen 85%
Promedio de tareas 15%
En esta materia se pidi un promedio de tres tareas.
60
17. Un hombre desea saber cunto dinero se genera por concepto de intereses
sobre la cantidad que tiene en inversin en el banco. El decidir reinvertir los
intereses siempre y cuando estos excedan a $7000, y en ese caso desea
saber cunto dinero tendr finalmente en su cuenta.
18. Escriba un programa en Matlab para calcular el rea y el volumen de un
hexaedro
19. Escriba un programa en Matlab que calcule el rea y el volumen de un
prisma.
20. Escriba un programa en Matlab que calcule el rea y el volumen de un
tetraedro
21. Escriba un programa en Matlab que calcule el rea y el volumen de un
octaedro
22. Escriba un programa en Matlab que calcule el rea y el volumen de un cono
23. Escriba un programa en Matlab que calcule el rea y el volumen de un
elipsoide.
24. Escriba un programa en Matlab que calcule la hipotenusa de un triangulo
rectngulo.
25. Escriba un programa en Matlab que transforme grados Fahrenheit a grados
Celsius.
3.2 SENTENCIA if-else-end
Como ya se ha dicho varias veces Matlab es un programa de tipo aplicacin en el
cual se puede programar muy fcilmente. De todas formas, como lenguaje de
programacin pronto se ver que no tiene tantas posibilidades como las tienen
otros lenguajes (no son tan complicadas). Se comenzar viendo las bifurcaciones,
y la lectura y escritura interactiva de variables, que son los elementos bsicos de
cualquier programa de una cierta complejidad.
Matlab posee un lenguaje de programacin que como cualquier otro lenguaje
dispone de sentencias para realizar bifurcaciones. Las bifurcaciones permiten
realizar una u otra operacin segn se cumpla o no se cumpla una determinada
condicin. La siguiente figura muestra tres posibles formas de bifurcacin.
61
Estos son tres ejemplos o formas en que se pueden presentar las bifurcaciones,
pero son ejemplos muy ilustrativos, en la realidad se nos van a presentar
bifurcaciones mucho ms elaboradas y de mayor tamao.
SENTENCIA if
En su forma ms simple, la sentencia if se escribe en la forma siguiente
If condicin
Sentencias
end
La forma en cmo funciona esta bifurcacin en Matlab es la siguiente:
Se analiza la condicin, si sta es verdadera entonces se ejecutan las sentencias,
pero si por el contrario la condicin es falsa, entonces no hace nada.
Una forma un poco ms completa de la sentencia if sera la siguiente:
If condicin
Sentencias1
else
sentencias2
end
la forma de funcionamiento de esta forma es:
Se analiza la condicin, si sta es verdadera, entonces se ejecutan las
sentencias1, en caso contrario entra al else y ejecuta las sentencias2, luego
termina.
62
Hagamos algunos programas usando este tipo de bifurcacin.
1. Programa que calcula el rea de un crculo, solo si el radio es menor o igual a
20, de otra manera, que calcule el permetro.
%programa que usa bifurcaciones
clc
clear
close all
r=input(' CUAL ES EL VALOR DEL RADIO ? ');
%aqui va la bifurcacion
if r<=20
area=pi*r^2;
disp(' EL VALOR DEL AREA DEL CIRCULO ES ')
disp(area)
else
perimetro=pi*2*r;
disp(' EL VALOR DEL PERIMETRO DEL CIRCULO ES ')
disp(perimetro)
end
%fin del programa
2. Programa para calcular las races de una ecuacin de segundo grado, si las
races spn imaginarias que no las calcule y que ponga un letrero que diga
RAICES COMPLEJAS
%programa de la formula general con bifurcaciones
clc
clear
close all
a=input(' VALOR DE a: ? ');
b=input(' VALOR DE b: ? ');
c=input(' VALOR DE c: ? ');
z=(b^2-(4*a*c));
%bifurcacion
if z<0
disp(' LAS RAICES SON COMPLEJAS Y NO SE VAN A CALCULAR ')
else
x1=(-b+sqrt(z))/(2*a);
x2=(-b-sqrt(z))/(2*a);
disp('X1=')
disp(x1)
disp('X2=')
disp(x2)
end
%fin del programa
63
3. Programa para calcular las races de una ecuacin de segundo grado, si las
races son complejas que me ponga un letrero que diga RAICES
COMPLEJAS y luego que las calcule y si son reales que me ponga un letrero
que diga RAICES REALES en seguida que las calcule.
%programa de la formula general con bifurcaciones (2)
clc
clear
close all
a=input(' VALOR DE a: ? ');
b=input(' VALOR DE b: ? ');
c=input(' VALOR DE c: ? ');
z=(b^2-(4*a*c));
%bifurcacion
if z<0
disp(' LAS RAICES SON COMPLEJAS Y SON LAS SIGUIENTES ')
x1=(-b+sqrt(z))/(2*a);
x2=(-b-sqrt(z))/(2*a);
disp('X1=')
disp(x1)
disp('X2=')
disp(x2)
else
disp(' LAS RAICES SON REALES Y SON LAS SIGUIENTES ')
x1=(-b+sqrt(z))/(2*a);
x2=(-b-sqrt(z))/(2*a);
disp('X1=')
disp(x1)
disp('X2=')
disp(x2)
end
%fin del programa
4. Programa que pregunta si quieres hacer una conversin de n segundos a
horas, minutos y segundos, si es asi entonces te pide ingresar el numero de
segundos a convertir, de otro modo te pone un letrero que dice HASTA LA
VISTA BABY.
%programa que convierte segundos
clc
clear
close all
respuesta=input(' QUIERES HACER ALGUNA CONVERSION DE
SEGUNDOS ? SI=1, NO=2 ');
if respuesta==1
n=input('CUANTOS SEGUNDOS SON LOS QUE VAS A CONVERTIR ? ');
64
horas=fix(n/3600);
minutos=rem(n,3600);
minutos1=fix(minutos/60);
segundos=minutos-(minutos1*60);
disp(' LAS HORAS SON')
disp(horas)
disp('LOS MINUTOS SON')
disp(minutos1)
disp('LOS SEGUNDOS SON')
disp(segundos)
else
disp(' HASTA LA VISTA BABY ')
end
%fin del programa
5. Hacer un programa en Matlab que detecte si un numero introducido desde el
teclado es positivo o negativo.
%programa que detecta si un nuero es positivo o negativo
clc
clear
close all
numero=input(' TECLEA UN NUMERO ');
if numero== 0
disp(' EL NUMERO NO ES POSITIVO NI NEGATIVO, ES EL CERO ')
else
if numero>0
disp(' EL NUMERO ES POSITIVO ')
else
disp(' EL NUMERO ES NEGATIVO ')
end
end
% fin del programa
Existe tambin la bifurcacin mltiple (if s anidados), en la que pueden
concatenarse tantas condiciones como se desee, y que tiene la forma:
If condicion1
bloque1
elseif condicion2
bloque2
elseif condicion3
bloque3
else % opcin por defecto para cuando no se cumplen las condiciones 1, 2 y 3
bloque4
end
65
Donde la opcin por defecto else puede ser omitida: si no est presente no se
hace nada en caso de que no se cumpla ninguna de las condiciones que se han
analizado.
En el ejemplo anterior se hace uso de dos if, uno dentro del otro. Este es un claro
ejemplo de lo que se acaba de explicar.
Observacin: la condicin if puede ser una condicin de tipo matricial, del tipo
A==B, donde A y B son matrices del mismo tamao. Para que se considere que la
condicin se cumple, es necesario que sean iguales dos a dos todos los
elementos de las matrices A y B =
,
1 , 1 . Basta que haya
dos elementos a
ij
y b
ij
diferentes para que las matrices ya no sean iguales, y por lo
tanto las sentencias del if no se ejecuten. Anlogamente, una condicin en la
forma A~=B exige que todos los elementos sean diferentes dos a dos ( ,
1 , 1 ) . Bastara que dos elementos a
ij
y b
ij
fueran iguales para
que la condicin no se cumpliera. En resumen:
if A==B exige que todos los elementos sean iguales dos a dos
if A~=B exige que todos los elementos sean diferentes dos a dos
Matlab dispone de funciones especiales para ayudar en el checheo de condiciones
matriciales. Por ejemplo, la funcin isequal (A,B) devuelve un uno si las dos
matrices son idnticas y un cero en caso de que difieran en algo.
Hagamos ms programas
6. Hacer un programa en Matlab que detecte si un numero introducido desde el
teclado es positivo o negativo.
%programa que detecta si un nuero es positivo o negativo
clc
clear
close all
numero=input(' TECLEA UN NUMERO ');
if numero== 0
disp(' EL NUMERO NO ES POSITIVO NI NEGATIVO, ES EL CERO ')
elseif numero>0
disp(' EL NUMERO ES POSITIVO ')
else
disp(' EL NUMERO ES NEGATIVO ')
end
% fin del programa
7. Hacer un programa que me diga si un numero introducido desde el teclado es
par o impar.
66
%programa que analiza un numero par o impar
clc
clear
close all
numero=input(' TECLEA UN NUMERO ENTERO ');
if rem(numero,2)==0
disp(' EL NUMERO ES NUMERO PAR ')
else
disp(' EL NUMERO ES NUMERO IMPAR ')
end
%fin del programa
8. Escribir un programa que detecte si se han introducido en orden creciente tres
nmeros introducidos por el usuario.
9. Escribir un programa que detecte si se han introducido en orden decreciente
tres nmeros introducidos por el usuario.
10. Escribir un programa que acomode tres nmeros dados por el usuario en
forma descendente.
11. Escribir un programa que acomode tres nmeros dados por el usuario en
forma ascendente.
12. Escribir un programa que analice un numero entero entre 1 y 7 inclusive, y
me diga con palabras de que numero se trata.
13. Escribir un programa que lea un numero y si es par que lo multiplique por 5,
de lo contrario que lo divida entre 7.
14. Escribir un programa que muestre un mensaje afirmativo si el numero
introducido es mltiplo de 5
15. Escribir un programa para que dado un nmero entero entre 1 y 7 inclusive,
el programa escriba el nombre del da de la semana.
16. Escribir un programa que lea dos nmeros desde el teclado y si el primero es
mayor que el segundo, que intercambie sus valores.
17. Escribir un programa que dada una calificacin en valor alfabtico (A, B, C, D
o E) indique su equivalente en valor numrico (4, 5, 6, 7 u 8).
18. Escribir un programa que lea desde el teclado el importe de una factura y
determine el importe neto segn los siguientes criterios.
Importe bruto menor de 20 000 sin descuento
Importe bruto mayor de 20 000 15% de descuento
67
19. Escribir un programa que una vez leda una hora en formato (horas, minutos,
segundos) indique cual ser el tiempo dentro de un segundo.
20. Escribir un programa que dada la fecha de nacimiento, el programa diga el
signo del zodiaco.
3.3 SENTENCIA for
La sentencia for repite un conjunto de instrucciones o una instruccin un
determinado nmero de veces. La sintaxis de esta sentencia en Matlab es la
siguiente:
for variable=inicio: final
sentencias
end
Donde:
Variable. Es el nombre de una variable que va a tomar todos los valores
comprendidos entre el inicio y el final.
Inicio. Marca el principio del ciclo
Final. Marca el final del ciclo.
Sentencias. Son las instrucciones que se repiten un determinado nmero de
veces.
Por ejemplo
for i=1:10
disp.(UAAAN)
end
El ejemplo anterior lo que hace es que escribe 10 veces la palabra UAAAN en la
pantalla
En el siguiente ejemplo se presenta un caso mas general para la variable del
bucle (valor inicial: incremento: valor final); el bucle se ejecuta por primera vez con
i=n, y luego se va reduciendo de 0.2 en 0.2 hasta que llega a ser menor que 1, en
cuyo caso el bucle se termina.
for i=n:-0.2:1
Sentencias
end
68
en el siguiente ejemplo se presenta una estructura correspondiente a dos bucles
anidados. La variable j es la que vara ms rpidamente (por cada valor de i, j
toma todos sus valores posibles):
for i=1:m
for j=1:n
Sentencias
end
end
Una ltima forma de inters del bucle for es la siguiente (A es una matriz)
for i=A
Sentencias
end
En la que la variable i es un vector que va tomando en cada interaccin el valor de
las columnas de A
Ejemplos:
1. Hacer un programa que imprima en la pantalla cien veces la frase SOY
ESTUDIANTE DE LA NARRO
%programa que imprime cien veces una frase
clc
clear
close all
for i=1:100
disp(' SOY ESTUDIANTE DE LA NARRO ')
end
% fin del programa
2. Hacer un programa que sume los nmeros enteros que hay entre 1 y 100
1 + 2 + 3 + 4 + 5 + 6 + 7 + + 100
%PROGRAMA QUE SUMA LOS NUMEROS DEL 1 AL 100
clc
clear
close all
suma=0;
disp(' LA SUMA DE LOS NUMEROS ENTEROS QUE HAY ENTRE 1 Y 100 ES ')
for i=1:100
69
suma=suma+i;
end
disp(suma)
%fin del programa
3. Hacer un programa que calcule la multiplicacin de los nmeros enteros que
hay entre 1 y 100
%programa que calcula la multiplicacion de los numeros 1 al 100
clc
clear
close all
multiplicacion=1;
for j=1:100
multiplicacion=multiplicacion*j;
end
disp(' EL PRODUCTO DE LOS ENTEROS ENTRE 1 Y 100 ES ')
disp(multiplicacion)
%fin del programa
4. Hacer un programa que sume los nmeros pares que hay entre 1 y n y que
diga cuantos son.
%programa que cuenta los numeros pares
clc
clear
close all
n=input(' CUANTOS NUMEROS VAS A ANALIZAR ? ');
suma1=0;
suma2=0;
for i=2:2:n
suma1=suma1+i;
suma2=suma2+1;
end
disp(' LA SUMA DE PARES ES ')
disp(suma1)
disp(' LA CANTIDAD DE PARES ES ')
disp(suma2)
%fin del programa
5. Hacer un programa para que dada una serie de n nmeros enteros, el
programa calcule:
a) suma de pares
b) suma de impares
c) cantidad de pares
d) cantidad de impares
e) suma de mltiplos de 7
70
f) cantidad de mltiplos de 3
%PROGRAMA QUE CALCULA PARES, IMPARES Y MULTIPLOS
clc
clear
close all
suma1=0; suma2=0; suma3=0; suma4=0; suma5=0; suma6=0;
n=input(' CUANTOS DATOS VAS A ANALIZAR ? ');
for i=1:n
dato=input(' TECLEA UN NUMERO: ');
if rem(dato,2)==0
suma1=suma1+dato;
suma2=suma2+1;
else
suma3=suma3+dato;
suma4=suma4+1;
end
if rem(dato,7)==0
suma5=suma5+dato;
end
if rem(dato,3)==0
suma6=suma6+1;
end
end
clc
disp('LA SUMA DE NUMEROS PARES ES ')
disp(suma1)
disp('LA CANTIDAD DE NUMEROS PARES ES ')
disp(suma2)
disp('LA SUMA NUMEROS IMPARES ES ')
disp(suma3)
disp('LA CANTIDAD DE NUMEROS IMPARES ES ')
disp(suma4)
disp('LA SUMA DE NUMEROS MULTIPLOS DE 7 ES ')
disp(suma5)
disp('LA CANTIDAD DE NUMEROS MULTIPLOS DE 3 ES ')
disp(suma6)
%FIN DE PROGRAMA
6. Hacer un programa para darle solucin a la siguiente serie
=
1
3
+
2
4
+
3
5
+ +
( )
( + 2)
%programa que da solucin a una serie
71
clc
clear
close all
suma=0;
tope=input(' CUAL ES EL TOPE DE LA SERIE ? ');
for k=1:tope
suma=suma+((k^(k+1))/(k+2));
end
disp('LA SERIE ES')
disp(suma)
%fin del programa
3.3.1 UTILIZANDO fprintf EN MATLAB
La Funcin fprintf permite controlar la forma en que datos numricos y cadenas
de texto son presentados en el Command Window o en un archivo.
La sintaxis de esta declaracin est basada en la funcin similar del lenguaje C:
fprintf(fi,cadena de control, var1, var2,)
Ejemplos.
fprintf(fi,el numero de ecuaciones es:%d\n,n)
fprintf(fi, El determinante es:%if10.4\n,n)
De forma anloga, la funcin sprintf convierte su resultado en cadena de
caracteres que devuelve como valor de retorno, en vez de enviarlo a un fichero.
Ejemplo
Resultado=sprintf(El cuadrado de %f es %12.4f\n,n,n*n)
Donde resultado es una cadena de caracteres. Esta funcin constituye el mtodo
ms general de convertir nmeros en cadenas de caracteres, por ejemplo para
ponerlos como ttulos de figuras.
Al igual que en C, existen varios smbolos que dentro de la instruccin, pueden
establecer una accin o un formato especial en los resultados que se imprimen.
Algunos de los caracteres de accin son:
Tabla sobre el formato de los cdigos para uso con fprintf
Cdigo Conversin o instruccin
%s Formato de texto
%d Formato sin parte fraccionaria (formato entero)
%f Formato con un valor de punto flotante
(%12.4f=A 12 espacios y con 4 cifras decimales)
%e Formato con un valor de punto flotante en notacin cientfica
%g Formato de la forma ms compacta
%if Notacin de doble precisin
72
\n Insertar nueva lnea en la salida de texto
\t Insertar un tabulador en la salida de texto
\b Backspace
\r Retorno
7. Hacer un programa que genere la tabla de multiplicar de un nmero x
introducido por el teclado hasta el numero n
%programa que genera la tabla de multiplicar del numero x, hasta n
clc
clear
close all
m=1;
x=input('DE QUE NUMERO DESEAS LA TABLA DE MULTIPLICAR: ? ');
n=input(' HASTA QUE NUMERO DESEAS CALCULAR LA TABLA: ? ');
fprintf('LA TABLA DE MULTIPLICAR DEL NUMERO %2.0f ES \n',x)
for i=1:n
m=i*x;
disp([num2str(x),' * ',num2str(i),' = ',num2str(m)]);
end
%fin del programa
Nota: la funcin num2str, convierte nmeros a string (texto)
8. Hacer un programa que calcule el factorial de un nmero definido de la
siguiente manera
! = 1 2 3 ( 2) ( 1)
7! = 1 2 3 4 5 6 7 = 5040
%programa que calcula el factorial de un numero
clc
clear
close all
disp('PROGRAMA QUE CALCULA EL FACTORIAL DE UN NUMERO X ')
n=input(' DE QUE NUMERO DESEAS CALCULAR EL FACTORIAL ? ');
factorial=1;
for i=1:n
factorial=factorial*i;
end
fprintf('EL FACTORIAL DEL NUMERO %3.0f ES %15.0f\n',n,factorial)
%fin del programa
73
9. Hacer un programa que resuelva n ecuaciones cuadrticas, usando la formula
general.
%programa que resuelve n ecuaciones cuadraticas
clc
clear
close all
disp('PROGRAMA QUE CALCULA RAICES DE UNA ECUACION DE
SEGUNDO GRADO')
disp(' USANDO PARA ELLO LA FORMULA GENERAL')
disp('_________________________________________________________
_')
n=input(' CUANTAS ECUACIONES DESEAS SOLUCIONAR ? ');
for j=1:n
disp('_________________________')
a=input(' VALOR DE a: ? ');
b=input(' VALOR DE b: ? ');
c=input(' VALOR DE c: ? ');
z=(b^2-(4*a*c));
%bifurcacion
if z<0
disp(' LAS RAICES SON COMPLEJAS Y SON LAS SIGUIENTES ')
x1=(-b+sqrt(z))/(2*a);
x2=(-b-sqrt(z))/(2*a);
disp('X1=')
disp(x1)
disp('X2=')
disp(x2)
else
disp(' LAS RAICES SON REALES Y SON LAS SIGUIENTES ')
x1=(-b+sqrt(z))/(2*a);
x2=(-b-sqrt(z))/(2*a);
fprintf('X1=%f\n',x1)
fprintf('X2=%f\n',x2)
end
end
%fin del programa
10. Hacer un programa que calcule la siguiente serie
=
1
1!
+
2
2!
+
3
3!
+ +
!
%programa que calcula una serie
74
clc
clear
close all
disp('PROGRAMA QUE RESUELVE UNA SERIE')
suma=0;
n=input(' CUAL ES EL TOPE DE LA SERIE ? ');
for j=1:n
factorial=1;
for i=1:j
factorial=factorial*i;
end
suma=suma+((j^j)/factorial);
end
disp(' EL RESULTADO DE LA SERIE ES')
disp(suma)
%fin del programa
TAREA
11. Hacer un programa que calcule la suma de los nmeros hasta un nmero
dado (introducido por el usuario)
12. Hacer un programa que calcule la media y la varianza de una serie de datos
numricos
=

=

( )
1
13. Hacer un programa que calcule la siguiente serie
=
1
1!

2
2!
+
3
3!

4
4!
+
5
5!

14. Hacer un programa que me diga cuantos nmeros primos hay entre 1 y
10000.
15. Hacer un programa que me diga cuantos nmeros primos hay entre 1 y
10000, adems que me los muestre.
16. Hacer un programa que calcule la funcin sen (x) por medio de la
aproximacin de la serie de Taylor.
si n( ) =
( 1)
( 2 + 1) !
17. Hacer un programa que calcule la funcin cos (x) por medio de la
aproximacin de la serie de Taylor
75
cos( ) =
( 1)
( 2 ) !
18. Hacer un programa que calcule la funcin por medio de la aproximacin
de Taylor
= 1 + +
2!
+
3!
+ +
!
19. Hacer un programa que calcule la aproximacin de la funcin = ( 1 + )
( 1 + ) =
2
+
3

4
+ + ( 1) 1 1
20. Hacer un programa que dada una serie de nmeros enteros, el programa
sume los nmeros pares, multiplique los nmeros impares, y me muestre los
nmeros primos.
21. Hacer un programa que calcule la serie de Fibonacci hasta un nmero
determinado llamado tope.
La serie de Fibonacci se refiere a dos nmeros enteros consecutivos, la serie
va a sumar los ltimos dos.
Ejemplos:
Dados los nmeros 3 y 4, la serie se compondr de los siguientes nmeros
3, 4, 7, 11, 18, 29, 47, 76, 123,
Dados los nmeros 0 y 1, la serie se compondr de los siguientes nmeros
0, 1, 1, 2, 3, 5, 8, 13, 21, 34,
76
3.4 SENTENCIA while
La estructura del bucle while es muy similar a la del for y tambin sirve para hacer
ciclos. Su sintaxis es la siguiente:
while
Condicin
Sentencias
end
Donde condicin puede ser una expresin vectorial o matricial. 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)
Ejemplos:
1. Hacer un programa que imprima en la pantalla cien veces la frase SOY
ESTUDIANTE DE LA NARRO
%programa que imprime 100 veces una frase usando while
clc
clear
close all
i=1;
while i<=100
disp(' SOY ESTUDIANTE DE LA NARRO ')
i=i+1; % incrementador
end
%fin del programa
2. Hacer un programa que sume los nmeros enteros que hay entre 1 y 100
1 + 2 + 3 + 4 + 5 + 6 + 7 + + 100
%programa que suma los numeros enteros entre 1 y 100 con while
clc
clear
close all
disp(' LA SUMA DE LOS NUMEROS ENTEROS QUE HAY ENTRE 1 Y 100
ES ')
77
j=100;
suma=0;
while j>=1
suma=suma+j;
j=j-1;
end
disp(suma)
%fin del programa
3. Hacer un programa que calcule la multiplicacin de los nmeros enteros que
hay entre 1 y 100
%programa que multiplica los numeros enteros entre 1 y 100 con while
clc
clear
close all
disp(' LA MULTIPLICACION DE LOS NUMEROS ENTEROS QUE HAY
ENTRE 1 Y 100 ES ')
j=1;
producto=1;
while j<=100
producto=producto*j;
j=j+1;
end
disp(producto)
%fin del programa
4. Hacer un programa que sume los nmeros pares que hay entre 1 y n y que
diga cuantos son.
%programa de los numeros pares usando while
clc
clear
close all
n=input(' HASTA QUE NUMERO DESEAS ANALIZAR: ? ');
i=2;
suma=0; suma1=0;
while i<=n
suma=suma+i;
suma1=suma1+1;
i=i+2;
end
fprintf('LA SUMA DE LOS NUMEROS PARES QUE HAY ENTRE 1 Y %3.0f
ES %5.0f\n',n,suma)
78
fprintf('LA CANTIDAD DE NUMEROS PARES QUE HAY ENTRE 1 Y %3.0f
ES %3.0f\n',n,suma1)
%fin del programa
5. Hacer un programa para que dada una serie de n nmeros enteros, el
programa calcule:
a) suma de pares
b) suma de impares
c) cantidad de pares
d) cantidad de impares
e) suma de mltiplos de 7
f) cantidad de mltiplos de 3
%programa que hace varias operaciones con pares e impares
clc
clear
close all
disp('PROGRAMA QUE ANALIZA NUMEROS ENTEROS')
n=input(' CUANTOS NUMEROS DESEAS ANALIZAR ? ');
i=1;
suma1=0; suma2=0; suma3=0; suma4=0; suma5=0; suma6=0;
while i<=n
dato=input(' TECLEA UN NUMERO ENTERO: ');
if rem(dato,2)==0
suma1=suma1+dato;
suma2=suma2+1;
else
suma3=suma3+dato;
suma4=suma4+1;
end
if rem(dato,7)==0
suma5=suma5+dato;
end
if rem(dato,3)==0
suma6=suma6+1;
end
i=i+1;
end
fprintf('LA SUMA DE LOS NUMEROS PARES ES %4.0f\n',suma1)
fprintf('LA CANTIDAD DE NUMEROS PARES ES %2.0f\n',suma2)
fprintf('LA SUMA DE LOS NUMEROS IMPARES ES %4.0f\n',suma3)
fprintf('LA CANTIDAD DE NUMEROS IMPARES ES %2.0f\n',suma4)
fprintf('LA SUMA DE LOS NUMEROS MULTIPLOS DE 7 ES %4.0f\n',suma5)
fprintf('LA CANTIDAD DE NUMEROS MULTIPLOS DE 3 ES %2.0f\n',suma6)
%fin del programa
79
6. Hacer un programa que calcule la media y la varianza de una serie de n datos.
=

=

( )
1
%programa que calcula la media y la varianza
clc
clear
close all
disp(' CALCULO DE LA MEDIA Y LA VARIANZA')
disp('__________________________________')
z=1; k=1;
suma=0; suma1=0;
cantidad=input(' CUANTOS DATOS VAS A ANALIZAR ? ');
while z<=cantidad
dato(z)=input('TECLEA UN NUMERO ');
suma=suma+dato(z);
suma1=suma1+dato(z)^2;
z=z+1;
end
clc
disp('LOS DATOS SON LOS SIGUIENTES ')
while k<=cantidad
disp(['DATO ',num2str(k),'=',num2str(dato(k))])
k=k+1;
end
media=suma/cantidad;
varianza=(suma1-(suma^2/cantidad))/(cantidad-1);
fprintf('LA MEDIA DE LOS DATOS ES %2.3f\n',media)
fprintf('LA VARIANZA DE ESTOS DATOS ES %3.3f\n',varianza)
%fin del programa
7. Hacer un programa que calcule la serie de fibonacci hasta el primer nmero
que rebase a otro nmero llamado tope.
%programa para calcular la serie de fibonacci hasta un tope
clc
clear
close all
disp('PROGRAMA DE LA SERIE DE FIBONACCI EMPEZANDO EN 1 Y 2')
tope=input(' CUAL ES EL TOPE DE LA SERIE ? ');
a=1;
80
disp(a)
b=2;
disp(b)
c=a+b;
while c<=tope
c=a+b;
a=b;
b=c;
disp(c)
end
%fin del programa
8. Hacer un programa que calcule las tablas de multiplicar del 1 al 10 y las
muestre en pantalla.
%programa de las tablas de multiplicar
clc
clear
close all
disp('TABLAS DEL 1 HSTA n')
n=input(' HASTA QUE NUMERO DESEAS LAS TABLAS ? ');
i=1;
while i<=n
j=1;
while j<=10
tabla =i*j;
fprintf('%d * %d = %d\n',i,j,tabla)
j=j+1;
end
i=i+1;
disp('_____________________')
pause
end
%fin del programa
TAREA
Usando la sentencia while hacer los siguientes programas propuestos.
9. Hacer un programa que lea 20 nmeros y determine cuales y cuntos de ellos
son mltiplos de 7. El programa primero pedir los 20 nmeros y a
continuacin mostrar solo aquellos que sean mltiplos de 7 as como cuantos
son, en caso de que no haya nmeros con esta caracterstica, que aparezca el
letrero NO HAY NUMEROS QUE SEAN MULTIPLOS DE 7.
10. Hacer un programa para calcular la siguiente serie:
81
=
2
+
3

4
+
5

Dados los argumentos x y n, donde n es el nmero de trminos que se
evalan en la serie
11. Hacer un programa que calcule y muestre el cuadrado de 20 nmeros dados
por el usuario.
12. Hacer un programa que analice 20 nmeros; si el nmero analizado es impar
que le saque raz cuadrada, si el nmero analizado es par, que lo eleve al
cuadrado.
13. Hacer un programa que pida n nmeros y diga cul es el mayor y cul es el
menor.
14. Hacer un programa que calcule la mediana de una serie de n datos
15. Un nmero perfecto es aquel que es igual a la suma de sus divisores,
excluido el mismo.
Ejemplo de nmero perfecto: 6=1+2+3=6
Ejemplo de nmero no perfecto: 12=1+2+3+4+6=16
Hacer un programa que reciba un numero y diga si este nmero es perfecto
o no.
3.5. SENTENCIA switch
La sentencia switch realiza una funcin anloga a un conjunto de ifelseifend
concatenados ( ifs anidados). Su forma general es la siguiente:
switch variable
case valor1,
Sentencias1
case valor2,
Sentencias2
case valor3,
Sentencias3,
case

otherwise, % opcin por defecto


Sentencias4
end
82
La ramificacin que produce el switch opera de la siguiente manera:
Al llegar a la expresin switch variable, si la variable tiene el valor1, se ejecutan las
sentencias1; si variable toma el valor2, se ejecutan las sentecias2; y as
sucesivamente. Es importante notar que la variable solo debe tomar unos pocos
valores para que el programa se ramifique en unas pocas ramas. No tiene sentido
intentar una ramificacin switch con una variable que pueda tomar un nmero
infinito de valores.
Ejemplos:
1. Hacer un programa que dado un men de 4 opciones me permita escoger una
de ellas, las opciones sern:
1. que escriba la frase BIENVENIDO A LA NARRO
2. que escriba la frase AHORA ERES BUITRE PARA SIEMPRE
3. que escriba la frase PROGRAMAR EN MATLAB ES FACIL
4. que escriba la frase SACAR UN 100 DE CALIFICACION ES MI META
% programa de 4 letreros con switch
clc
clear
close all
n=input('ESCOJE UN NUMERO ENTRE 1 Y 4 ');
switch n
case 1
disp('BIENVENIDO A LA NARRO')
case 2
disp(' AHORA ERES BUITRE PARA SIEMPRE ')
case 3
disp('PROGRAMAR EN MATLAB ES FACIL ')
case 4
disp(' SACAR UN 100 DE CALIFICACION ES MI META ')
otherwise
disp('OPCION INVALIDA, PRESIONASTE UN NUMERO NO VALIDO')
end
%fin del programa
2. Hacer un programa que dado un men de opciones, se pueda escoger una
para calcular:
1: rea de un circulo
2: permetro de un circulo
3: volumen de una esfera
4: volumen de un cilindro
83
%programa de men para circulo
clc
clear
close all
disp('_____________________________')
disp('M E N U D E O P C I O N E S')
disp('_____________________________')
disp('1: AREA DE UN CIRCULO ')
disp('2: PERIMETRO DE UN CIRCULO ')
disp('3: VOLUMEN DE UNA ESFERA ')
disp('4: VOLUMEN DE UN CILINDRO ')
disp('_____________________________')
opcion=input(' QUE OPCION DESEAS 1-4 ? ');
switch opcion
case 1
r=input(' VALOR DEL RADIO ? ');
a=pi*r^2;
fprintf('EL AREA DEL CIRCULO ES %d\n',a)
case 2
r=input(' VALOR DEL RADIO ? ');
p=pi*2*r;
fprintf('EL PERIMETRO DEL CIRCULO ES %d\n',p)
case 3
r=input(' VALOR DEL RADIO ? ');
v=(4/3)*pi*r^3;
fprintf('EL VOLUMEN DE LA ESFERA ES %d\n',v)
case 4
r=input(' VALOR DEL RADIO ? ');
h=input(' VALOR DE LA ALTURA ? ');
v1=((pi*r^2)*2)+((pi*2*r)*h);
fprintf('EL VOLUMEN DEL CILINDRO ES %d\n',v1)
otherwise disp('OPCION INVALIDA')
end
%fin del programa
3. Hacer un programa para que dado un nmero entero entre 1 y 7 el programa
me diga con palabras de que numero se trata.
%PROGRAMA QUE ME DICE DE QUE NUMERO SE TRATA CON
PALABRAS
clc
clear
close all
disp('PROGRAMA DE LOS NUMEROS ENTRE 1 Y 7')
disp('___________________________________')
84
numero=input(' TECLEA UN NUMERO ENTRE 1 Y 7 ');
switch numero
case 1
disp(' EL NUMERO ESCOGIDO ES EL UNO ')
case 2
disp(' EL NUMERO ESCOGIDO ES EL DOS ')
case 3
disp(' EL NUMERO ESCOGIDO ES EL TRES ')
case 4
disp(' EL NUMERO ESCOGIDO ES EL CUATRO ')
case 5
disp(' EL NUMERO ESCOGIDO ES EL CINCO ')
case 6
disp( ' EL NUMERO ESCOGIDO ES EL SEIS ')
case 7
disp( ' EL NUMERO ESCOGIDO ES EL SIETE ')
otherwise
disp(' EL NUMERO ESCOGIDO ESTA FUERA DE RANGO ')
end
%fin del programa
4. Hacer un programa para que dado un men de 4 opciones el programa ejecute
una de las 4 acciones y que se regrese al men en tanto no escoja la cuarta
opcin que ser la opcin de salir.
%programa que maneja menus simples
clc
clear
opcion=1;
close all
while opcion <4
disp('____________________________________')
disp(' M E N U ')
disp('____________________________________')
disp('OPERACION OPCION ')
disp('RAICES 1 ')
disp('FIBONACCI 2 ')
disp('SERIE 3 ')
disp('SALIR 4 ')
disp('_______________ _____________________')
opcion=input('QUE OPERACION DESEAS EFECTUAR ? ');
switch opcion
case 1
clear
a=input('VALOR DE a ? ');
85
b=input('VALOR DE b ? ');
c=input('VALOR DE c ? ');
z=(b^2)-(4*a*c);
if z<0
disp('LAS RAICES SON COMPLEJAS Y SON LAS SIGUIENTES')
x1=(-b+sqrt(z))/(2*a);
disp(' EL RESULTADO DE X1 ES')
disp(x1)
x2=(-b-sqrt(z))/(2*a);
disp('EL RESULTADO DE X2 ES')
disp(x2)
else
disp('LAS RAICES SON REALES Y SON LAS SIGUIENTES')
x1=(-b+sqrt(z))/(2*a);
fprintf('EL RESULTADO DE X1 ES=%f\n ', x1)
x2=(-b-sqrt(z))/(2*a);
fprintf('EL RESULTADO DE X2 ES=%f\n ',x2)
end % del if
case 2
clear
a=input('DAME UN NUMERO ENTERO ');
b=a+1;
tope=input('DAME EL TOPE DE LA SERIE ');
disp('LA SERIE DE FIBONACCI ES: ')
disp('_________________________')
disp(a)
disp(b)
c=a+b;
while c <= tope
c=a+b;
a=b;
b=c;
disp(c)
end % del while
case 3
clear
suma=0;
x=input('VALOR DE X ');
n=input('VALOR DE n ');
factorial=1;
for i=1:n
factorial=factorial*i;
s(i)=(x^i)/factorial;
suma=suma+s(i);
end % del for
86
fprintf('EL RESULTADO DE LA SERIE ES=%f\n ',suma)
case 4
disp(' HASTA LA BISTA BABY....')
break
end % del switch
opcion=1;
pause
clc
end % del while
%fin del programa
5. Hacer un programa para que dado un men de 4 opciones el programa
ejecute una de las 4 acciones y que se regrese al men en tanto no escoja la
cuarta opcin que ser la opcin de salir. (forma alternativa)
%programa de los menus
clc
clear
close all
opcion=1;
while opcion<=3
opcion=menu(' MENU DE OPCIONES ','RAICES POR FORMULA
GRAL.','SERIE DE FIBONACCI','SERIE DE TAYLOR','SALIR DEL MENU');
switch opcion
case 1
clc
a=input('VALOR DE a ? ');
b=input('VALOR DE b ? ');
c=input('VALOR DE c ? ');
z=(b^2)-(4*a*c);
if z<0
disp(' LAS RAICES SON COMPLEJAS')
x1=(-b+sqrt(z))/(2*a);
x2=(-b-sqrt(z))/(2*a);
fprintf(' EL RESULTADO DE x1 ES =%f\n ', x1)
fprintf('EL RESULTADO DE x2 ES =%f\n ', x2)
disp('PRESIONA UNA TECLA PARA VER LA GRAFICA')
pause
x=[-10:0.1:10];
y=a*x.^2+b*x+c;
plot(x,y,'*r'), grid, xlabel('X'), ylabel('Y'), title('GRAFICA DE LA
CUADRATICA')
else
disp(' LAS RAICES SON REALES')
87
x1=(-b+sqrt(z))/(2*a);
x2=(-b-sqrt(z))/(2*a);
disp( EL RESULTADO DE X1 ES )
disp(x1)
disp(EL RESULTADO DE X2 ES )
disp(x2)
disp('PRESIONA UNA TECLA PARA VER LA GRAFICA')
pause
x=[-10:0.1:10];
y=a*x.^2+b*x+c;
plot(x,y,'*r'), grid, xlabel('X'), ylabel('Y'), title('GRAFICA DE LA
CUADRATICA')
end
%termina el primer case
case 2
clc, close all
a=1;
b=2;
tope=input('CUAL ES EL TOPE DE LA SERIE ? ');
disp('LA SERIE DE FIBONACCI ES LA SIGUIENTE')
disp('_____________________________________')
disp(a)
disp(b)
c=a+b;
while c <= tope
c=a+b;
a=b;
b=c;
disp(c)
end
disp('PRESIONA UNA TECLA PARA CONTINUAR')
pause
%termina el segundo case
case 3
clc, close all
suma=0;
x=input('CUAL ES EL VALOR DE X ');
n=input('CUAL ES EL TOPE DE LA SERIE ');
factorial=1;
for i=1:n
factorial=factorial*i;
s(i)=(x^i)/factorial;
suma=suma+s(i);
end
fprintf('EL VALOR DE LA SERIE ES=%f\n ',suma)
88
%termina el tercer case
case 4
disp('HASTA LA VISTA BABY')
close all
break
%termina el cuarto case
end % del switch
end % del while
%fin del programa
89
Funciones de
Matlab
4.1 FUNCIONES MATEMATICAS
La librera de Matlab dispone de una gama muy completa de funciones
predefinidas que se corresponden con las funciones matemticas ms utilizadas.
4.1.1 Funciones Trigonomtricas e Hiperblicas
sin (x) obtiene el seno del ngulo x
cos(x) obtiene el coseno del ngulo x
tan (x) obtiene la tangente del ngulo x
asin(x) obtiene el arco seno de x
acos(x) obtiene el arco coseno de x
atan(x) obtiene el arco tangente de x
sinh(x) obtiene el seno hiperblico del ngulo x
cosh(x) obtiene el coseno hiperblico del ngulo x
tanh(x) obtiene la tangente hiperblica del ngulo x
asinh(x) obtiene el arco seno hiperblico de x
acosh(x) obtiene el arco coseno hiperblico de x
tanh(x) obtiene la tangente hiperblica del ngulo x
atanh(x) obtiene el arco tangente hiperblico de x
sec(x) obtiene la secante del ngulo x
asec(x) obtiene el arco secante de x
sech(x) obtiene la secante hiperblica del ngulo x
asech(x) obtiene el arco secante hiperblico de x
csc(x) obtiene la cosecante del ngulo x
acsc(x) obtiene el arco cosecante de x
csch(x) obtiene la cosecante hiperblica del ngulo x
acsch(x) obtiene el arco cosecante hiperblico de x
cot(x) obtiene la cotangente del ngulo x
acot(x) obtiene el arco cotangente de x
coth(x) obtiene el cotangente hiperblico del ngulo x
acoth(x) obtiene el arco cotangente hiperblico de x
Nota: los ngulos de las funciones trigonomtricas debern estar dados en
radianes.
4
90
4.1.2 Funciones Exponenciales
exp(x) Funcin exponencial de base e
log(x) Funcin Logaritmo neperiano
log10(x) Funcin Logaritmo decimal
sqrt(x) Funcin Raz cuadrada
4.1.3 Funciones Especficas de variables numricas
abs(x) Mdulo o valor absoluto
angle(x) Argumento
ceil(x) Redondea los decimales al mayor entero ms cercano
ceil(x) Aplica la funcin ceil a real (x) y a imag(x)
conj(x) Complejo conjugado
fix(x) Elimina la parte decimal del real x
fix(x) Aplica la funcin fix a real (x) y a imag(x)
floor(x) Redondea los decimales al menor entero ms cercano
floor(x) Aplica la funcin floor a real (x) y a imag(x)
imag(x) Parte imaginaria
realx(x) Parte real
rem(a,b) Da el resto de la divisin entre los reales a y b
rem(x1,x2) Resto de la divisin de los trminos de x1 y x2
round(x) El entero ms prximo al real x
round(x) Aplica la funcin round a real (x) y a imag(x)
sign(x) Signo del real x (1 si x>0, -1 si x<0)
sign(x) Funcin signo
4.1.4 Funciones de Lxico
abs(cadena_caracteres) Devuelve el vector de caracteres ASCII
equivalentes a cada carcter de cadena
setstr(vector_numrico) Devuelve la cadena de caracteres ASCII
equivalentes a los elementos del vector
str2mat(t1,t2,t3..) Forma la matriz cuyas filas son las cadenas de
caracteres t1, t2,t3,.., respectivamente
str2num(cadena) Convierte la cadena de caracteres en su valor numrico
exacto utilizado por Matlab
num2str(nmero) Convierte el nmero exacto en su cadena de caracteres
equivalente con la precisin fijada
int2str(entero) Convierte en nmero entero en cadena.
91
4.1.5 Funciones de Nmeros Aleatorios
rand Devuelve un nmero decimal aleatorio distribuido uniformemente en el
intervalo [0,1]
rand(n) Devuelve una matriz de dimensin nxn cuyos elementos son
nmeros decimales aleatorios distribuidos uniformemente en el
intervalo [0,1]
rand(m,n) Devuelve una matriz de dimensin mxn cuyos elementos son
nmeros decimales aleatorios distribuidos.
rand(size(A)) Devuelve una matriz del mismo tamao que la matriz A y
cuyos elementos son nmeros decimales aleatorios
distribuidos uniformemente en el intervalo [0,1]
rand(seed) Devuelve el valor actual de la semilla generadora de los
nmeros aleatorios uniformes-
rand(seed,n) Coloca en la cantidad n el valor actual de la semilla
generadora de los nmeros aleatorios uniformes
randn Devuelve un nmero decimal aleatorio distribuido segn una normal
de media o y varianza 1
randn(n) Devuelve una matriz de dimensin nxn cuyos elementos son
nmeros decimales aleatorios distribuidos segn una normal de
media 0 y varianza 1
randn(m,n) Devuelve una matriz de dimensin mxn cuyos elementos son
nmeros decimales aleatorios distribuidos segn una normal de
media 0 y varianza 1
randn(size(A)) Devuelve una matriz del mismo tamao que la matriz A y
cuyos elementos son nmeros decimales aleatorios distribuidos
segn una normal de media 0 y varianza 1
randn(seed) Devuelve el valor actual de la semilla generadora de los
nmeros aleatorios normales
randn(seed, n) Coloca en la cantidad n el valor actual de la semilla
generadora de los nmeros aleatorios uniformes.
4.2 FUNCIONES POLINOMICAS
Matlab nos brinda una serie de funciones para trabajar con los polinomios. Es
importante mencionar que los polinomios en Matlab se van a representar como si
fueran vectores, por ejemplo, sea
( ) = 8 5 + + 3 + 4
En Matlab debemos ingresar a f(x) de la siguiente manera:
>>f=[8 -5 1 3 4]
92
Note que solo se introducen los coeficientes de las variables del polinomio.
La respuesta de Matlab a este polinomio ser:
f= 8 -5 1 3 4
observe que Matlab al responder no reescribe los corchetes, de hecho en adelante
utilizaremos los trminos vector y polinomio indistintamente para referirnos al
mismo concepto.
Ejemplos:
Declarar los siguientes polinomios en Matlab.
) = +
) = + +
) = + +
) =
) = + +
As quedaran en Matlab
>> p1=[3 2 -8]
p1 =
3 2 -8
>> p2=[10 -10 0 0 0 9 -1 0 0 24]
p2 =
10 -10 0 0 0 9 -1 0 0 24
>> p3=[-7 0 -18 1 0 0 2 0 0]
p3 =
-7 0 -18 1 0 0 2 0 0
>> p4=[1 0 0 0 0 0 0 0 0 0 -9]
p4 =
93
1 0 0 0 0 0 0 0 0 0 -9
>> p5=[24 1 0 -1 3 0 -144]
p5 =
24 1 0 -1 3 0 -144
Funciones bsicas
- roots(f) Obtiene las races de un polinomio dado
Calcula las races de un polinomio cuyos coeficientes son los elementos
del vector f. Si tiene N+1 componentes, el polinomio es
( 1) + + ( ) + ( + 1)
Ejemplos:
Hallar las races de los polinomios siguientes:
) = +
Sus races son:
>> roots(p1)
ans =
-2.0000
1.3333
) = + +
Sus races son:
>> roots(p2)
ans =
1.2142 + 0.4269i
1.2142 - 0.4269i
0.6730 + 0.8313i
0.6730 - 0.8313i
-0.1361 + 1.1012i
-0.1361 - 1.1012i
-1.0760
94
-0.7131 + 0.6688i
-0.7131 - 0.6688i
) = + +
Sus races son:
>> roots(p3)
ans =
0
0
-0.0293 + 1.5904i
-0.0293 - 1.5904i
0.5730
0.0175 + 0.5986i
0.0175 - 0.5986i
-0.5495
) =
Sus races son:
>> roots(p4)
ans =
-1.2457
-1.0078 + 0.7322i
-1.0078 - 0.7322i
-0.3850 + 1.1848i
-0.3850 - 1.1848i
0.3850 + 1.1848i
0.3850 - 1.1848i
1.2457
1.0078 + 0.7322i
1.0078 - 0.7322i
) = + +
Sus races son:
>> roots(p5)
95
ans = m
-1.3425
-0.6915 + 1.1706i
-0.6915 - 1.1706i
0.6737 + 1.1641i
0.6737 - 1.1641i
1.3365
- poly(f): Construye un polinomio a partir de sus races
Retorna un vector (polinomio) cuyos elementos son los coeficientes del
polinomio cuyas races son los elementos de f.
Puede apreciarse que roots y poly son funciones inversas.
Ejemplos:
Hallar las races de los polinomios siguientes, y enseguida a partir de sus
races obtener de nuevo el polinomio caracterstico.
) = +
>> p1=[3 2 -8]
p1 =
3 2 -8
>> r1=roots(p1)
r1 =
-2.0000
1.3333
>> p11=poly(r1)
p11 =
1.0000 0.6667 -2.6667
>> p11*3
ans =
3 2 -8
96
Observese que llegamos al polinomio del cual partimos.
) = + +
>> p2=[10 -10 0 0 0 9 -1 0 0 24]
p2 =
10 -10 0 0 0 9 -1 0 0 24
>> r2=roots(p2)
r2 =
1.2142 + 0.4269i
1.2142 - 0.4269i
0.6730 + 0.8313i
0.6730 - 0.8313i
-0.1361 + 1.1012i
-0.1361 - 1.1012i
-1.0760
-0.7131 + 0.6688i
-0.7131 - 0.6688i
>> p22=poly(r2)
p22 =
1.0000 -1.0000 0.0000 0.0000 0.0000 0.9000 -0.1000 -0.0000
-0.0000 2.4000
) = + +
>> p3=[-7 0 -18 1 0 0 2 0 0]
p3 =
-7 0 -18 1 0 0 2 0 0
>> r3=roots(p3)
r3 =
0
0
97
-0.0293 + 1.5904i
-0.0293 - 1.5904i
0.5730
0.0175 + 0.5986i
0.0175 - 0.5986i
-0.5495
>> p33=poly(r3)
p33 =
1.0000 -0.0000 2.5714 -0.1429 -0.0000 0.0000 -0.2857 0
0
>> p33*-7
ans =
-7.0000 0.0000 -18.0000 1.0000 0.0000 -0.0000 2.0000 0
0
) =
>> p4=[1 0 0 0 0 0 0 0 0 0 -9]
p4 =
1 0 0 0 0 0 0 0 0 0 -9
>> r4=roots(p4)
r4 =
-1.2457
-1.0078 + 0.7322i
-1.0078 - 0.7322i
-0.3850 + 1.1848i
-0.3850 - 1.1848i
0.3850 + 1.1848i
0.3850 - 1.1848i
1.2457
1.0078 + 0.7322i
1.0078 - 0.7322i
>> p44=poly(r4)
98
p44 =
Columns 1 through 10
1.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000
0.0000 0.0000
Column 11
-9.0000
) = + +
>> p5=[24 1 0 -1 3 0 -144]
p5 =
24 1 0 -1 3 0 -144
>> r5=roots(p5)
r5 =
-1.3425
-0.6915 + 1.1706i
-0.6915 - 1.1706i
0.6737 + 1.1641i
0.6737 - 1.1641i
1.3365
>> p55=poly(r5)
p55 =
1.0000 0.0417 0.0000 -0.0417 0.1250 -0.0000 -6.0000
>> p55*24
ans =
24.0000 1.0000 0.0000 -1.0000 3.0000 -0.0000 -144.0000
- polyval(f,x): Evala un polinomio en un punto dado
99
si p tiene N+1 elementos, retorna el valor del polinomio al evaluarlo en x.
Es decir = ( 1) + ( 2) + + ( ) + ( + 1)
ejemplo: = + ,
( ) = ( ) + ( ) =
En Matlab:
>> polyval(p1,3)
ans =
34
Ejemplo: = + + [ ]
( ) = ( ) ( ) + ( ) ( ) + =
( ) = ( ) ( ) + ( ) ( ) + =
En Matlab:
>> polyval(p2,-3)
ans =
-261660
>> polyval(p2,3)
ans =
131946
Ejemplo:
= + + [ , , , , , ]
( ) = ( ) ( ) + ( ) + ( ) =
( ) = ( ) ( ) + ( ) + ( ) =
( ) = ( ) ( ) + ( ) + ( ) =
( ) = ( ) ( ) + ( ) + ( ) =
100
( ) = ( ) ( ) + ( ) + ( ) =
( ) = ( ) ( ) + ( ) + ( ) =
( ) = ( ) ( ) + ( ) + ( ) =
En Matlab
>> polyval(p3,-3)
ans =
-59250
>> polyval(p3,-2)
ans =
-2944
>> polyval(p3,-1)
ans =
0
>> polyval(p3,0)
ans =
24
>> polyval(p3,1)
ans =
2
>> polyval(p3,2)
ans =
-2880
>> polyval(p3,3)
101
ans =
-58764
Ejemplo: = + +

( ) = ( ) + ( ) ( ) + ( )
= . +
( ) = ( ) + ( ) ( ) + ( )
= . +

( ) = ( ) + ( ) ( ) + ( ) = . +
( ) = ( ) + ( ) ( ) + ( ) = . +
En Matlab
>> x=[-20:20];
>> polyval(p5,x)
ans =
1.0e+009 *
Columns 1 through 8
1.5328 1.1266 0.8144 0.5779 0.4016 0.2726 0.1802 0.1155
Columns 9 through 16
0.0714 0.0424 0.0239 0.0127 0.0063 0.0028 0.0011 0.0004
Columns 17 through 24
0.0001 0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000
Columns 25 through 32
0.0001 0.0004 0.0011 0.0028 0.0063 0.0128 0.0241 0.0427
102
Columns 33 through 40
0.0719 0.1162 0.1812 0.2741 0.4037 0.5807 0.8182 1.1316
Column 41
1.5392
Nota: cuando se va a evaluar el polinomio en un numero muy grande de
valores, stos de deben de dar en forma de vector y asignados a una
variable.
En seguida se evala el polinomio en dicho vector (ejemplo anterior)
- conv(p1,p2): Multiplicacin de polinomios.
Conv, viene de convolucin, en el caso de los vectores convulucionar dos
vectores es equivalente a multiplicarlos.
El resultado es un vector de longitud=longitud (p1)+longitud (p2)-1
Ejemplo:
= +
= + +
= + +
=
= + +
Hallar
a) p1 *p2
b) p2*p3
c) p1*p5
d) p3*p4*p5
Algebraicamente esto es
) = ( + ) ( + + )
= + + + + +
+
En Matlab
>> conv(p1,p2)
ans =
103
30 -10 -100 80 0 27 15 -74 8 72 48 -192
b) = ( + + ) *( + + )
= + + +
+ + +
+ +
En Matlab
>> conv(p2,p3)
ans =
Columns 1 through 14
-70 70 -180 190 -10 -63 27 -182 267 -409 0 -414 22 216
Columns 15 through 18
-24 48 0 576
c) = ( + ) + +
= + + +
+
En Matlab
>> conv(p1,p5)
ans =
Columns 1 through 7
72 51 -190 -11 7 14 -456
Columns 8 through 9
-288 1152
d) = + + ( ) +
+
104
= + + + +
+ + + +

+ + + +
En Matlab
a=conv(p3,p4)
a =
Columns 1 through 14
-7 0 -18 1 0 0 2 0 24 0 63 0 162 -9
Columns 15 through 19
0 0 -18 0 -216
>> conv(a,p5)
ans =
Columns 1 through 7
-168 -7 -432 13 -20 18 1001
Columns 8 through 14
5 3168 -122 1518 39 3672 -117
Columns 15 through 21
-3276 -162 -9009 -45 -28512 1098 -54
Columns 22 through 25
216 1944 0 31104
- deconv(p2,p1): Divisin entre polinomios.
Sirve para hacer una divisin entre dos polinomios, con el entendido de que
el primer polinomio deber de ser ms grande que el segundo, de otra
manera el resultado ser cero.
Se utiliza de la siguiente manera:
105
>>[s,t]=deconv(p,q);
El resultado de la divisin de p entre q queda almacenado en la variable s, y
el resto de esta operacin (residuo) en la variable t
Ejemplo:
= +
= + +
= + +
=
= + +
Hallar
a) p2/p1
b) p3/p1
c) p4/p5
a) >> [a,b]=deconv(p2,p1)
a =
3.3333 -5.5556 12.5926 -23.2099 49.0535 -91.5953 191.5396 -
371.9473
b =
1.0e+003 *
Columns 1 through 8
0 0 0 0 0 0 0 0
Columns 9 through 10
2.2762 -2.9516
Lo cual significa que el cociente es
. . + . . + .
. . + .
Y el residuo ser
. .
106
b) >> [s,t]=deconv(p3,p1)
s =
-2.3333 1.5556 -13.2593 13.3210 -44.2387 65.0151 -160.6465
t =
1.0e+003 *
Columns 1 through 8
0 0 0 0 0 0 0 0.8414
Column 9
-1.2612
c) >> [e,f]=deconv(p4,p5)
e =
0.0417 -0.0017 0.0001 0.0017 -0.0054
f =
Columns 1 through 8
0 0 0 0 0 0.0106 6.0015 -0.2606
Columns 9 through 11
0.0265 0.2496 -9.7708
- Suma y resta:
Se desea poder sumar y restar polinomios de manera gil y sencilla, lo optimo
sera utilizar los smbolos + y nada mas
Veamos que sucede al tratar de hacerlo:
>> p1
p1 =
107
3 2 -8
>> p2
p2 =
10 -10 0 0 0 9 -1 0 0 24
>> p1+p2
??? Error using ==> plus
Matrix dimensions must agree.
Esto quiere decir que hay un error al tratar de sumar los polinomios ya que la
dimensin de stos debe de ser del mismo tamao. (Misma cantidad de
elementos)
La primer opcin que tenemos para sortear este obstculo es completar el vector
p1 o p2 con tantos ceros a la izquierda como sean necesarios, de esta manera
conseguimos un par de vectores que continan representando los polinomios que
tenamos inicialmente, solo que ahora son del mismo tamao en dimensin.
Veamos:
= +
= + +
En Matlab estos polinomios se representan por medios de vectores de la siguiente
manera:
p1=[3 2 -8]
p2=[10 -10 0 0 0 9 1 0 0 24]
claramente vemos que la dimensin de p2 es ms grande que la de p1.
Hagamos lo siguiente:
P1=[0 0 0 0 0 0 0 3 2 -8]
P2=[10 -10 0 0 0 9 1 0 0 24]
Ahora ya son del mismo tamao, tienen el mismo nmero de elementos y
procedemos a hacer la suma nuevamente.
>> p1=[0 0 0 0 0 0 0 3 2 -8]
p1 =
108
0 0 0 0 0 0 0 3 2 -8
>> p1+p2
ans =
10 -10 0 0 0 9 -1 3 2 16
ahora ya se pueden sumar y restar estos polinomios.
- Polyder(p1): Derivada de un polinomio.
Esta funcin nos permite hallar la primera derivada del polinomio en estudio.
Ejemplo:
= +
= + +
= + +
=
= + +
Hallar la primera derivada de cada polinomio
) = +
= +
En Matlab
>> polyder(p1)
ans =
6 2
) = + +
= +
En Matlab
>> polyder(p2)
109
ans =
90 -80 0 0 0 36 -3 0 0
Y as sucesivamente para las dems.
- Grafico de un polinomio (uso de la funcin polyval)
Se pueden hacer grficos de los polinomios auxilindonos de la funcin
polyval, que sirve para evaluar un polinomio en uno o ms valores.
La manera de construir el grafico de un polinomio es la siguiente:
Suponga que tenemos el siguiente polinomio: =
Como es de todos conocido este polinomio es una parbola y su grafica es
la siguiente:
En Matlab se puede hacer la grafica para este polinomio siguiendo estos
sencillos pasos.
1) se declara el polinomio
>> y=[1 0 0];
2) se declara un vector con los valores de x sealando el rango de la grafica.
x=[-10:0.1:10];
3) a continuacin se evalua el polinomio en el vecor de datos declarado
>> e=polyval(y,x);
4) se hace la grafica del polinomio
>> plot(x,e),title('PARABOLA'),xlabel('absisas'),ylabel('ordenadas'),grid
Y se crea la siguiente grfica:
110
Tarea:
Hacer la grafica para cada uno de los polinomios siguientes en un rango
adecuado.
= +
= + +
= + +
=
= + +
111
4.3 FUNCIONES DE ANALISIS DE DATOS
En este captulo nos centraremos en los clculos ms bsicos de la Estadstica
Descriptiva y de los modelos de datos con Matlab. Esta pequea introduccin no
cuenta con una descripcin terica de los clculos as que se suponen
conocimientos bsicos de Estadstica. En vez de describir de forma sistemtica las
funciones como en las secciones anteriores, avanzaremos siguiendo un ejemplo.
Se declara la variable temperatura que contiene los datos de temperatura diaria
de cinco ciudades, tomadas durante un mes:
temperatura=
21 33 12 33 5
22 32 14 33 6
23 33 15 35 5
21 33 16 39 6
22 34 20 38 4
23 32 15 39 5
22 32 18 40 2
21 33 18 45 5
22 35 16 45 15
20 35 16 42 12
20 36 15 40 14
21 36 14 41 16
22 34 21 39 23
21 33 12 37 5
21 33 13 38 8
19 35 23 38 6
18 36 25 39 4
19 33 25 40 2
20 35 24 42 15
18 34 26 42 13
18 32 18 43 16
15 32 19 41 20
18 33 16 38 14
19 33 17 39 14
15 34 19 35 13
19 35 19 30 12
19 34 26 32 16
17 31 25 33 15
18 30 20 36 15
16 30 20 34 17
Hacemos la grafica para estas ciudades.
>> temperatura=[21 33 12 33 5
112
22 32 14 33 6
23 33 15 35 5
21 33 16 39 6
22 34 20 38 4
23 32 15 39 5
22 32 18 40 2
21 33 18 45 5
22 35 16 45 15
20 35 16 42 12
20 36 15 40 14
21 36 14 41 16
22 34 21 39 23
21 33 12 37 5
21 33 13 38 8
19 35 23 38 6
18 36 25 39 4
19 33 25 40 2
20 35 24 42 15
18 34 26 42 13
18 32 18 43 16
15 32 19 41 20
18 33 16 38 14
19 33 17 39 14
15 34 19 35 13
19 35 19 30 12
19 34 26 32 16
17 31 25 33 15
18 30 20 36 15
16 30 20 34 17]
>> plot(temperatura),title('TEMPERATURA
DIARIA'),xlabel('DIAS'),ylabel('TEMPERATURA'),grid
113
Se puede obtener informacin adicional ( promedio de temperaturas: mean(),
temperatura mxima para cada ciudad: max(), temperatura mnima para cadea
ciudad: min(), mediana de temperaturas: median(), desviacin estndar: std()), a
partir de estos datos de la siguiente manera:
>> temp_media=mean(temperatura)
temp_media =
19.6667 33.3667 18.5667 38.2000 10.7667
>> temp_maxima=max(temperatura)
temp_maxima =
23 36 26 45 23
114
>> temp_minima=min(temperatura)
temp_minima =
15 30 12 30 2
>> temp_mediana=median(temperatura)
temp_mediana =
20.0000 33.0000 18.0000 39.0000 12.5000
>> desviacion_estandar=std(temperatura)
desviacion_estandar =
2.2024 1.6078 4.2482 3.8002 5.7517
>> varianza=(std(temperatura)).^2
varianza =
4.8506 2.5851 18.0471 14.4414 33.0816
Adems se pueden obtener algunas graficas bsicas como las siguientes:
a) histograma
>> hist(temperatura)
115
b) diagrama de barras
>> bar(temperatura)
c) diagrama de barras horizontal
>> barh(temperatura)
d) grafico de barras en tres dimensiones
>> bar3(temperatura)
116
e) grafico de barras horizontal en tres dimensiones
>> bar3h(temperatura)
f) grafico circular
>> pie(temperatura)
117
g) grafico de pastel
>> pie3(temperatura)
h) grafico de area
118
>> area(temperatura)
i) diagrama de cajas
>> boxplot(temperatura)
119
4.4 FUNCIONES DEFINIDAS POR EL USUARIO
Los ficheros con extensin (.m) son ficheros de texto sin formato (ficheros ASCII)
que constituyen el centro de la programacin en Matlab. Ya se han utilizado en
varias ocasiones. Estos ficheros se crean y modifican con un editor de textos
cualquiera. En el caso de Matlab ejecutado en una computadora con Windows, lo
mejor es utilizar su propio editor de textos, que es tambin Debugger.
Existen dos tipos de ficheros *.m, los ficheros de comandos (llamados scripts en
ingles) y las funciones. Los primeros contienen simplemente un conjunto de
comandos que se ejecutan sucesivamente cuando se teclea el nombre del fichero
en la lnea de comandos de Matlab o se incluye dicho nombre en otro fichero *.m.
un fichero de comandos puede llamar a otros ficheros de comandos. Si un fichero
de comandos se llama desde la lnea de comandos de Matlab, las variables que
se crean pertenecen al espacio de trabajo base de Matlab y permanecen en l
cuando se termina la ejecucin de dicho fichero.
Las funciones permiten definir funciones enteramente anlogas a las de Matlab,
con su nombre, sus argumentos y sus valores de retorno. Los ficheros *.m que
definen funciones permiten extender las posibilidades de Matlab; de hecho existen
bibliotecas de ficheros *.m que se venden (toolkits) o se distribuyen gratuitamente
(a travs de internet). Las funciones definidas en ficheros *.m se caracterizan
porque la primera lnea (que no sea un comentario) comienzan por la palabra
reservada function, seguida por los valores de retorno (entre corchetes [ ] y
separados por comas, si hay ms de uno), el signo igual (=) y el nombre de la
funcin, seguido de los argumentos (entre parntesis y separados por comas).
Recurdese que un fichero *.m puede llamar a otros ficheros e incluso puede
llamarse a s mismo de forma recursiva. Los ficheros de comandos se pueden
llamar tambin desde funciones, en cuyo caso las variables que se crean
pertenecen al espacio de trabajo de la funcin, el espacio de trabajo de una
funcin es independiente del espacio de trabajo base y del espacio de trabajo de
las dems funciones. Esto implica por ejemplo que no puede haber colisiones
entre nombres de variables; aunque varias funciones tengan una variable llamada
A, en realidad se trata de variables completamente distintas (a no ser que A haya
sido declarada como variable global).
DEFINICION DE FUNCIONES
La primera lnea de un fichero llamado name.m que define una funcin tiene la
forma:
function [lista de valores de retorno]=name(lista de argumentos)
Donde name es el nombre de la funcin. Entre corchetes y separado por comas
van los valores de retorno (simpre que haya ms de uno), y entre parntesis
120
tambin separados por comas los argumentos. Puede haber funciones sin valor de
retorno y tambin sin argumentos. Recurdese que los argumentos son los datos
de la funcin y los valores de retorno son sus resultados, si no hay valores de
retorno se omiten los corchetes y el signo igual (=); si solo hay un valor de retorno
no hace falta poner los corchetes. Tampoco hace falta poner los parntesis si no
hay argumentos.
Una diferencia con C++ y Java es que en Matlab una funcin no puede modificar
nunca los argumentos que recibe, de cara al entorno que ha realizado la llamada,
los resultados de una funcin de Matlab se obtienen siempre atreves de los
valores de retorno, que pueden ser mltiples y matriciales. Tanto en nmero de
argumentos como el nmero de valores de retorno no tienen que ser fijos,
dependiendo de cmo el usuario llama a la funcin.
Las variables definidas dentro de una funcin son variables locales, en el sentido
de que son inaccesibles desde otras partes del programa y en el de que no
pueden interferir con variables del mismo nombre definidas en otras funciones o
partes del programa. Se puede decir que pertenecen al propio espacio de trabajo
de la funcin y no son vistas desde otros espacios de trabajo. Para que la funcin
tenga acceso a variables que no han sido pasadas como argumentos es necesario
declarar dichas variables como variables globales, tanto en el programa principal
como en las distintas funciones que deben acceder a su valor. Es frecuente utilizar
el convenio de usar para las variables globales nombres largos (ms de 5 letras) y
con maysculas.
Por razones de eficiencia, los argumentos que recibe una funcin de Matlab no se
copian a variables locales si no son modificados por dicha funcin (en trminos de
c++ se dira que pasan por referencia). Esto tiene importantes consecuencias en
trminos de eficiencia y ahorro de tiempo de clculo, sin embargo, si dentro de la
funcin se realizan modificaciones sobre los argumentos recibidos, antes se sacan
copias de dichos argumentos a variables locales y se modifican las copias.
La ejecucin de una funcin termina cuando se llega a su ltima sentencia
ejecutable. Si se quiere forzar el que una funcin termine de ejecutarse se puede
utilizar la sentencia return, que devuelve inmediatamente el control al entorno de
llamada.
Ejemplos de funciones:
1. funcin en Matlab que recibe como argumento un numero y regresa la suma de
los primeros n enteros.
function y=suma(n)
suma=0;
for i=1:n
suma=suma+i;
end
121
y=suma;
2. Hacer una funcin en Matlab para calcular el factorial de un nmero.
function y=factorizando(n)
f=1;
for i=1:n
f=f*i;
end
y=f;
3. Hacer una funcin en Matlab que detecte si un numero es par o es impar.
function x=par(n)
if rem(n,2)==0
disp('el numero es par')
else
disp('el numero es impar')
end
4. Hacer una funcin que detecte si un numero es primo o no lo es.
function p=primo(x)
primo=1;
for i=2:x-1
if rem(x,i)==0;
primo=0;
end
end
if primo==1
disp('el numero es primo')
else
disp('el numero no es primo')
end
5. Hacer una funcin que analice dos nmeros y me diga cual es el mayor de
ellos
function m=mayor(a,b)
if a>b
m=a;
else
m=b;
end
6. Hacer una funcin que me diga si un numero es primo o no.
122
function p=primo1(x)
c=0;
for d=1:x
if mod(x,d)==0
c=c+1;
end
end
if c==2
disp('el numero es primo')
else
disp('el numero no es primo')
end
7. Hacer una funcin en Matlab que calcule el promedio de una serie de datos
numricos.
function y=media(x)
[m,n]=size(x);
if m==1
m=n;
end
y=sum(x)/m;
8. Hacer una funcin que me diga cuales son los nmeros primos que hay entre
el 1 y un numero dado por el usuario.
function y=cualprimo(x)
r=0;
w=[];
for m=2:x-1
control=0;
for n=2:m-1
if m/n-floor(m/n)==0
control=1;
break
end
end
if control==0
r=r+1;
w(r)=m;
end
end
w
9. Hacer una funcin en Matlab para hallar las races de una ecuacin de
segundo grado por medio de la formula general.
123
function x=cuadratica(a,b,c)
if (b^2-4*a*c)<0
disp('RAICES IMAGINARIAS ')
else
x1=(-b+(b^2-4*a*c))/(2*a);
x=(-b-(b^2-4*a*c))/(2*a);
fprintf('X1=%f:\n',x1)
fprintf('X2=%f\n',x2)
end
124
Algebra Lineal
5.1 Definicin de Matrices.
En matemticas, una matriz es una tabla bidimensional de nmeros consistente en
cantidades abstractas que pueden sumarse, multiplicarse, restarse, elevarse a una
potencia, etc. Las matrices se utilizan para describir sistemas de ecuaciones
lineales, realizar un seguimiento de los coeficientes de una aplicacin lineal y
registrar los datos que dependen de varios parmetros. Las matrices se describen
en el campo de la teora de matrices, pueden sumarse, restarse, multiplicarse y
descomponer en varias formas, lo que tambin las hace un concepto clave en el
campo del algebra lineal.
Una matriz es una tabla cuadrada o rectangular de datos (llamados elementos o
entradas de la matriz) ordenados en filas y columnas en cada una de las lneas
verticales. A una matriz con m filas y n columnas se le denomina matriz m por
n (escrito m x n), y a m y n dimensiones de la matriz. Las dimensiones de una
matriz siempre se dan con el nmero de filas primero y el nmero de columnas
despus.
Comnmente se dice que una matriz m por n tiene orden de m x n (orden tiene el
significado de tamao). Dos matrices se dice que son iguales si son del mismo
orden y tienen los mismos elementos.
Al elemento de una matriz que se encuentra en la fila i-esima y la columna j-
esima se le llama elemento i,j o elemento (i,j)-esimo de la matriz. Se vuelve a
poner primero las filas y despus las columnas.
Casi siempre, se denotan a las matrices con letras maysculas mientras que se
utilizan las correspondientes letras en minsculas para denotar los elementos de
las mismas. Por ejemplo, al elemento de una matriz A que se encuentra en la fila
i-esima y la columna j-esima se le denota como aij. Adems de utilizar letras
maysculas para representar matrices, numerosos autores representan a las
matrices con fuente negrita para distinguirlas de otros tipos de variables. Asi A es
una matriz, mientras que A es un escalar (numero)
Normalmente se escribe
mxn ij
a A ) ( =
para definir una matriz A mxn con cada
entrada en la matriz A[ij] llamada
ij
a para todo n j y m i s s s s 1 1 . Sin embargo,
la convencin del inicio de los ndices i y j en 1 no es universal: algunos lenguajes
de programacin comienzan en cero, en cual caso se tiene
1 0 1 0 s s s s n j y m i .
5
125
Una matriz con una sola columna o con una sola fila se denomina a menudo
vector, y se interpreta como un elemento del espacio eucldeo. Una matriz 1xn
(una fila y n columnas) se denomina vector fila, y una matriz mx1 (una columna y
m filas) se denomina vector columna.
Ya se ha comentado que MATLAB es fundamentalmente un programa para
clculo matricial. Inicialmente se utilizar MATLAB como programa interactivo, en
el que se irn definiendo las matrices, los vectores y las expresiones que los
combinan y obteniendo los resultados sobre la marcha. Si estos resultados son
asignados a otras variables, entonces podrn ser utilizados posteriormente en
otras expresiones. En este sentido MATLAB sera como una potente calculadora
matricial (en realidad es esto y mucho mas).
Antes de tratar de hacer clculos complicados, la primera tarea ser aprender a
introducir matrices y vectores desde el teclado. Ms adelante se vern formas ms
potentes de definir matrices y vectores.
5.2 Definicin de matrices desde el teclado
Como en casi todos los lenguajes de programacin, en MATLAB las matrices y
vectores son variables que tienen nombres. Ya se vern luego con ms detalle las
reglas que deben cumplir estos nombres. Por el momento se sugiere que se
utilicen letras maysculas para las matrices y letras minsculas para los vectores y
escalares (MATLAB no exige esto pero puede resultar de mucha utilidad)
Para definir una matriz no hace falta declararla o establecer de antemano su
tamao (de hecho, se puede definir un tamao y cambiarlo posteriormente).
MATLAB determina el nmero de filas y de columnas en funcin del nmero de
elementos que se proporcionan. Las matrices se definen o introducen por filas; los
elementos de una misma fila estn separados por espacios en blanco o comas,
mientras que las filas estn separadas por pulsaciones de enter o por caracteres
punto y coma (;). Por ejemplo, el siguiente comando define una matriz A de
dimensiones (3 x 3):
>> A=[1 2 3;4 5 6;7 8 9]
La respuesta de MATLAB es la siguiente
A=
126
1 2 3
4 5 6
7 8 9
A partir de este momento la matriz A est disponible para hacer cualquier tipo de
operacin con ella (adems de valores numricos, en la definicin de una matriz o
vector se pueden utilizar expresiones y funciones matemticas). Por ejemplo, una
sencilla operacin con A es hallar su matriz traspuesta. En MATLAB el apostrofe
() es el smbolo de transposicin matricial. Para calcular A (traspuesta de A)
basta teclear lo siguiente (se aade a continuacin la respuesta del programa)
>>A
ans=
1 4 7
2 5 8
3 6 9
Como el resultado de la operacin no ha sido asignado a ninguna matriz,
MATLAB utiliza un nombre de variable por defecto (ans, de answer), que contiene
el resultado de la ltima operacin. La variable ans puede ser utilizada como
operando en la siguiente expresin que se introduzca. Tambin podr haberse
asignado el resultado a otra matriz llamada B:
>> B=A
B=
1 4 7
2 5 8
3 6 9
Ahora ya estn definidas las matrices A y B, y es posible seguir operando con
ellas. Por ejemplo, se puede hacer el producto de la matriz A por la matriz B de la
siguiente manera B*A (deber resultar una matriz simtrica)
>>B*A
ans
66 78 90
78 93 108
90 108 126
127
En MATLAB se accede a los elementos de un vector poniendo el ndice entre
parntesis (por ejemplo x(3) ox(i)). Los elementos de las matrices se acceden
poniendo los dos ndices entre parntesis separados por una coma (por ejemplo
A(1,2) oA(i,j)). Las matrices se almacenan por columnas (aunque se produzcan
por filas, como se ha indicado anteriormente), y teniendo en cuenta esto puede
accederse a cualquier elemento de una matriz con un solo subndice. Por ejemplo,
si A es una matriz (3 x 3) se obtiene el mismo valor escribiendo A(1,2) que
escribiendo A(4).
Invertir una matriz es casi tan fcil como transponerla. A continuacin se va a
definir una nueva matriz A (no singular) en la forma:
>>A=[1 4 -3;2 1 5;-2 5 3]
A=
1 4 -3
2 1 5
-2 5 3
Ahora calculemos la inversa de la matriz A y el resultado lo asignaremos a B. para
ello basta con hacer uso de la funcin propia de MATLAB inv() que es la funcin
que nos ayuda a encontrar la inversa de una matriz no singular. (la precisin o
numero de cifras que se muestran en el resultado se puede cambiar con el men
File/Preferences/General):
>>B=inv(a)
B=
0.1803 0.2213 -0.1885
0.1311 0.0246 0.0902
-0.0984 0.1066 0.0574
Para comprobar que este resultado es correcto basta con multiplicar A por B y
comprobar que el resultado es la matriz identidad.
>>B*A
ans
1.0000 0.0000 0.0000
0.0000 1.0000 0.0000
0.0000 0.0000 1.0000
128
De forma anloga a las matrices, es posible definir un vector fila x en la forma
siguiente (si los nmeros estn separados por blancos o comas, el resultado ser
un vector fila)
>>x=[10 20 30] % vector fila
x=
10 20 30
Por el contrario, si los nmeros estn separados por enter o punto y coma (;) se
obtendr un vector columna:
>>y=[11; 12; 13] % vector columna
y=
11
12
13
MATLAB tiene en cuenta la diferencia entre vectores fila y vectores columna. Por
ejemplo, si se intenta sumar los vectores x e y se obtendr el siguiente mensaje
de error
>>x+y
??? Error using ==> +
Matrix dimensions must agree.
Estas dificultades desaparecen si se suma x con el vector traspuesto de y:
>>x+y
ans
21 32 43
MATLAB considera vectores fila por defecto, como se ve en el ejemplo siguiente:
>>x(1)=1, x(2)=2
x=
1
x=
1 2
A continuacin se van a estudiar estos temas con un poco ms de detalles.
129
5.3 Operaciones con Matrices
5.3.1 Operadores Aritmticos
MATLAB puede operar con matrices por medio de operadores y por medio de
funciones. Se han visto ya los operadores suma (+), producto (*) y traspuesta (),
as como la funcin para invertir una matriz (inv()). Los operadores matriciales de
MATLAB son los siguientes:
+ Suma o adicin
- resta o sustraccin
* Multiplicacin
traspuesta
^ Potenciacin
\ Divisin izquierda
/ Divisin derecha
.* Producto elemento a elemento
./ y .\ divisin elemento a elemento
.^ Elevar a una potencia elemento a elemento
Estos operadores se aplican tambin a las variables o valores escalares, aunque
con algunas diferencias mnimas. Todos estos operadores son coherentes con las
correspondientes operaciones matriciales: no se puede por ejemplo sumar
matrices que no sean del mismo tamao. Si los operadores no se usan de modo
correcto se obtiene un mensaje de error.
Los operadores anteriores se pueden aplicar tambin de modo mixto, es decir con
un operador escalar y otro matricial. En este caso la operacin con el escalar se
aplica a cada uno de los elementos de la matriz.
Considrese el siguiente ejemplo:
>>A=[1 2; 3 4]
A=
1 2
2 4
>>A*2
ans=
3 4
130
6 8
>>A-4
ans
-3 -2
-1 0
MATLAB utiliza el operador de divisin / para dividir por un escalar todos los
elementos de una matriz o un vector. Esto no constituye ninguna sorpresa. Sin
embargo, el uso que se describe a continuacin si requiere de ms atencin.
2.3.2 Operadores para la resolucin de Sistemas de Ecuaciones
Lineales
MATLAB utiliza los operadores de divisin para la resolucin de sistemas de
ecuaciones lineales. Por su gran importancia, estos operadores requieren una
explicacin detenida. Considrese el siguiente sistema de ecuaciones lineales.
Ax=b
Donde x y b son vectores columna, y A una matriz cuadrada no singular
(invertible). La resolucin de este sistema de ecuaciones se puede escribir en las
2 formas siguientes ( atencin a la segunda forma que esta basada en la barra
invertida \, que por dems no es tan usada !):
x=inv(A)*b
x=A\b
As pues, el operador divisin izquierda por una matriz (barra invertida \) equivales
a multiplicar por la inversa de esa matriz. En realidad este operador es ms
general y ms inteligente de lo que aparece en el ejemplo anterior: el operador
divisin izquierda es aplicable aunque la matriz no tenga inversa e incluso no sea
cuadrada, en cuyo caso la solucin que se obtiene (por lo general) es la que
proporciona el mtodo de los mnimos cuadrados. Cuando la matriz es triangular o
simtrica aprovecha esta circunstancia para reducir el numero de operaciones
aritmticas. En algunos casos se obtiene una solucin con no ms de r
elementos distintos de cero, siendo r el rango de la matriz. Esto puede estar
basado en que la matriz se reduce a forma de escaln y se resuelve el sistema
dando valor cero a las variables libres o independientes. Por ejemplo, considrese
lo siguiente.
Tenemos una matriz de tamao (1 x 2) que conduce a un sistema de infinitas
soluciones:
131
>> A=[1 2], b=[2]
A =
1 2
b =
2
>> x=A\b
x =
0
1
Esta es la solucin obtenida dando el valor de cero a la variable independiente
x(1). Por otra parte, en el caso de un sistema de ecuaciones redundante ( o sobre
determinado) el resultado de MATLAB es el punto ms cercano en el sentido de
mnima norma del error a las ecuaciones dadas (aunque no cumpla exactamente
ninguna de ellas).
Veamos el siguiente ejemplo de tres ecuaciones formadas por una recta que no
pasa por el origen y los dos ejes coordenados:
>> A=[1 2;1 0;0 1], b=[2 0 0]'
A =
1 2
1 0
0 1
b =
2
0
0
>> x=A\b, resto=A*x-b
x =
0.3333
132
0.6667
resto =
-0.3333
0.3333
0.6667
Si la matriz es singular o est muy mal escalada, el operador \ da un aviso
(warning), pero proporciona una solucin.
La inteligencia del operador barra invertida \ tiene un costo: MATLAB debe
emplear cierto tiempo en determinar las caractersticas de la matriz. Triangular,
simtrica, etc. Si el usuario conoce perfectamente y con seguridad las
caractersticas de la matriz del sistema, lo mejor es utilizar la funcin linsolve, que
no realiza ninguna comprobacin y puede obtener la mxima eficiencia.
Aunque no es una forma demasiado habitual, tambin se puede escribir un
sistema de ecuaciones lineales en la forma correspondiente a traspuesta de la
ecuacin
Ax=b
yB=c
Donde y y c son vectores fila (c conocido). Si la matriz B es cuadrada e invertible,
la solucin de este sistema se puede escribir en la forma siguiente:
y=c*inv(B)
y=c/B
En este caso, el operador divisin derecha por una matriz equivale a
postmultiplicar por la inversa de la matriz. Si se traspone la ecuacin yB=c y se
halla la solucin aplicando el operador divisin izquierda se obtiene
y=(B)\c
Comprobando las expresiones y=c*inv(B) y y=c/B se obtiene la relacin entre los
operadores divisin izquierda y divisin derecha (MATLAB solo tiene
implementado el operador divisin izquierda):
c/B=((B)\c)
133
5.3.3 Operadores elemento a elemento
En MATLAB existe tambin la posibilidad de aplicar elemento a elemento los
operadores matriciales. Para ello basta precederlos por un punto (.). Veamos un
ejemplo de ello.
>> [1 2 3 4]^2
??? Error using ==> mpower
Matrix must be square.
Esto mismo hecho de otra manera
>> [1 2 3 4].^2
ans =
1 4 9 16
Observemos que cuando le anteponemos un punto antes de elevar una potencia,
entonces si hace la funcin que nosotros esperamos (la de elevar todos y cada
uno de los elementos de la matriz a la potencia sealada).
Veamos uno mas:
>> [1 2 3 4]*[1 -1 1 -1]
??? Error using ==> mtimes
Inner matrix dimensions must agree.
hecho de otra manera
>> [1 2 3 4].*[1 -1 1 -1]
ans =
1 -2 3 -4
Ahora si obtenemos el resultado esperado.
5.4 Tipos de Datos
MATLAB es un programa preparado para trabajar con vectores y matrices. Como
caso particular tambin trabaja con variables escalares (matrices de dimensin 1).
MATLAB trabaja siempre con la modalidad de doble precisin, es decir guardando
cada dato en 8 bytes, con unas 15 cifras significativas. Ms delante veremos que
134
tambin puede trabajar con cadenas de caracteres (strings) y, desde la versin 5.0
tambin con otros tipos de datos: matrices de ms de dos dimensiones, matrices
dispersas, vectores y matrices de celdas, estructuras, clases y objetos.
5.4.1 Nmeros reales de doble precisin
Los elementos constitutivos de vectores y matrices son nmeros reales
almacenados en 8 bytes (53 bits para la mantisa y 11 para el exponente de 2;
entre 15 y 16 cifras decimales equivalentes). Es importante saber como trabaja
MATLAB con estos nmeros y los casos especiales que presentan
MATLAB mantiene una forma especial para los nmeros muy grandes (mas
grandes que los que es capaz de representar), que son considerados como
infinito. Por ejemplo, observemos como responde el programa al ejecutar el
siguiente comando.
>> 1.0/0.0
ans =
Inf
Asi pues, para MATLAB el infinito se representa como inf. Tambien tiene una
representacin especial para los resultados que estn definidos como nmeros.
Veamos los siguientes ejemplos:
>> 0/0
ans =
NaN
>> inf/inf
ans =
NaN
En ambos casos la respuesta es NaN, que es la abreviatura de Not a Number.
Este tipo de respuesta, as como la de inf, son enormemente importantes en
MATLAB, pues permite controlar la fiabilidad de los resultados de los clculos
matriciales. Los NaN se propagan al realizar con ellos cualquier operacin
aritmtica, en el sentido de que , por ejemplo, cualquier nmero sumado a un NaN
da como resultado otro NaN. MATLAB tiene esto en cuenta siempre.
135
El programa dispone de tres funciones tiles relacionadas con las operaciones de
coma flotante. Estas funciones, que no tienen argumentos, son las siguientes:
eps devuelve la diferencia entre 1.0 y el nmero de coma flotante
inmediatamente superior. Da una idea de la precisin o numero de cifras
almacenadas, esta tiene un valor aproximado de 2.2201E0-016 (numero
extremadamente pequeo)
realmin devuelve el nmero mas pequeo con que se puede trabajar
(2.2251E-308)
realmax devuelve el nmero ms grande con que se puede trabajar
(1.7977E+308)
5.4.2 Otros tipos de variables: Integer, Float y Logical
Como ya se ha comentado, por defecto MATLAB trabaja con variables de punto
flotante y doble precisin (doubl). Con estas variables pueden resolverse casi
todos los problemas prcticos y con frecuencia no es necesario complicarse la
vida declarando variables de tipos distintos, como se hace con cualquier otro
lenguaje de programacin. Sin embargo, en algunos casos es conveniente
declarar variables de otros tipos por que puede ahorrarse mucha memoria y
pueden hacerse los clculos mucho ms rpidos.
MATLAB permite crear variables enteras con 1, 2, 4 y 8 bytes. A su vez, estas
variables pueden tener signo o no tenerlo. Las variables con signo representan
nmeros en intervalos casi simtricos respecto al cero; las variables sin signo
representan nmeros no negativos, desde el cero hasta el nmero mximo.
Los tipos de los enteros con signo son int8, int16, int32 e int64, y sin signo uint8,
uint116, uint34 y uint64. Para crear una variable entera de un tipo determinado
se pueden utilizar sentencias como las siguientes:
>> i=int32(100);
% se crea un entero de 4 bytes con valor 100
>> j=zeros(100); i=int32(j);
% se crea un entero i a partir de j
>> i=zeros(1000,1000,'int32');
% se crea una matriz 1000 x 1000 de enteros
Las funciones intmin(int64) e intmax(int64) permiten por ejemplo saber el
valor del entero ms pequeo y mas grande (en valor algebraico) que puede
formarse con variables enteras de 64 bits:
136
>> disp([intmin('int64'),intmax('int64')])
-9223372036854775808 9223372036854775807
La funcin isinteger(i) devuelve 1 si la variable i es entera y 0 en otro caso. La
funcin class(i) devuelve el tipo de variable que es i (int8, int16,), mientras que
la funcin isa(i,int16) permite saber exactamente si la variable i corresponde a
un entero de 16 bits.
MATLAB dispone de dos tipos de variables reales o float: single y doubl, que
ocupan respectivamente4 y 8 bytes. Por defecto se utilizan doubles. Las
funciones single(x) y double(y) permiten realizar conversiones entre ambos tipos
de variables.
Las funciones realmin y realmax permiten saber los nmeros double ms
pequeo y ms grande (en valor absoluto) que admite la computadora. Para los
correspondientes nmeros de simple precisin habr que utilizar realmin(single)
y realmax(single). La funcin isfloat(x) perimite saber si x es una variable real,
de simple o doble precisin. Para saber exactamente de que tipo de variable se
trata se pueden utilizar las funciones isa(x,single) oisa(x,double). Observese
el ejemplo siguiente, en el que se ve como con variables single se reduce el
tiempo de CPU y la memoria:
>> n=1000; AA=rand(n);A=single(AA);
>> tic, Bs=inv(A); toc
elapsed time is 0.628994 seconds.
>> tic, Bd=inv(AA); toc
elapsed time is 0.506865 seconds.
Quizs las variables ms interesantes -aparte de las variables por defecto, las
doubl- sean las variables logical, que solo pueden tomar dos los valores true(1)
y false(0). Las variables lgicas surgen como resultado de los operadores
relacionales (==, <, >, >=, >=, ~=) y de muchas funciones lgicas como any y all
que se aplican a vectores y matrices.
La funcin logical(A) produce una variable lgica con el mismo nmero de
elementos que A, con valores de 1 o 0 segn el correspondiente elemento de A.
Una de las aplicaciones ms importantes de las variables lgicas es para separar
o extraer los elementos de una matriz o vector que cumplan cierta condicin, y
operar luego selectivamente sobre dichos elementos. Obsrvese el siguiente
ejemplo.
>> A=magic(4)
A =
16 2 3 13
137
5 11 10 8
9 7 6 12
4 14 15 1
>> j=A>10
j =
1 0 0 1
0 1 0 0
0 0 0 1
0 1 1 0
>> isa(j,'logical')
ans =
1
>> A(j)=-10
A =
-10 2 3 -10
5 -10 10 8
9 7 6 -10
4 -10 -10 1
5.4.3 Nmeros complejos: Funcin complex
En muchos clculos matriciales los datos y/o los resultados no son reales sino
complejos, con parte real y parte imaginaria. MATLAB trabaja sin ninguna
dificultad con nmeros de esta naturaleza. Para ver como se representan por
defecto los nmeros complejos, ejecutaremos la siguiente sentencia:
>> a=sqrt(-4)
a =
0 + 2.0000i
>> 3+4j
138
ans =
3.00 + 4.0000i
En la entrada de datos de MATLAB se pueden utilizar indistintamente la i y la j
para representar el nmero imaginario unidad (en la salida, sin embargo, puede
verse que siempre aparece la i). si la i o la j no estn definidas como variables,
puede intercalarse el signo (*). Esto no es posible en el caso de que si estn
definidas, por que entonces se utiliza el valor de la variable. En general, cuando se
esta trabajando con nmeros complejos, conviene no utilizar la i como variable
ordinaria, pues puede dar lugar a errores y confusiones. Observemos los
siguientes resultados a manera de ejemplo:
>> i=2
i =
2
>> 2+3i
ans =
2.0000 + 3.0000i
>> 2+3*i
ans =
8
>> 2+3*j
ans =
2.0000 + 3.0000i
Cuando i y j son variables utilizadas para otras finalidades, como unidad
imaginaria puede utilizarse tambin la funcin sqrt(-1), o una variable a la que se
haya asignado el resultado de esta funcin.
La asignacin de valores complejos a vectores y matrices desde el teclado puede
hacerse de las dos formas, que se muestran en el ejemplo siguiente (conviene
hacer antes la funcin clear i, para que i no est en definida como variable; este
comando limpia la variable en uso):
>> A=[1+2i 2+3i; -1+i 2-3i]
139
A =
1.0000 + 2.0000i 2.0000 + 3.0000i
-1.0000 + 1.0000i 2.0000 - 3.0000i
>> A=[1 2;-1 2]+[2 3;1 -3]*A
A =
0 + 7.0000i 12.0000 - 3.0000i
3.0000 - 1.0000i -2.0000 +12.0000i
Puede verse que es posible definir las partes reales e imaginarias por separado.
En este caso si es necesario utilizar el operador (*), segn se muestra en el
ejemplo.
MATLAB dispone asimismo de la funcin complex, que crea un nmero complejo
a partir de dos argumentos que representan la parte real e imaginaria.
>> complex(1,2)
ans =
1.00 + 2.0000i
Es importante advertir que el operador de matriz traspuesta (), aplicado a matrices
complejas, produce la matriz conjugada y traspuesta. Existe una funcin que
permite hallar la matriz conjugada (conj()) y el operador punto y apostrofe (.) que
calcula simplemente la matriz traspuesta.
5.4.4 Cadenas de caracteres
MATLAB puede definir variables que contengan cadenas de caracteres, las
cadenas de texto van entre apostrofes o comillas simplemente
s=esta es una cadena de caracteres
5.5 Variables y expresiones Matriciales
140
Una variable es un nombre que se da a cada entidad numrica que puede ser una
matriz, un vector o un escalar. El valor de esta variable es incluso el tipo de
entidad numrica que representa, puede cambiar a lo largo de una sesin de
MATLAB o a lo largo de la ejecucin de un programa. La forma mas normal de
cambiar el valor de una variable es colocndola a la izquierda del operador de
asignacin (=)
Una expresin de MATLAB puede tener las dos formas siguientes: primero,
asignando su resultado a una variable
Variable = expresin
y segundo evaluando simplemente el resultado del siguiente modo
Expresin
en cuyo caso el resultado se asigna automticamente a una variable interna de
tipo temporal que se usa en MATLAB, llamada ans (answer) que almacena el
ltimo resultado obtenido. Se considera por defecto que una expresin termina
cuando se pulsa enter. Si se desea que una expresin contine en la lnea
siguiente, hay que introducir tres puntos () antes de pulsar el enter. Tambin se
pueden incluir varias expresiones en una misma lnea separndolas por comas (,)
o puntos y comas (;).
Si una expresin termina en punto y coma (;) su resultado se calcula, pero no se
escribe en la pantalla. Esta posibilidad es muy importante, tanto para evitar la
escritura de resultados intermedios, como para evitar la impresin de grandes
cantidades de nmeros cuando se trabaja con matrices de gran tamao.
A semejanza de C, MATLAB distingue entre maysculas y minsculas en los
nombres de variables. Los nombres de variables debern empezar siempre con
una letra y pueden constar de hasta 63 letras y nmeros. La funcin
namelengthmax permite preguntar al programa por este nmero mximo de
caracteres. El carcter guion bajo (_) se considera como una letra. A diferencia del
lenguaje C, no hace falta declarar las variables que se vayan a utilizar. Esto hace
que se deba tener especial cuidado con no utilizar nombres errneos en las
variables, porque no se recibir ningn aviso de parte de MATLAB.
Cuando se quiere tener una relacin de las variables que se han utilizado en una
sesin de trabajo se pueden utilizar los comandos who o whos que proporcionan
una informacin detallada de las variables que se estn usando en la presente
sesin.
Esta informacin se puede obtener grficamente con el Workspace Browser, que
aparece con el comando View/Workspace o activando la ventana
correspondiente si estaba abierto.
El comando clear tiene varias formas posibles de funcionamiento:
141
clear sin argumentos, clear elimina todas las variables creadas previamente
(excepto las variables globales)
clear A,b borra las variables indicadas
clear global borra las variables globales
clear functions borra las funciones
clear all borra todas las variables, incluyendo las globales y las
funciones
5.6 Otras formas de definir Matrices.
MATLAB dispone de varias formas de definir matrices. El introducirlas por teclado
solo es prctico en casos de pequeo tamao y cuando no hay que repetir esa
operacin muchas veces. Recurdese que en MATLAB no hace falta definir el
tamao de una matriz, las matrices toman su tamao al ser definidas y ese
tamao puede ser modificado por el usuario mediante edicin y/o borrado de filas
y columnas. A continuacin se vern otras formas ms potentes y generales de
definir y modificar matrices.
5.6.1 Tipos de Matrices Predefinidas
Existen en MATLAB varias funciones orientadas a definir con gran facilidad
matrices de tipos particulares. Algunas de estas funciones son las siguientes:
eye(n) Forma la matriz identidad de tamao (n x n).
zeros(3,5) Forma una matriz de ceros de tamao (3 x 5).
zeros(n) dem de tamao (n x n).
ones(n) Forma una matriz de unos de tamao (n x n).
ones(2,4) Forma una matriz de unos de tamao (2 x 4).
linspace(x,y,n) Genera un vector con n valores igualmente
espaciados entre x e y.
logspace(a,b,n) Genera un vector con n valores espaciados
logartmicamente entre 10^a y 10^b.
rand(n) Forma una matriz de nmeros aleatorios entre 0 y
1, con distribucin uniforme de tamao (n x n).
rand(2,5) dem de tamao (2 x 5).
randn(n) Forma una matriz de nmeros aleatorios de tamao
(n x n), con distribucin normal, de valor medio 1 y
varianza 0.
magic(n) Crea una matriz (n x n) con los nmeros 1, 2,
,n*n, con la propiedad de que todas las filas y
columnas suman lo mismo.
hilb(n) Crea una matriz de Hilbert de tamao (n x n). la
142
matriz de Hilbert es una matriz cuyos elementos (i,j)
responden a la expresin (1/(i+j-1)). Esta es una
matriz especialmente difcil de manejar por los
grandes errores numricos a los que conduce.
Invhilb(n) Crea directamente la inversa de la matriz de Hilbert
kron(x,y) Produce una matriz con todos los productos de los
elementos del vector x por los elementos del vector
y equivalente a x*y, donde x e y son vectores fila.
compan(pol) Construye una matriz cuyo polinomio caracterstico
tiene como coeficientes los elementos del vector
pol (ordenados de mayor a menor grado).
vander(v) Construye la matriz de Vandermonde a partir del
vector v (las columnas son las potencias de los
elementos de dicho vector).
Existen otras funciones para crear matrices de tipos particulares. Usando el
comando Help/Matlab Help se puede obtener informacin sobre todas las
funciones disponibles en MATLAB, que aparecen agrupadas por categoras o por
orden alfabtico. En la categora Mathematics aparecen la mayor parte de las
funciones estudiadas en este apartado.
5.6.2 Formacin de una Matriz a partir de otras
MATLAB ofrece tambin la posibilidad de crear una matriz a partir de matrices
previas ya definidas por varios posibles caminos:
- Recibiendo alguna de sus propiedades (como por ejemplo el tamao)
- Por composicin de varias submatrices mas pequeas
- Modificndola de alguna forma.
A continuacin se describen algunas de las funciones que crean una nueva matriz
a partir de otra o de otras, comenzando por dos funciones auxiliares:
[m,n]=size(A) Devuelve el numero de filas y de columnas de la
matriz A. si la matriz es cuadrada basta recoger el
primer valor de retorno.
n=length(x) Calcula el nmero de elementos de un vector x
zeros(size(A)) Forma una matriz de ceros del mismo tamao que
una matriz A previamente creada.
ones(size(A)) dem con unos.
A=diag(A) Forma una matriz diagonal A cuyos elementos
diagonales son los elementos de un vector ya
143
existente x.
x=diag(A) Forma un vector x a partir de los elementos de la
diagonal de una matriz ya existente A.
diag(diag(A)) Crea una matriz diagonal a partir de la diagonal de
la matriz A.
blkdiag(A,B) Crea una matriz diagonal de submatrices a partir de
las matrices que se le pasan como argumentos.
triu(A) Forma una matriz triangular superior a partir de una
matriz A (no tiene por que ser cuadrada). Con un
segundo argumento puede controlarse que se
mantengan o eliminen las diagonales por encima o
debajo de la diagonal principal.
tril(A) dem con una matriz triangular inferior.
rot90(A,k) Gira k*90 grados la matriz rectangular A en sentido
contrario a las manecillas del reloj. K es un entero
que puede ser negativo. Si se omite se toma por
defecto k=1.
flipud(A) Halla la matriz simtrica de A respecto de un eje
horizontal.
fliplr(A) Halla la matriz simtrica de A respecto de un eje
vertical.
reshape(A.m.n) Cambia el tamao de la matriz A devolviendo una
matriz de tamao m x n cuyas columnas se
obtienen a partir de un vector formado por las
columnas de A puestas una a continuacin de la
otra. Si la matriz A tiene menos de m x n elementos
se produce un error.
Un caso especialmente interesante es el de crear una nueva matriz componiendo
como submatrices otras matrices definidas previamente. A modo de ejemplo,
ejecutemos las siguientes lneas de comandos observemos lo que sucede:
A=rand(3)
A =
0.8147 0.9134 0.2785
0.9058 0.6324 0.5469
0.1270 0.0975 0.9575
>> B=diag(diag(A))
B =
0.8147 0 0
144
0 0.6324 0
0 0 0.9575
>> C=[A, eye(3); zeros(3),B]
C =
0.8147 0.9134 0.2785 1.0000 0 0
0.9058 0.6324 0.5469 0 1.0000 0
0.1270 0.0975 0.9575 0 0 1.0000
0 0 0 0.8147 0 0
0 0 0 0 0.6324 0
0 0 0 0 0 0.9575
En el ejemplo anterior, la matriz C de tamao (6 x 6) se forma por composicin de
cuatro matrices de tamao (3 x 3). Al igual que con simples escalares, las
submatrices que forman una fila se separan con blancos o comas, mientras que
las diferentes filas se separan entre si con enter o puntos y comas. Los tamaos
de las submatrices deben de ser coherentes.
5.6.3 Direccionamiento de Vectores y Matrices a partir de Vectores
Los elementos de un vector x se pueden direccionar a partir de los de otro vector
v. en este caso, x(v) equivale al vector x(v(1)), x(v(2)),
Considrese el siguiente ejemplo:
>> v=[1 3 4]
v =
1 3 4
>> x=rand(1,6)
x =
0.9649 0.1576 0.9706 0.9572 0.4854 0.8003
>> x(v)
ans =
0.9649 0.9706 0.9572
145
De forma anloga, los elementos de una matriz A pueden direccionarse a partir de
los elementos de dos vectores f y c. (ver siguiente ejemplo)
>> f=[2 4]; c=[1 2];
>> A=magic(4)
A =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> A(f,c)
ans =
5 11
4 14
El siguiente ejemplo continuacin del anterior- permite comprobar como los
elementos de una matriz se pueden direccionar con un solo ndice, considerando
que las columnas de la matriz estn una a continuacin de otra formando un
vector:
>> f=[1 3 5 7];
>> A(f), A(5), A(6)
ans =
16 9 2 7
ans =
2
ans =
11
Esta forma de extraer elementos de un vector y/o de una matriz tiene abundantes
aplicaciones, por ejemplo la de modificar selectivamente esos elementos.
146
5.6.4 Operador dos Puntos
Este operador es muy importante en MATLAB y puede usarse de varias formas.
Veamos algunas:
Para empezar definiremos un vector x con el siguiente comando:
>> x=1:10
x =
1 2 3 4 5 6 7 8 9 10
En cierta forma se puede decir que el operador (:) representa un rango, en este
caso los nmeros enteros entre el 1 y el 10. Por defecto el incremento es 1, pero
este operador puede tambin utilizarse con otros valores enteros y reales,
positivos o negativos. En este caso el incremento se coloca entre el valor inferior
y el valor superior, en las formas que se muestra a continuacin:
>> x=1:2:10
x =
1 3 5 7 9
>> x=1:1.5:10
x =
1.0000 2.5000 4.0000 5.5000 7.0000 8.5000 10.0000
>> x=10:-1:1
x =
10 9 8 7 6 5 4 3 2 1
Puede verse que por defecto este operador produce vectores fila. Si se desea
obtener un vector columna basta con trasponer el resultado. El siguiente ejemplo
genera una tabla de funciones seno y coseno.
>> x=[0.0:pi/50:2*pi]';
>> y=sin(x); z=cos(x);
>> [x y z]
ans =
147
0 0 1.0000
0.0628 0.0628 0.9980
0.1257 0.1253 0.9921
0.1885 0.1874 0.9823
0.2513 0.2487 0.9686
.
.
.
6.1575 -0.1253 0.9921
6.2204 -0.0628 0.9980
6.2832 -0.0000 1.0000
El operador dos puntos (:) es an ms til y potente con matrices. A continuacin
se va a definir una matriz A de tamao (6 x 6) y despus se realizarn diversas
operaciones sobre ella con el operador (:).
>> A=magic(6)
A =
35 1 6 26 19 24
3 32 7 21 23 25
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13 18 11
Recurdese que MATLAB accede a los elementos de una matriz por medio de los
ndices de fila y de columna encerrados entre parntesis y separados por una
coma, por ejemplo:
>>A(2,3)
ans
7
El siguiente comando extrae los 4 primeros elementos de la sexta fila
>>A(6, 1:4)
Ans
148
4 36 29 13
Los dos puntos aislados representan todos los elementos. Por ejemplo, el
siguiente comando extrae todos los elementos de la tercera fila:
>> A(3,:)
ans =
31 9 2 22 27 20
Para acceder a la ultima fila o columna puede utilizar la palabra end, en lugar del
nmero correspondiente:
>> A(end,:)
ans =
4 36 29 13 18 11
El siguiente comando extrae todos los elementos de las filas 3, 4 y 5:
>> A(3:5,:)
ans =
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
Se pueden extraer conjuntos disjuntos de filas utilizando corchetes [ ]. Por
ejemplo, el siguiente comando extrae las filas 1 2 y 5:
>> A([1 2 5],:)
ans =
35 1 6 26 19 24
3 32 7 21 23 25
30 5 34 12 14 16
149
En los ejemplos anteriores se han extrado filas y no columnas por motivos de
espacio ocupado por el resultado, es evidente que todo lo que se dice para las
filas es tambin cierto para las columnas y viceversa, basta con cambiar el orden
de los ndices.
El operador dos puntos puede utilizarse en amos lados del operador (=). Por
ejemplo, a continuacin se va a definir una matriz identidad B de tamao 6 x 6 y se
van a reemplazar filas de B por filas de A. obsrvese que la siguiente secuencia
de comandos sustituye las filas 2, 4 y 5 de B por las filas 1, 2 y 3 de A
>> B=eye(size(A));
>> B([2,4,5],:)=A(1:3,:)
B =
1 0 0 0 0 0
35 1 6 26 19 24
0 0 1 0 0 0
3 32 7 21 23 25
31 9 2 22 27 20
0 0 0 0 0 1
Se pueden realizar operaciones an ms complicadas, tales como la siguiente:
>> B=eye(size(A));
>> B(1:2,:)=[0 1;1 0]*B(1:2,:)
B =
0 1 0 0 0 0
1 0 0 0 0 0
0 0 1 0 0 0
0 0 0 1 0 0
0 0 0 0 1 0
0 0 0 0 0 1
Otro ejemplo en el que vemos la forma de invertir el orden de los elementos de un
vector:
>> x=rand(1,5)
x =
150
0.1419 0.4218 0.9157 0.7922 0.9595
>> x=x(5:-1:1)
x =
0.9595 0.7922 0.9157 0.4218 0.1419
Observemos que por haber utilizado parntesis en lugar de corchetes los valores
generados por el operador (:) afectan a los ndices del vector y no al valor de sus
elementos
Para invertir el orden de las columnas de una matriz se puede hacer lo siguiente:
>> A=magic(6)
A =
35 1 6 26 19 24
3 32 7 21 23 25
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13 18 11
>> A(:,6:-1:1)
ans =
24 19 26 6 1 35
25 23 21 7 32 3
20 27 22 2 9 31
15 10 17 33 28 8
16 14 12 34 5 30
11 18 13 29 36 4
Aunque hubiera sido mas fcil utilizar la funcin fliplr(A), que es especifica para
ello.
Finalmente hay que mencionar que A(:) representa un vector columna con las
columnas de A una detrs de otra.
151
5.6.5 Matriz vaca A[ ]. Borrado de filas o columnas
Para MATLAB una matriz definida sin ningn elemento entre los corchetes es una
matriz que existe pero que esta vaca, o lo que es lo mismo que tiene dimensin
cero. Considrese los siguientes ejemplos de aplicaciones de las matrices vacas:
>> A=magic (3)
A =
8 1 6
3 5 7
4 9 2
>> B=[]
B =
[]
>> exist(B)
ans =
0
>> isempty(B)
ans =
1
>> A(:,3)=[]
A =
8 1
3 5
4 9
Las funciones exist() e isempty() permiten checar si una variable existe y si esta
vaca. En el ultimo ejemplo se ha eliminado la tercera columna de A asignndole
la matriz vaca.
152
5.6.6 Definicin de vectores y Matrices a partir de un archivo
MATLAB acepta como entrada un archivo nombre.m que contiene instrucciones
y/o funciones. Dicho archivo se llama desde la lnea de comandos tecleando
simplemente su nombre, sin la extensin. A su vez, un archivo puede llamar a
otros archivos .m e incluso puede llamarse as mismo (funciones recursivas). Las
variables definidas dentro de un archivo de comandos que se ejecuta desde la
lnea de comandos son variables del espacio de trabajo base, esto es, pueden ser
accedidas desde fuera de dicho archivo; no sucede lo mismo si el archivo .m
corresponde a una funcin. Si un archivo de comandos se llama desde una
funcin, las variables que se crean pertenecen al espacio de trabajo de dicha
funcin.
Como ejemplo se puede crear un archivo llamado unidad.m que construya una
matriz identidad de tamao 3 x 3 llamada u33 en un directorio llamado c:\matlab.
Este archivo deber contener la lnea siguiente:
U33=eye(3)
Desde MATLAB llmese al comando unidad y obsrvese el resultado. Entre otras
razones es muy importante utilizar archivos de comandos para poder utilizar el
Debugger y para evitar teclear muchas veces los mismos datos, sentencias o
expresiones.
5.7 Operadores relacionales.
El lenguaje de programacin de MATLAB dispone de los siguientes operadores
relacionales:
< menor que
> mayor que
<= menor o igual que
>= mayor o igual que
== igual que
~= diferente que
Obsrvese que, salvo el ltimo de ellos, coinciden con los correspondientes
operadores relacionales del lenguaje C. sin embargo, sta es una coincidencia
mas bien formal. En MATLAB los operadores relacionales pueden aplicarse a
vectores y matrices, y eso hace que tengan un significado especial.
Al igual que en otros lenguajes de programacin, si una comparacin se cumple el
resultado es 1 (true), mientras que si no se cumple es 0 (false), recprocamente,
153
cualquier valor distinto de cero es considerado como true y el cero equivale a
false. La diferencia con C est en que cuando los operadores relacionales de
MATLAB se aplican a dos matrices o vectores del mismo tamao, la comparacin
se realiza elemento a elemento, y el resultado es otra matriz de unos y ceros del
mismo tamao, que recoge el resultado de cada comparacin entre elementos.
Consideremos el siguiente ejemplo como ilustracin de lo que se acaba de decir:
>> A=[1 2;0 3]; B=[4 2;1 5];
>> A==B
ans =
0 1
0 0
>> A~=B
ans =
1 0
1 1
5.8 Operadores Lgicos.
Los operadores lgicos de MATLAB son los siguientes:
& And (funcin equivalente: and (A,B)). Se evalan siempre
ambos operadores, y el resultado es true solo si ambos
son true.
&& And breve: si el primer operador es false ya no se evala
el segundo, pues el resultado final ya no puede ser ms
que false.
| Or (funcin equivalente: or(A,B)). Se evalan siempre
ambos operadores, y el resultado es false solo si ambos
son false.
|| Or breve: si el primer operando es true ya no se evala el
segundo, pues el resultado final no puede ser mas que
true
~ negacin lgica(funcin equivalente: not(A)).
xor(A,B) Realiza or exclusivo, es decir, devuelve 0 en el caso en
que ambos sean 1 o ambos sean 0.
154
Los operadores lgicos se combinan con los relacionales para poder comprobar el
cumplimiento de condiciones mltiples.
Los operadores lgicos breves se utilizan para simplificar las operaciones de
comparacin evitando operaciones innecesarias, pero tambin para evitar ciertos
errores que se produciran en caso de evaluar incondicionalmente el segundo
argumento. Consideremos por ejemplo la siguiente sentencia que evita una
divisin por cero:
>> r=(b~=0) && (a/b>0)
5.9 Funciones de Librera.
MATLAB tiene un gran nmero de funciones incorporadas. Algunas son funciones
intrnsecas, esto es, funciones incorporadas en el propio cdigo ejecutable del
programa. Estas funciones son generalmente rpidas y eficientes. Existen
adems funciones definidas en archivos .m y .mex que vienen con el propio
programa o que han sido aportadas por usuarios del mismo. Estas funciones
extienden en gran manera las posibilidades del programa.
MATLAB dispone tambin de archivos .p que son archivos pre compilados con la
funcin pcode.
MATLAB tiene diversos tipos de funciones. A continuacin se enumeran los tipos
de funciones ms importantes, clasificadas segn su finalidad.
1. Funciones matemticas elementales.
2. Funciones especiales.
3. Funciones matriciales elementales.
4. Funciones matriciales especiales.
5. Funciones para la descomposicin de matrices.
6. Funciones para anlisis estadstico de datos.
7. Funciones para anlisis de polinomios.
8. Funciones para integracin de ecuaciones y diferenciaciones ordinarias.
9. Resolucin de ecuaciones no-lineales y optimizacin.
10. Funciones para procesamiento de seales.
A continuacin se enumeran algunas de las caractersticas generales de todas las
funciones de MATLAB
- Los argumentos actuales de estas funciones pueden ser expresiones y
tambin llamadas a otras funciones
- Las funciones de MATLAB nunca devuelven modificadas las variables que
pasan como argumentos, a no ser que se incluyan tambin como valores de
retorno.
155
- MATLAB admite valores de retorno matriciales mltiples. Por ejemplo, en el
comando:
>>[V,D]=eig(A)
La funcin eig(A) calcula los valores y vectores propios de la matriz cuadrada A.
los vectores propios se devuelven como columnas de matriz V, mientras que los
valores propios con los elementos de la matriz diagonal D. en los ejemplos
siguientes:}
>>[xmax, imax]=max(x)
>>xmax=max(x)
Puede verse que la misma function max() puede ser llamada recogiendo dos
valores de retorno (el mximo elemento de un vector y la posicin que ocupa) o un
valor de retorno (el mximo elemento).
- Las operaciones de suma y/o resta de una matriz con un escalar consiste en
sumar y/o restar el escalar a todos los elementos de la matriz.
- Recurdese que tecleando help nombre_funcion se obtiene de inmediato
informacin detallada sobre la funcin de ese nombre
5.10 Funciones Matemticas elementales que
operan a modo de escalar.
Estas funciones, que comprenden las funciones matemticas trascendentales y
otras funciones bsicas, cuando se aplican a una matriz actan sobre cada
elemento de la matriz como si se tratase de un escalar. Por tanto, se aplican de la
misma forma a escalares y matrices. Algunas de las funciones de este grupo son
las siguientes:
sin(x) Seno.
cos(x) Coseno.
tan(x) Tangente.
asin(x) Arco seno.
acos(x) Arco coseno.
atan(x) Arco tangente (devuelve un ngulo entre /2 y /2).
atan2(x) Arco tangente (devuelve un ngulo entre - y ); se le
pasan dos argumentos proporcionales al seno y al
coseno
sinh(x) Seno hiperblico.
cosh(x) Coseno hiperblico.
tanh(x) Tangente hiperblico.
asinh(x) Arco seno hiperblico.
acosh(x) Arco coseno hiperblico.
ata(nh(x) Arco tangente hiperblico.
156
log(x) Logaritmo natural.
log10(x) Logaritmo decimal.
exp(x) Funcin exponencial.
sqrt(x) Raz cuadrada.
sign(x) Devuelve -1 si <0, 0 si=0 y 1 si >0. Aplicada a un numero
complejo, devuelve un vector unitario en la misma
direccin.
rem(x,y) Resto de la divisin (dos argumentos que no tienen que
ser enteros).
mod(x,y) Similar a rem.
round(x) Redondeo hacia el entero ms prximo.
fix(x) Redondea hacia el entero ms prximo a cero.
floor(x) Valor entero ms prximo hacia el infinito negativo.
ceil(x) Valor entero ms prximo hacia el infinito positivo.
gcd(x) Mximo comn divisor.
lcm(x) Mnimo comn mltiplo.
real(x) Partes reales.
imag(x) Partes imaginarias.
abs(x) Valor absoluto.
angle(x) ngulos de fase.
5.10.1 Funciones que actan sobre Vectores
Las siguientes funciones solo actan sobre vectores (no sobre matrices ni sobre
escalares)
[xm, im] Mximo elemento de un vector. Devuelve el valor
mximo xm y la posicin que ocupa im.
min(x) Mnimo elemento de un vector, devuelve el valor mas
pequeo y la posicin que ocupa.
sum(x) Suma de los elementos de un vector.
cumsum(x) Devuelve el vector suma acumulativa de los elementos
de un vector (cada elemento del resultado es una suma
de elementos del original).
mean(x) Valor promedio de los elementos de un vector.
std(x) Desviacin tpica de los elementos de un vector.
prod(x) Producto de los elementos de un vector.
cumprod(x) Devuelve el vector producto acumulativo de los
elementos de un vector.
[y,i]=sort(x) Ordenacin de menor a mayor de los elementos de un
vector x. devuelve el vector ordenado y, y un vector i
con las posiciones iniciales en x de los elementos en el
vector ordenado y.
157
En realidad estas funciones se pueden aplicar tambin a matrices. Pero en este
caso se aplican por separado a cada columna de la matriz, dando como valor de
retorno un vector resultado de aplicar la funcin a cada columna de la matriz
considerada como vector. Si estas funciones se quieren aplicar a las filas de la
matriz basta aplicar dichas funciones a la matriz traspuesta.
5.10.2 Funciones que actan sobre Matrices
B=A Calcula la traspuesta conjugada de la matriz A.
B=A. Calcula la traspuesta (sin conjugar) de la matriz A.
v=poly(A) Devuelve un vector v con los coeficientes del
polinomio Caracterstico de la matriz cuadrada A.
t=trace(A) Devuelve la traza t (suma de los elementos de la
Diagonal) de una matriz cuadrada A.
[m,n]=size(A) Devuelve el numero de filas m y de columnas n de
una matriz rectangular A.
n=size(A) Devuelve el tamao de una matriz cuadrada A.
nf=size(A,1) Devuelve el numero de filas de A.
nc=size(A,2) Devuelve el numero de columnas de A.
5.10.3 Funciones Matriciales Especiales.
Las funciones exp(), sqrt(), y log() se aplican elemento a elemento a las matrices
o vectores que se les pasan como argumentos. Existen otras funciones similares
que tienen tambin sentido cuando se aplican a una matriz como una nica
entidad. Estas funciones son las siguientes (se distinguen por que llevan una m
adicional en el nombre):
expm(A) Si A=XDX, expm(A)=X*diag(exp(diag(D)))*x
sqrtm(A) devuelve una matriz que multiplicada por si misma da
la matriz A.
logm() Es la funcin reciproca de expm(A).
Aunque no pertenece a esta familia de funciones, se puede considerar que el
operador potencia (^) est emparentado con ellas. As es posible decir que:
A^n Esta definida si A es cuadrada y n es un numero real. Si n
es entera, el resultado se calcula por multiplicaciones
sucesivas. Si n es real, el resultado se calcula como:
158
j ) ( , ' * . * A eig D X siendo X D X A
n n
= = .
5.10.4 Funciones de Factorizacin y/o Descomposicin Matricial
A su vez este grupo de funciones se puede subdividir en 4 subgrupos:
- Funciones basadas en la factorizacin triangular (eliminacin de Gauss):
[L,U] Descomposicin de Crout (A=LU) de una matriz L es
una permutacin de una matriz triangular inferior (dicha
permutacin es consecuencia del pivotamiento por
columnas utilizado en la factorizacin).
B=inv(A) Calcula la inversa de A. equivale a B=inv(U)*inv(L).
d=det(A) Devuelve el determinante d de la matriz cuadrada A.
equivale a d=det(L)*det(U).
E=rref(A) Reduccin de forma de escaln (mediante la
eliminacin de Gauss con pivotamiento por columnas,
haciendo ceros tambin encima de los pivotes) de una
matriz rectangular A.
[E,xc]=rref(A) Reduccin a forma de escaln con un vector xc que da
informacin sobre una posible base del espacio de
columnas de A.
U=chol(A) Descomposicin de Cholesky de matriz simtrica y
positivo-definida. Solo se utiliza la diagonal y la parte
triangular superior de A. el resultado es una matriz
triangular superior tal que A=U*U.
c=rcond(A) Devuelve una estimacin del reciproco de la condicin
numrica de la matriz A basada en la norma-1. Si el
resultado es prximo a 1 la matriz est condicionada; si
es prximo a 0 no lo est.
- Funciones basadas en el calculo de valores y vectores propios
[X,D]=eig(A) Valores propios (diagonal de D) y vectores propios
(columnas de X) de una matriz cuadrada A. con
frecuencia el resultado es complejo (si A no es
simtrica).
[X,D]=eig(A,B) Valores propios (diagonal de D) y vectores propios
(columnas de X) de dos matrices cuadradas A y B
(Ax=Bx). Los vectores propios estn normalizados de
modo que X*B*X=I. cuando A es simtrica y B es
simtrica y definida positiva se puede utilizar
[X,D]=eig(A,B,chol).
- Funciones basadas en la descomposicin QR
159
[Q,R]=qr(A) Descomposicin QR de una matriz rectangular. Se
utiliza para sistemas con ms ecuaciones que
incgnitas. Q es una matriz ortogonal, es decir, es
cuadrada aunque A no lo sea (m>n). no se garantiza
que los elementos diagonales de R sean positivos, lo
cual crea dificultades en algunos problemas (esa
factorizacin no coincide con la de Gram-Schmidt).
[Q,R]=qr(A,0) Similar a la anterior, pero Q del mismo tamao que A,
es decir, sin completar una base orto normal cuando
m>n.
[Q,R,E]=qr(A) Factorizacin QR con pivotamiento por columnas. La
matriz E se determina de modo que los elementos de
abs(diag( R )) son decrecientes.
B=null(A) Devuelve una base orto normal del subespacio nulo
(kernel, o conjunto de vectores x tales que Ax=0) de
la matriz rectangular A, calculada mediante la
descomposicin de valores singulares. Las columnas
de B son orto normales: B*B=I.
B=null(A,r) Devuelve una base del subespacio nulo de A
calculada a partir de la forma de escaln reducida. Las
columnas de B no son orto normales y se obtienen
alternativamente dando valor cero a todas las
variables libres excepto a una a la que se da el valor
de la unidad.
Q=orth(A) Las columnas de Q son una base orto normal del
espacio de columnas de A. el numero de columnas
de Q es el rango de A.
- Funciones basadas en la descomposicin de valores singulares
[U,D,V]=svd(A) Descomposicin de valor singular de una matriz
rectangular (A=U*D*V). U y V son matrices orto
normales. D es diagonal m x n y contiene los valores
singulares.
B=pinv(A) Calcula la pseudo-inversa de una matriz rectangular
A.
r=rank(A) Calcula el rango r de una matriz rectangular.
nor=norm(A) Calcula la norma-2 de una matriz (el mayor valor
singular).
nor=norm(A,2) Lo mismo que la anterior.
nor=normest(A) calcula de forma aproximada la norma-2 con menos
operaciones aritmticas que la funcin norm.
c=cond(A) Condicin numrica sub-2 de la matriz A. es el
cociente entre el mximo y el mnimo valor singular.
La condicin numrica da una idea de los errores
160
que se obtienen al resolver un sistema de
ecuaciones lineales con dicha matriz: su logaritmo
indica el numero de cifras significativas que se
pierden. Si A es grande el calculo es laborioso.
c=condest(A) Estimacin por defecto de la condicin numrica de
A con la norma-1. Esta funcin es mucho mas
econmica que cond.
- Calculo del rango, normas y condicin numrica:
Existen varias formas de realizar estos clculos, con distintos niveles de esfuerzo
de clculo y de precisin en el resultado.
El rango se calcula implcitamente (sin que el usuario lo pida) al ejecutar las
funciones rref(A), orth(A), null(A) y pinv(A). Con rref(A) el rango se calcula
como el nmero de filas diferentes de cero; con orth(A) y null(A)- basadas ambas
en la descomposicin QR- el rango es el nmero de columnas del resultado (o n
menos el numero de columnas del resultado). Con pinv(A) se utiliza la
descomposicin de valor singular, que es el mtodo ms fiable y ms caro en
tiempo de CPU. La funcin rank(A) est basada en pinv(A).
Normas de matrices:
norm(A) Norma-2, es decir, el mximo valor singular de A,
max(svd(A)).
normest(A) Calcula una estimacin o aproximacin de la norma-2.
til para matrices grandes en las que norm(A)
necesita demasiado tiempo.
norm(A,2) Lo mismo que norm(A).
norm(A,1) Norma-1 de A, mxima suma de valores absolutos por
columnas, es decir: max(sum(abs(A))).
norm(A,inf) Norma-inf. De A, mxima suma de valores absolutos
por filas, es decir: max(sum(abs(A))).
Norma de vectores:
norm(x,p) Norma-p, es decir sum(abs(x)^p)^(1/p).
norm(x) Norma-2 o norma euclidea; equivale al modulo o
norm(x,2).
norm(x,inf) Norma-inf, es decir max(abs(x)).
norm(x,1) Norma-1, es decir sum(abs(x)).
161
5.11 Ms sobre operadores relacionales con
Vectores y Matrices.
Cuando alguno de los operadores relacionales vistos previamente (<, >, <=, >=,
==, ~=) acta entre dos matrices (vectores) del mismo tamao, el resultado es
otra matriz (vector) de ese mismo tamao conteniendo unos y ceros, segn los
resultados de cada comparacin entre elementos hayan sido true o false,
respectivamente.
Por ejemplo, supngase que se define una matriz magic A de tamao 3 x 3 y a
continuacin se forma una matriz binaria M basada en la condicin de que los
elementos de A sean mayores que 4 (MATLAB convierte este cuatro en una
matriz de cuatros de modo automtico).
Obsrvese con atencin.
>> A=magic(3)
A =
8 1 6
3 5 7
4 9 2
>> M=A>4
M =
1 0 1
0 1 1
0 1 0
De ordinario, las matrices binarias que se obtienen de la aplicacin de los
operadores relacionales no se almacenan en memoria ni se asignan a variables,
sino que se procesan sobre la marcha. MATLAB dispone de varias funciones para
ello. Recurdese que cualquier valor distinto de cero equivale a true, mientras que
un valor igual a cero equivale a false. Algunas de estas funciones son:
any(x) Funcin vectorial; chequea si alguno de los elementos del
vector x cumple una de terminada condicin (en este caso ser
distinto de cero). Devuelve un uno o un cero.
any(A) Se aplica por separado a cada columna de la matriz A. el
resultado es un vector de unos y ceros.
all(x) Funcin vectorial; chequea si todos los elementos del vector x
cumplen una condicin. Devuelve un uno o un cero.
162
all(A) Se aplica por separado a cada columna de la matriz A. el
resultado es un vector de unos y ceros.
find(x) Busca ndices correspondientes a elementos de vectores que
cumplen una determinada condicin. El resultado es un vector
con los ndices de los elementos que cumplen la condicin.
find(A) Cuando esta funcin se aplica a una matriz la considera como
un vector con una columna detrs de otra, de la 1 a la ultima.
A continuacin se presentan algunos ejemplos de utilizacin de estas funciones.
A=magic(3)
A =
8 1 6
3 5 7
4 9 2
>> m=find(A>4)
m =
1
5
6
7
8
Ahora se van a sustituir los elementos que cumplen la condicin anterior por los
valores de 10. Obsrvese como se hace y el resultado que se obtiene:
A(m)=10*ones(size(m))
A =
10 1 10
3 10 10
4 10 2
Donde ha sido necesario convertir el 10 en un vector del mismo tamao que m.
para checar si hay algn elemento de un determinado valor, por ejemplo 3, puede
hacerse lo siguiente:
>> any(A==3)
ans =
163
1 0 0
any(ans)
ans =
1
Mientras que para comprobar que todos los elementos de A son mayores que
cero:
>>all(all(A))
ans=
1
En este caso no ha hecho falta el operador relacional por que cualquier elemento
distinto de cero equivale a true.
La funcin isequal (A,B) devuelve uno si las matrices son idnticas y cero si no lo
son.
5.12 Otras funciones mas que actan sobre
Vectores y Matrices.
Las siguientes funciones pueden actuar sobre vectores y matrices, sirven para
checar ciertas condiciones:
exist(var) Comprueba si el nombre var existe como variable,
funcin, directorio, archivo, etc.
isnan(A) Checa si hay valores NaN en A, devolviendo una matriz
de unos y ceros del mismo tamao que A
iIsinf(A) Checa si hay valores inf en A, devolviendo una matriz de
unos y ceros del mismo tamao que A.
isfinite(A) Checa si los valores de A son finitos.
isempty(A) Checa si un vector o matriz est vaco o tiene tamao
nulo.
ischar() Me dice si una variable es una cadena de caracteres
(string).
isglobal() Dice si una matriz es global.
issparse() Checa si una matriz es dispersa (es decir con un gran
numero de elementos cero).
A continuacin se presentan algunos ejemplos de uso de estas funciones en
combinacin con otras vistas previamente. Se define un vector X con NaN, que se
elimina en la forma:
164
>> x=[1 2 3 4 0/0 6]
x =
1 2 3 4 NaN 6
>> i=find(isnan(x))
i =
5
>> x=x(find(~isnan(x)))
x =
1 2 3 4 6
Otras posibles formas de eliminarlo sera las siguientes:
>> x=x(~isnan(x))
x =
1 2 3 4 6
>> x(isnan(x))=[]
x =
1 2 3 4 6
La siguiente sentencia elimina las filas de una matriz que contienen algn NaN:
>> A(any(isnan(A)'),:)=[]
165
Graficacion con
Matlab
6.1 Introduccin
A estas alturas, despus de ver como funciona este programa, a nadie le puede
resultar extrao que los grficos 2-D de MATLAB estn fundamentalmente
orientados a la representacin grfica de vectores y matrices. En el caso ms
sencillo los argumentos bsicos de la funcin plot() van a ser vectores. Cuando
una matriz aparezca como argumento, se considerar como un conjunto de
vectores columna (en algunos casos tambin como vector fila).
MATLAB utiliza un tipo especial de ventanas para realizar las operaciones
grficas. Ciertos comandos abren una ventana nueva y otros dibujan sobre la
ventana activa, bien sustituyendo lo que hubiera en ella, o bien aadiendo nuevos
elementos grficos a un dibujo anterior. Todo esto se ver con ms detalle en las
siguientes secciones.
6.2 Funciones grficas 2D elementales
MATLAB dispone de cinco funciones bsicas para crear grficos 2-D. estas
funciones se diferencian principalmente por el tipo de escala que utilizan en los
ejes de abscisas y de ordenadas. Estas cinco funciones son las siguientes:
plot() Crea un grfico a partir de vectores y/o columnas de
matrices, con escalas lineales sobre ambos ejes.
plotyy() Dibuja dos funciones con dos escalas diferentes para las
ordenadas, una a la derecha y otra a la izquierda de la
figura.
loglog() dem con escala logartmica en ambos ejes.
semilogx() dem con escala lineal en el eje de ordenadas y
logartmica en el eje de abscisas.
semilogy() dem con escala lineal en el eje de abscisas y
logartmica en el eje de ordenadas.
En lo sucesivo se har referencia casi exclusiva a la primera de estas funciones
(plot). Las dems se pueden utilizar de un modo similar.
6
166
Existen adems otras funciones orientadas a aadir ttulos al grfico, a a cada uno
de los ejes, a dibujar una cuadricula auxiliar, a introducir texto, etc. Estas
funciones son las siguientes:
title(titulo) Aade un titulo al dibujo.
xlabel(x) Aade una etiqueta al eje de las abscisas. Con
xlabel off desaparece.
Ylabel(y) Aade una etiqueta al eje de las ordenadas. Con
ylabel off desaparece.
text(x,y,texto) Introduce texto en el lugar especificado por las
coordenadas x e y. si x e y son vectores, el texto se
repite por cada par de elementos. Si el texto es
tambin un vector de cadenas de caracteres de la
misma dimensin, cada elemento se escribe en las
coordenadas correspondientes.
gtext(texto) Introduce texto con ayuda del ratn: el cursor cambia
de forma y se espera un click para introducir el texto
en esa posicin.
legend() Define rtulos para las distintas lneas o ejes
utilizados en la figura.
grid Activa la inclusin de una cuadricula en el dibujo.
Con grid off desaparece la cuadricula.
Borrar texto ( u otros elementos grficos) es un poco mas complicado; de hecho
hay que preverlo de antemano. Para poder hacerlo hay que recuperar previamente
el valor de retorno del comando con el cual se ha creado. Despus hay que llamar
a la funcin delete con ese valor como argumento.
Considerese el siguiente ejemplo:
>> v=text(1,.0,'seno')
v =
9.7656e-004
Esto crea la figura 3.1.
167
Figura 3.1.
>> delete (v)
Esta accin anterior borra la figura 3.1.
Los dos grupos de funciones anteriores no actan de la misma manera, As la
funcin plot dibuja una nueva figura en la ventana activa (en todo momento
MATLAB tiene una ventana activa de entre todas las ventanas grficas abiertas), o
abre una nueva si no lo esta, sustituyendo cualquier cosa que estuviera dibujada
sobre ella. Para verlo, se comenzar creando un par de vectores x e y con los que
se va a trabajar:
>> x=[-10:0.2:10];
>> y=sin(x);
Ahora se deben ejecutar los comandos siguientes (se comienza cerrando la
ventana activa, para que al crear la ventana nueva aparezca en primer plano):
>> close %se cierra la ventana grfica activa
>> grid % se crea una ventana con una cuadricula
>> plot(x,y) % se dibuja la funcin seno borrando la cuadricula
168
Figura 3.2. grfica de la funcin seno(x).
Se puede observar la diferencia con la secuencia siguiente:
>> close
>> plot(x,y)
>> grid
Figura 3.3. funcin seno con cuadricula.
En el primer caso MATLAB ha creado la cuadricula en una ventana nueva y luego
la ha borrado al ejecutar la funcin plot(). En el segundo caso, primero ha
dibujado la funcin y luego ha aadido la cuadricula. Esto es as porque hay
funciones como plot() que por defecto crean una nueva ventana grafica, y otras
funciones como grid que se aplican a la ventana activa modificndola, y solo
crean una ventana nueva cuando no existe ninguna ya creada.
169
6.3 Funcin plot()
Esta es la funcin clave de todos los grficos 2-D en MATLAB. Ya que se ha
mencionado que el elemento bsico de los grficos bidimensionales es el vector.
Se utilizan tambin cadenas de 1,2 o 3 caracteres para indicar colores y tipos de
lnea. La funcin plot(), en sus diversas variantes, no hace otra coas que dibujar
vectores. Un ejemplo muy sencillo de esta funcin, en el que se le pasa un nico
vector como argumento, es el siguiente:
>> x=[1 3 2 4 5 3]
x =
1 3 2 4 5 3
>> plot(x)
Figura 3.4 grafica de un vector.
El resultado de este comando es que se abre una ventana mostrando el grafico
de la figura anterior. Por defecto, los distintos puntos del grafico se unen con una
lnea continua. Tambin por defecto, el color que se utiliza para la primera lnea es
azul.
Cuando a la funcin plot() se le pasa un nico vector real como argumento, dicha
funcin dibuja en ordenadas el valor de los n elementos del vector frente a los
ndices 1,2,,n del mismo en abscisas.
En la pantalla se puede aprecias que MATLAB utiliza por defecto el color blanco
para el fondo de la pantalla y otros colores mas obscuros para los ejes y las
graficas.
170
Una segunda forma de utilizar la funcin plot() es con dos vectores como
argumentos. En este caso los elementos del segundo vector se presentan en
ordenadas frente a los valores del primero, que se presentan en abscisas; veamos
por ejemplo como se puede dibujar un cuadriltero de esta forma (obsrvese que
para dibujar un polgono cerrado, el ltimo punto debe coincidir con el primero):
>> x=[1 6 5 2 1];
>> y=[1 0 4 3 1];
>> plot(x,y)
Figura 3.5 dibujo de un cuadriltero.
La funcin plot() permite tambin dibujar mltiples curvas introduciendo varias
parejas de vectores como argumentos. En este caso, cada uno de los segundos
vectores se dibuja en ordenadas como funcin de los valores del primer vector de
la pareja, que se representan en las abscisas. Si el usuario no decide otra cosa,
para las sucesivas lneas se utilizan colores que son permutaciones cclicas del
azul, verde, rojo, cian, magenta, amarillo y negro. Observemos como se dibuja el
seno y el coseno en el siguiente ejemplo:
>> x=0:pi/25:6*pi;
>> y=sin(x);
>> z=cos(x);
>> plot(x,y,x,z)
171
Figura 3.6 seno y coseno juntas.
6.4 Comando subplot
Una ventana grafica se puede dividir en m particiones horizontales y n particiones
verticales, con el objeto de representar mltiples grficos en ella. Cada una de
estas subventanas tiene sus propios ejes, aunque otras propiedades son
comunes a toda la ventana grafica. La forma general de este comando es:
>>subplot(m,n,i)
Donde m y n son el nmero de subdivisiones en filas y columnas, e i es la
subdivisin que se convierte en activa. Las subdivisiones se numeran
consecutivamente empezando por las de la primera fila, siguiendo por las de la
segunda, y as sucesivamente. Por ejemplo la siguiente secuencia de comandos
genera cuatro grficos en la misma ventana:
>> y=sin(x);
>> z=cos(x);
>> w=exp(-x*.1).*y;
>> v=y.*z;
>> subplot(2,2,1), plot(x,y)
>> subplot(2,2,2), plot(x,z)
>> subplot(2,2,3), plot(x,w)
>> subplot(2,2,4), plot(x,v)
172
Figura 3.7 varias ventanas grficas.
6.5 Control de los ejes: Funcin axis()
Tambin en este punto MATLAB tiene sus opciones por defecto, que en algunas
ocasiones puede interesar cambiar. El comando bsico es el comando axis. Por
defecto, MATLAB ajusta la escala de cada uno de los ejes de modo que vare
entre el mnimo y el mximo valor de los vectores a representar. Este es el
llamado modo automtico. Para definir de modo explicito los valores mximo y
mnimo segn cada eje, se utiliza el comando: axis([xmin, xmax, ymin, ymax])
Mientras que:
axis(auto)
Devuelve el escalado de los ejes al valor por defecto o automtico. Otros posibles
usos de este comando son los siguientes:
axis(ij) Utiliza ejes de pantalla, con el origen en la esquina
superior izquierda y el eje j en direccin vertical
descendente.
v=axis Devuelve un vector v con los valores [xmin, xmax,
ymin, ymax].
axis(xy) Utiliza ejes cartesianos normales, con el origen en la
esquina inferior izquierda y el eje y vertical
ascendente.
axis(auto x) Utiliza el escalado automtico solo en direccin x.
axis(auto xz Utiliza el escalado automtico solo en direcciones x y
z.
axis(axis) Mantiene los ejes en sus actuales valores, de cara a
posibles nuevas graficas aadidas con hold on.
axis(tight) Establece los mismos limites para los ejes que para
los datos.
173
axis(equal El escalado es igual para ambos ejes.
axis(square) La ventana ser cuadrada.
axis(image) La ventana tendr las proporciones de la imagen que
se desea representar en ella (por ejemplo la de una
imagen bitmap que se desea importar) y el escalado
de los ejes ser coherente con dicha imagen.
axis(normal) Elimina las restricciones introducidas por equal y
square.
axis(off) Elimina las etiquetas, los nmeros y los ejes.
axis(on) Restituye las etiquetas, los nmeros y los ejes.
XLim, YLim Permite modificar selectivamente los valores mximo
y mnimo de los ejes en las direcciones x e y.
6.6 Control de ventanas graficas: funcin figure
Si se llama a la funcin figure sin argumentos, se crea una nueva ventana grafica
con el nmero consecutivo que corresponda. El valor de retorno es dicho nmero.
Por otra parte, el comando figure(n) hace que la ventana n pase a ser la ventana
o figura activa. Si dicha ventana no existe, se crea una nueva ventana con el
nmero consecutivo que corresponda (que se puede obtener como valor de
retorno del comando). La funcin close cierra la figura activa, mientras que
close(n) cierra la ventana o figura numero n.
El comando clf elimina el contenido de la figura activa, es decir, la deja abierta
pero vaca. La funcin gcf devuelve el nmero de la figura activa en ese momento
A manera de prctica ejecutemos las siguientes instrucciones en MATLAB,
observando con cuidado los efectos de cada una de ellas en la ventana activa. El
comando figure(gcf) permite hacer visible la ventana de grficos desde la ventana
de comandos.
>> x=[-4*pi:pi/20:4*pi];
>> plot(x,sin(x),'r',x,cos(x),'g')
>> title('funcion seno(x)-en rojo-y funcion coseno(x) -en verde-')
>> xlabel('angulo en radianes'),figure(gcf)
>> ylabel('valor de la funcion trignometrica'),figure(gcf)
>> axis([-12,12,-1.5,1.5]), figure(gcf)
>> axis('equal'), figure(gcf)
>> axis('normal'),figure(gcf)
>> axis('square'),figure(gcf)
>> axis('off'),figure(gcf)
>> axis('on'),figure(gcf)
>> axis('on'),grid,figure(gcf)
174
Figura 3.8.
La funcin figure tambin admite que se fijen algunas de sus propiedades, como
por ejemplo la posicin y el tamao con que aparecer en la pantalla. Por ejemplo
el comando:
>>figure(position,[left,botton, width,height])
Abre una ventana cuya esquina inferior izquierda est en el punto (left, botton)
respecto a la esquina inferior izquierda de la pantalla (en pixels), que tiene una
anchura de width pixels y una altura de height pixels.
6.7 Funcin fill para polgonos.
Esta es una funcin especial para dibujar polgonos planos, rellenndolos de un
determinado color. La forma general es la siguiente:
>>fill(x,y,c)
Que dibuja un polgono definido por los vectores x e y, rellenndolo con el color
especificado por c. si es necesario, el polgono se cierra uniendo el ultimo vrtice
con el primero. Respecto al color:
- Si c es un carcter de color (r,g,b,c,m,y,w,k), un vector de valores [r
g b, el polgono se rellena de modo uniforme con el color especificado.
- Si c es un vector de la misma dimensin que x e y, sus elementos se
transforman de acuerdo con un mapa de colores determinado, y el llenado del
polgono no uniforme en este caso se obtiene interpolando entre los colores de los
vrtices.
Este comando puede utilizarse tambin con matrices:
>>fill(A,B,C)
175
Donde A y B son matrices del mismo tamao. En este caso se dibuja un polgono
por cada par de columnas de dichas matrices. C puede ser un vector fila de
colores uniformes para cada polgono, o una matriz del mismo tamao que las
anteriores para obtener colores de relleno por interpolacin. Si una de las dos A o
B, son un vector en vez de una matriz, se supone que ese vector se repite tantas
veces como sea necesario para dibujar tantos polgonos como columnas tiene la
matriz. Consideremos el siguiente ejemplo de esta funcin.
Figura 3.9 polgono rellenado.
6.8 Grficos Tridimensionales.
Quizs sea sta una de las caractersticas de MATLAB que ms admiracin
despierta entre los usuarios no tcnicos (cualquier alumno de ingeniera sabe que
hay ciertas operaciones algebraicas como la descomposicin de valores
singulares, sin ir mas lejos que tienen dificultades muy superiores, aunque no lo
parezcan).
6.8.1 Tipos de funciones graficas tridimensionales.
MATLAB tiene posibilidades de realizar varios tipos de grficos 3D. para darse una
idea de ello lo mejor es verlo en la pantalla de nuestra computadora, aunque haya
que dejar las explicaciones detalladas para mas delante.
La primera forma de grafico 3D es la llamada funcin plot3, que es el anlogo
tridimensional de la funcin plot(). Esta funcin dibuja puntos cuyas coordenadas
estn contenidas en 3 vectores, bien unindolos mediante una lnea continua
(defecto), o bien mediante markers. Asegrese de que no hay ninguna ventana
176
grfica abierta y ejecute el siguiente comando que dibuja una lnea espiral en color
rojo:
Figura 3.10 uso de la funcin plot3.
Ahora veremos como se representa una funcin de dos variables independientes.
Para ello se va a definir una funcin de este tipo en un archivo llamado
prueba3d.m. la formula es la siguiente:
, )
, ) , )
2 2 2 2 2 2
1 5 3 1
2
3
1
5
10 1 3
y x y x y x
e e y x
x
e x z
+ +

|
.
|

\
|
=
El archivo prueba3d.m debe contener las lneas siguientes:
functin z=prueba3d(x,y)
Z=3*(1-x).^2.*exp(-(x.^2)-(y+1).^2)-
-10*(x/5-x.^3-y.^5).*exp(-x.^2-y.^2)
-1/3*exp(-(x+1).^2-y.^2);
Ahora ejecutemos la siguiente lista de comandos:
>> x=[-3:0.4:3]
>>close
>>subplot(2,2,1)
>>figure(gcf), fi=[0:pi/20:6*pi];
>>plot3(cos(fi),sin(fi),fi,r)
>>grid
>>[x,y]=meshgrid(x,y);
>>z=prueba3d(x,y);
>>subplot(2,2,2)
>>figure(gcf), mesh(z)
177
>>subplot(2,2,3)
>>figure(gcf), surf(z)
>>subplot(2,2,4)
>>figure(gcf), contour3(z,16)
Figura 3.10 varias graficas tridimensionales.
En esta figura resultante aparece una buena muestra de algunas de las
posibilidades grficas tridimensionales de MATLAB.
6.9 Dibujo de mallas: funciones meshgrid, mesh y
surf
Ahora veremos a detalle cmo se puede dibujar una funcin de dos variables
(z=f(x,y)) sobre un dominio rectangular. Tambin veremos como se pueden dibujar
los elementos de una matriz como funcin de los dos ndices.
Sean x e y dos vectores que contienen las coordenadas en una y otra direccin de
la retcula (grid) sobre la que se va a dibujar la funcin. Despus hay que crear
dos matrices X (cuyas filas son copias de x) e y (cuyas columnas son copias de y).
estas matrices se crean con la funcin meshgrid. Estas matrices representan
respectivamente las coordenadas x e y de todos los puntos de la retcula. La
matriz de valores z se calcula a partir de las matrices de coordenadas X e Y.
finalmente hay que dibujar esta matriz z con la funcin mesh, cuyos elementos son
funcin elemento a elemento de los elementos de X e Y. veamos como ejemplo el
dibujo de la siguiente funcin:
178
, )
2 2
2 2
y x
y x sen
z
+
+
=
>> close all
>> u=-8:0.5:8; v=u;
>> [u,v]=meshgrid(u,v);,
>> r=sqrt(u.^2+v.^2)+eps;
>> z=sin(r)./r;
>> surf(z)
Figura 3.11 uso del surf.
6.9.1 Dibujo de lneas de contorno: funciones contour y contour3
Una forma distinta de representar funciones tridimensionales es por medio de
isolineas o curvas de nivel. A continuacin se ver como se puede utilizar esta
representacin
>> close all
>> u=-8:0.5:8; v=u;
>> [u,v]=meshgrid(u,v);,
>> r=sqrt(u.^2+v.^2)+eps;
>> z=sin(r)./r;
>> contour(z,20)
179
Figura 3.12 curvas de nivel.
>>contour3(z,20)
Figura 3.13 curvas de nivel 3D.
Donde 20 representa el nmero de lneas de nivel. Si nos e pone se utiliza un
numero por defecto.
Otras formas posibles de estas funciones son las siguientes:
contour(z,val) Siendo val un vector de valores para las
isolineas a dibujar.
contour(u,v,z,20) Se utilizan u y v para dar valores a los ejes de
coordenadas.
contour(z,20,r--) Se puede especificar el tipo de lnea como en la
funcin plot().
contourf(z,val) Anloga a contour(), pero rellenando el espacio
180
entre lneas.
6.10 Utilizacin del color en grficos 3D
En los dibujos realizados hasta ahora, se ha visto que el resultado adoptaba
determinados colores, pero todava no se ha explicado de donde han salido. Ahora
veremos que sistema utiliza MATLAB para determinar los colores.
Un mapa de colores se define como una matriz de tres columnas, cada una de las
cuales contiene un valor entre cero y uno, que representa la intensidad de uno de
los colores fundamentales: r(red o rojo), g(green o verde) y b(blue o azul).
La longitud por defecto de los mapas de colores de MATLAB es de 64, es decir,
cada mapa de color contiene 64 colores. Esta longitud puede modificarse.
Algunos mapas de colores estn predefinidos en MATLAB. Buscando colormap en
Help se obtiene entre otra informacin la lista de los siguientes mapas de colores:
autumn
bone
colorcube
cool
copper
flag
gray
hot
hsv
jet
lines
pink
prism
spring
summer
white
winter
El colormap por defecto es jet. Para visualizar estos mapas de colores, cambiando
al mismo tiempo su longitud, se pueden utilizar los siguientes comandos en el
command window:
>>colormap(hot(128))
>>pcolor([1:129;1:129])
Donde la funcin pcolor permite visualizar por medio de colores la magnitud de los
elementos de una matriz (en realidad representa colores de celdas, para lo que
necesita que una matriz tenga una fila y columna ms de las necesarias; esa es la
razn de que en el ejemplo anterior a la funcin pcolor se le pasen 129 filas y 2
columnas).
181
6.10.1 Dibujo de superficies faceteadas.
La funcin surf tiene diversas posibilidades referentes a la forma en que son
representadas las facetas o polgonos coloreados. Las tres posibilidades son las
siguientes:
shading flat Determina sombreado con color constante para cada
polgono. Este sombreado se llama plano flat.
shading
interp
Establece que el sombreado se calcular por
interpolacin de colores entre los vrtices de cada
faceta, se llama tambin sombreado de Gouraud.
sading
faceted
Consiste en sombreado constante con lneas negras.
superpuestas. Esta es la opcin por defecto.
>> surf(z), shading flat
Figura 3.14 sombreado de grafica.
>> surf(z), shading interp
182
Figura 3.15 sombreado ms fino.
6.10.2 Otras funciones grficas 3D
Las siguientes funciones se derivan directamente de las anteriores, pero aaden
algn pequeo detalle y/o funcionalidad.
surfc Combinacin de surf y contour en z=0.
trisurf Similar a surf, dibuja una superficie 3D a partir de los
valores de una funcin en una malla de tringulos.
meshz Mesh con plano de referencia en el valor mnimo y una
especia de cortina en los bordes del dominio de la funcin.
trimesh Similar a mesh, dibuja una superficie 3D a partir de los
valores de una funcin en una malla de tringulos.
surfl Para controlar la iluminacin determinando la posicin e
intensidad de un foco de luz.
light Crea un foco de luz en los ejes actuales capaz de actuar
sobre superficies 3D. se le deben pasar como argumentos
el color, el estilo (la luz focal o en el infinito) y la posicin.
Son muy importantes las propiedades de los objetos
iluminados patch y surface.
colorbar Aade el mapa de colores activo en la figura,
redimensionando los ejes para hacerle un lugar. Se puede
colocar horizontal o verticalmente.
sphere Dibuja una esfera 3D de radio la unidad. Por defecto se
utiliza un facetado de 20 (20 meridianos y 20 paralelos).
Este nmero se puede cambiar. Es posible recoger las
coordenadas como valor de retorno y multiplicarlas por un
factor de escala.
cylinder Dibuja una superficie cilndrica de radio 1 y altura 1, con 20
facetas laterales. Este numero se puede cambiar, como
183
segundo argumento. El primer argumento puede ser un
vector que indica como vara el radio en funcin de la
altura del cilindro, tambin es posible recoger las
coordenadas como valor de retorno y multiplicarlas por un
factor de escala.
184
Introduccion al
GUIDE
7

Potrebbero piacerti anche