analisis numerico

58
Análisis Numérico y Programación 0 Ciencia, pasión y aventura INTSITITUTO TECNOLÓGICO SUPERIOR DE TACAMBARO ASIGNATURA: ANÁLISIS NUMÉRICO Y PROGRAMACIÓN PROFESOR: OSCAR ALVAREZ ARRIAGA TAREA: UNIDAD 1. PROGRAMACION CON SOFTWARE MATEMÁTICO UNIDA 2. GRÁFICAS CONSOFTWARE MATERMÁTICO UNIDAD 3. ÁLGEBRA LINEAL CARRERA: INGENIERÍA EN GEOCIENCIAS ALUMNA: LIZBEYDI DELGADO RAMÍREZ GRUPO: 4°B FECHA: 16 DE FEBRERO DEL 2015

Upload: liz-delgado

Post on 18-Jan-2016

50 views

Category:

Documents


3 download

DESCRIPTION

unidad 1 de analisis numerico

TRANSCRIPT

Page 1: Analisis Numerico

Análisis Numérico y Programación

0 Ciencia, pasión y aventura

INTSITITUTO TECNOLÓGICO SUPERIOR DE

TACAMBARO

ASIGNATURA: ANÁLISIS NUMÉRICO Y PROGRAMACIÓN

PROFESOR: OSCAR ALVAREZ ARRIAGA

TAREA:

UNIDAD 1. PROGRAMACION CON SOFTWARE MATEMÁTICO

UNIDA 2. GRÁFICAS CONSOFTWARE MATERMÁTICO

UNIDAD 3. ÁLGEBRA LINEAL

CARRERA: INGENIERÍA EN GEOCIENCIAS

ALUMNA: LIZBEYDI DELGADO RAMÍREZ

GRUPO: 4°B

FECHA: 16 DE FEBRERO DEL 2015

Page 2: Analisis Numerico

Análisis Numérico y Programación

1 Ciencia, pasión y aventura

UNIDAD 1. PROGRAMACION CON SOFTWARE MATEMATICO 1.1 COMANDOS

Cómo abrir MATLAB: En una estación de trabajo Unix, MATLAB puede abrirse tecleando: > mat lab

Una vez que aparezca la indicación de MATLAB, que puede ser >>, teclee los comandos que se explican en esta sección. Para salir de MATLAB, teclee. >>quit

En Macintosh o Windows, haga clic en el icono de MATLAB o de STUDENT MATLAB. El procedimiento para salir de MATLAB es similar al que se sigue para salir de cualquier otra aplicación en Macintosh o Windows. Ayuda: Si no entiende bien el significado de un comando, teclee help y el

nombre del comando en cuestión. El comando help presenta una explicación

concisa pero precisa de los comandos; tal vez no resulte útil para los principiantes, pero será uno de los comandos que utilice con mayor frecuencia. Por ejemplo, he

aquí una traducción de las respuestas a help quit y a help help:

>>help quit

QUIT Terminar MATLAB.

QUIT termina MATLAB.

>>he1p help

HELP Documentación en línea.

HELP, sin más, presenta una lista de todos los temas de ayuda primarios. Cada tema

primario corresponde a un nombre de directorio en MATLABPATH.

‚HELP tema‛ proporciona ayuda sobre el tema especificado. El tema puede ser el nombre

de un comando o de un directorio; en el primer caso, HELP exhibe información acerca de

ese comando; en el segundo caso, HELP muestra la Tabla de Contenido del directorio

especificado.

No es necesario proporcionar el nombre de camino completo del directorio; basta con el

último componente o algunos de los últimos componentes.

Por ejemplo, tanto ‚help general" y "help matlab/general" exhiben la Tabla de Contenido

del directorio toolbox/matlab/general.

LOOKFOR XYZ busca la cadena XYZ en la primera línea de comentario del texto de

HELP de todos los archivos M que se encuentren en MATLABPATH. Para todos los

Page 3: Analisis Numerico

Análisis Numérico y Programación

2 Ciencia, pasión y aventura

archivos en los que se encuentra la cadena, LOOKFOR exhibirá las líneas en las que se

encontró.

MORE ON hace que HELP haga una pausa después de cada pantalla si el texto de ayuda

ocupa varias pantallas.

Versión: Lo primero que el usuario debe saber acerca del software de MATLAB es qué versión está usando. Para obtener esta información, teclee versión. Qué: El comando what produce una lista de los archivos M-, MAT- y MEX-

presentes en el directorio de trabajo actual. El comando what nombredirectorio lista

los archivos del directorio nombredirectorio en el matlabpath. No es necesario

especificar el nombre completo de la ruta del directorio; basta con el o los últimos componentes. Por ejemplo, tanto what general como what matlab/ general listan los

archivos M- del directorio tool-box/matlab/ general.

Quién: El comando who produce una lista de las variables del espacio de

trabajo actual; whos exhibe información adicional acerca de cada variable; who

global y whos global listan las variables del espacio de trabajo global.

Reloj: El comando clock exhibe números como

Ans=

1.0e+03 *

1.9950 0.0030 0.0050 0.0150 0 .0140 0.0091

El primer número, 1.0e+ 03, es un multiplicador; los números de la segunda línea

tienen el siguiente significado: [año, mes , día , hora , minuto , segundo]

Se puede exhibir la misma información en formato entero con fix (clock). La

respuesta es ans =

1995 3 5 15 19 56

Lo que indica que la fecha fue el año 1995, tercer mes, quinto día, 15 horas, 19 minutos y 56 segundos, aproximadamente seis minutos después de que se imprimió el primer ejemplo de clock. Podemos medir con clock el tiempo que tarda

una ejecución. Por ejemplo, asigne t_0=clock antes de que se inicie un cálculo y

t_1=clock cuando se haya completado; entonces, t_1-t_0 nos dará el tiempo

Page 4: Analisis Numerico

Análisis Numérico y Programación

3 Ciencia, pasión y aventura

transcurrido durante el cálculo. También podemos usar tic y toc para medir el

tiempo transcurrido. El comando date proporciona información similar, pero en un formato más breve:

ans =

5 -Mar – 95

Camino: El comando path imprime la ruta de búsqueda vigente de MATLAB. El

comando p = path devuelve una cadena p que contiene la ruta. El comando path

(p0) cambia la ruta a p0, que es una cadena que contiene la nueva nata. El

comando path (p1, p2) cambia la ruta a la concatenación de las dos cadenas de

ruta p1 y p2. Por tanto, path (path, p3) anexará un directorio nuevo p3 a la ruta

vigente y path (p3, path) antepondrá una ruta nueva.

Obtener entorno: El comando getenv (‘MATLABPATH’) muestra las rutas de

MAT-LAB vigentes. Diario: El comando diary on escribe todo lo que se introduce por el teclado, así

como la mayor parte de lo que se envía a la pantalla, a un archivo llamado diary y

diary off termina la escritura. Si ya existe el archivo diary, las salidas de la pantalla

se anexarán a ese archivo. Se puede especificar un nombre de archivo distinto de diary escribiéndolo después de la palabra diary. Si no se incluyen las palabras on u

off, el comando diary sola alternará” entre diary on y diary off. El archivo puede

imprimirse en papel o editarse posteriormente. Escape: El signo ! es el operador que sirve para salir temporalmente de

MATLAB. Con este signo, se tiene acceso al directorio fuera de MATLAB. Por ejemplo, suponga que abrió MATLAB desde un shell de Unix; entonces, podrá emitir un comando de Unix desde dentro „de MATLAB escribiendo dicho comando después del signo de escape. Por ejemplo, es posible abrir desde MATLAB

software de edición de textos como el editor vi tecleando !vi nombrearchivo.

Podemos utilizar el escape de fonna análoga en una PC para los comandos de DOS, o incluso en una Mac para un número limitado de comandos. Por ejemplo, podemos dar formato a un disquete desde MATLAB en una PC con !format a:. Sin

embargo, la ejecución de programas mediante este mecanismo, sobre todo si se trata de software gráfico o de comunicaciones, puede echar a perder el entorno de computación.

Page 5: Analisis Numerico

Análisis Numérico y Programación

4 Ciencia, pasión y aventura

Demostración: El comando demo guía al usuario para que pueda ejecutar

diversas demostraciones que se eligen de un menú. El contenido de algunas demostraciones no es fácil de entender a la primera, pero puede estudiarse en varias ocasiones si se tiene interés.

1.2 CALCULOS

Cálculos con una sola variable: Cuando se abre una ventana de comandos, aparece la indicación >> en la esquina superior izquierda de la ventana. Podemos escribir cualquier comando adelante de la indicación. En nuestras explicaciones de los comandos, omitiremos la indicación por sencillez. Como ejemplo sencillo, evaluemos:

Volumen =

Los comandos que debemos teclear son:

Listado 1.1a

r = 2;

vol = (4/3)*pi*r 3;

Donde pi = : en MATLAB. Cada linea se teclea adelante de la indicación >> y se oprime la tecla return (o intro) al final de la línea. Observe que en el guión anterior cada línea es un comando y termina con un signo de punto y coma. El circunflejo

después de r es el operador de exponente.

Cuando trabajamos en la ventana de comandos, la computadora calcula la respuesta de cada comando inmediatamente después de pulsarse la tecla return. Por tanto, el valor de vol ya está en la computadora; ¿cómo podemos hacer que

aparezca en la pantalla? La forma más fácil de exhibir el resultado es teclear vol y pulsar return. La

computadora exhibirá vol =

3 3 . 5 1 0

Otra forma de imprimir el valor de vol es omitir el signo de punto y coma al final del segundo comando:

Listado 1.1b

r = 2 ;

vol = (4/3) *pi*r 3

Si falta el punto y coma, el resultado se imprimirá inmediatamente después de calcularse. Sin embargo, como casi nunca resulta cómodo ir imprimiendo todos los resultados, por lo general se coloca un punto y coma después de cada comando.

Page 6: Analisis Numerico

Análisis Numérico y Programación

5 Ciencia, pasión y aventura

Podemos escribir varios comandos en una misma línea separándolas con signos de punto y coma. Si necesita imprimir los resultados de cada comando que se ejecute, separe los comandos con comas y termine la línea con o sin una coma. Por ejemplo, si escribe

r = 2, vol = (4/3)*pi*r 3

Se imprimirán los valores de r y de vol, pero si escribe

r = 2; vol = (4/3)*pi*r 3;

no se imprimirán resultados. Es posible dividir un comando largo en varias líneas. En Fortran, esto se hace con una marca de continuación en la columna 6. En MATLAB, la marca de continuación es y se coloca al final de la línea que se desea continuar; por ejemplo,

Listado 1.2

r = 2 ;

vol = (4/3) *3 . 14159...

*r 3 ;

La indicación > no aparecerá en la línea que siga a la marca de continuación. Operadores aritméticos: Los operadores aritméticos como +, -, * y / son los mismos que los de lenguajes de programación tradicionales como Fortran y, respectivamente, más, menos, multiplicar y dividir. MATLAB emplea un operador no tradicional, \, que puede llamarse división inversa. Este operador produce el recíproco de la división; o sea, a \ b produce b / a. Por ejemplo,

c = 3\1

c =

0.3333

No es conveniente que los lectores utilicen este operador en cálculos ordinarios, pero adquirirá importancia en la unidad 3 cuando tratemos el álgebra lineal.

Enunciado if: El enunciado if siempre debe terminar con un enunciado end;

por ejemplo,

Listado 1.3

r = 2 ;

if r>0, vol = (4/3) * 3.14159 * r 3;

Page 7: Analisis Numerico

Análisis Numérico y Programación

6 Ciencia, pasión y aventura

end

Obsérvese también que al escribir el guión anterior la indicación > no aparece sino hasta después de teclearse end. Si el enunciado matemático requiere un igual

después de if, utilice ==, como en el lenguaje C; por ejemplo,

Listado 1.4

r = 2 ;

if r==2, vol = (4/3) * pi * r 3;

end

El operador diferente de se escribe =; por ejemplo,

Listado 1.5

r = 2;

if r = 3, vol = (4/3) * pi * r 3; ’

end

Los operadores mayor que, menor que, igual o mayor que e igual o menor que son, respectivamente,

>

<

> =

<=

Los enunciados lógicos and y or se denotan con & y l, respectivamente. Por

ejemplo, la ecuación condicional Si g>3 o g<0, entonces a=6

Se escribe if g>3 l g<0, a=6; end

Asimismo, la ecuación condicional Si a>3 y c<0, b=19

Se expresa como if a>3 & c<0, b=l9; end

Los operadores & y l se pueden utilizar agrupados; por ejemplo,

if ((a==2 l b==3) & c<5) g=1; end

El enunciado if se puede utilizar con else o elseif; por ejemplo,

Page 8: Analisis Numerico

Análisis Numérico y Programación

7 Ciencia, pasión y aventura

Listado 1.6

r=2;

if r > 3 b=1;

elseif r==3 b=2;

else b=0 ;

end

Desde luego, el seif puede repetirse tantas veces como se desee; sin embargo,

hay ocasiones en que el uso de else y elseif tiene sus bemoles, sobre todo cuando

las variables que siguen al enunciado elseif incluyen variables de arreglo de

diferentes tamaños. Si los enunciados el seif no funcionan, olvídese de ellos y

repita enunciados if sencillos cuantas veces sea necesario.

Exhibición: La orden disp exhibe un número, vector, matriz o cadena en la

ventana de comandos sin tener que especificar un nombre de variable; así, puede servir para exhibir mensajes o datos en la pantalla. Por ejemplo, tanto disp (pi)

como disp pi imprimen 3 . 14159 en la ventana de comandos. Pruebe también disp

‘Esta es una prueba de disp. ’ .

Variables y nombres de variables: No es necesario declarar los nombres de las variables ni sus tipos. Esto se debe a que los nombres de las variables en MATLAB no son diferentes para las variables enteras, reales y complejas. Cualquier variable puede adoptar valores reales, complejos y enteros. Ni siquiera es necesario declarar previamente el tamaño de un arreglo. En principio, cualquier nombre puede utilizarse siempre que sea compatible con MAT-LAB. Sin embargo, debemos tener presentes dos situaciones incompatibles. La primera es que MATLAB no acepta el nombre; la segunda es que se acepta el nombre pero éste anula el significado original de un nombre reservado. Estos conflictos pueden ocurrir con los siguientes tipos de nombres:

(a) nombres de ciertos valores (b) nombres de funciones (subrutinas) (c) nombres de comandos

Un método para determinar la compatibilidad del nombre de variable es probarlo en la pantalla de comandos. Un enunciado válido como x=9 tendrá una respuesta

como ésta: X=

9

Page 9: Analisis Numerico

Análisis Numérico y Programación

8 Ciencia, pasión y aventura

Lo que significa que se aceptó la variable. En cambio, si se prueba con end=4 (como ejemplo de uso indebido), será ignorado. Un ejemplo del segundo conflicto es el siguiente: si se utilizan sin y cos como

ejemplos de nombres de variable indebidos) sin relación con las funciones trigonométricas; por ejemplo,

sin= 3;

cos = sin 2;

Los cálculos procederán, pero sin y cos ya no podrán utilizarse como funciones

trigonométricas en tanto no sean borradas las variables con el comando clear o se

abandone MATLAB. Si aparece un mensaje de error relacionado con un conflicto, es importante que el lector investigue qué lo causó. Es tradicional utilizar los símbolos i, j, k, I, m y n como variables enteras o

índices. Al mismo tiempo, i y j se emplean para denotar el valor imaginario unitario

√ . En MATLAB, i y j se reservan para el valor imaginario unitario; por tanto, si

un cálculo incluye varias variables complejas es aconsejable evitar el uso de i y j

como variables definitivas por el usuario, si es posible. En la tabla 1.1 se presentan ejemplos de nombres de variable reservados que tienen significado especial. Se puede verificar la existencia de una variable o un archivo con el comando exist.

Ciclos: MATLAB cuenta con ciclos for /end y while/ end. A fin de ilustrar un ciclo

for / end, calculemos el volumen de las esferas para r=1 hasta 5. Los comandos

para esta tarea pueden escribirse así:

Listado 1.7

for r=1:5

vol=(4/3) * pi * r^3

disp ( [r, vol ] )

end

Page 10: Analisis Numerico

Análisis Numérico y Programación

9 Ciencia, pasión y aventura

Los cálculos del ciclo no comenzarán hasta que se teclee end y se pulse la tecla return (intro). El enunciado disp( [r , vol] ) imprimirá los valores de r y vol en una

línea cada vez que se calcule vol. No es necesario un signo de punto y coma después de for r=1 : 5 ni de end.

Otra forma de escribir un ciclo consiste en utilizar while /end; por ejemplo,

Listado 1.8

r = 0 ;

while r < 5

r = r+1;

Vol = (4/3) *pi*1 ^ 3;

disp ( [r, vol])

end

El índice del ciclo puede decrementarse así:

for r =5 : - 1 : 1

vol = (4/3) * pi * 1 ^3;

disp ( [r, vol])

end

En este ejemplo, el -1 entre los operadores de dos puntos es el decremento del

parámetro r después de cada ciclo.

Podemos escribir ciclos dobles y triples; por ejemplo,

Listado 1.9

for r= 1 : 5

for s= 1 : r

vol = (4/3) * pi * (r^3 - s^3);

disp( [r, vol)

end

end

Formato: Por omisión, los números se exhiben con cinco dígitos: pi

ans =

3 . 1416

Page 11: Analisis Numerico

Análisis Numérico y Programación

10 Ciencia, pasión y aventura

Sin embargo, los mismos dígitos pueden exhibirse con 16 dígitos si se emite la orden format long; Por ejemplo,

format long

pi

ans=

3.141592653589793

Si desea volver al formato corto, utilice format shor t. Además, format short e y format

long e se pueden imprimir números cortos y largos, respectivamente, en formato de

punto flotante. Corte: El comando break termina la ejecución de un ciclo for o while. Si se utiliza

break en ciclos anidados, sólo se termina el ciclo inmediato donde se encuentra el

comando. En el siguiente ejemplo, break termina el ciclo interior tan pronto como se satisface

j>2*i, pero el ciclo de i se continúa hasta i=6:

Listado 1.10

for i=1:6

for j=1:2O

if j>2 * i, break, end

end

end

Ciclo infinito: Hay ocasiones en que conviene utilizar un ciclo infinito que pueda romperse cuando se satisfaga cierta condición. En el siguiente ejemplo se muestra un ciclo infinito que se rompe sólo si se satisface la condición x > xlimit:

while 1

.

.

if x > xlimit, break; end

.

.

end

Page 12: Analisis Numerico

Análisis Numérico y Programación

11 Ciencia, pasión y aventura

Cómo borrar variables: Al ejecutarse los comandos, MATLAB memoriza las variables utilizadas. Sus valores permanecen en la memoria hasta que se sale de MATLAB o hasta que se borran las variables, lo cual se hace con el comando clear.

Si sólo se desea borrar algunas variables, sus nombres se indican después de la palabra clear; por ejemplo,

clear x y z

Cómo borrar la ventana de comandos: Si desea borrar la ventana, utilice el comando

clc

1.3 LECTURA Y ESCRITURA

Hay varias formas de pasar datos a y de MATLAB. Los métodos pueden agruparse en tres clases:

(a) Operación interactiva mediante teclado o el ratón (b) Lectura de o escritura en un archivo de datos (c) Empleo de save o load

Lectura de entradas de un teclado: MATLAB puede aceptar datos de entrada a través del teclado mediante el comando input. Si se desea leer un número, un enunciado básico sería:

z = input(‘Teclee el radio:’)

La parte Teclee el radio: es un mensaje de solicitud que se exhibe en la pantalla.

Cuando se teclee el valor del radio y se pulse la tecla return (intro), el dato se guardará en z. También es posible introducir cadenas desde el teclado. Un

enunciado básico sería:

z = input (‘ Indique su nombre: ' , ' s ')

El segundo argumento, ‘ s’ , indica que la entrada del teclado es una cadena. La

variable z se convertirá en una variable de arreglo (vector de fila) a menos que la

cadena sólo contenga un carácter. Se puede introducir una cadena con input sin ’s’

si la cadena se teclea encerrada entre apóstrofos. En este caso, el mensaje de solicitud podría ser:

z = input ( ' Indique su nombre (encerrado en apóstrofos) : ')

Page 13: Analisis Numerico

Análisis Numérico y Programación

12 Ciencia, pasión y aventura

Formato de salida: Es posible imprimir mensajes y números con formato si se utiliza fprintf; por ejemplo, j ‟

fprintf ( 'El volumen de la esfera es %12.5 f. \ n ' , vol)

Aquí se incluyó entre los apóstrofos la cadena que se va a exhibir, el formato de un número y el operador de nueva línea. El estilo del formato debe ser familiar para quienes conocen el lenguaje C: El volumen de la esfera es la cadena que se

exhibirá, %12. 5f es el formato y es similar a F12. 5 en Fortran, y \n es el operador

de nueva línea que avanza en una línea la posición en la pantalla. El operador de

nueva línea se puede colocar en cualquier lugar de la cadena. Por último, vol es la

variable que se imprimirá en el formato %12. 5f. Si se omite \n, lo que se imprima

en seguida aparecerá en la misma línea. El enunciado

Fprintf ( 'formato_e: %12.5e \n‘, 12345.2)

Exhibirá

formato_e: l.23452e+04

Si se escriben consecutivamente dos enunciados de impresión sin \n en el

primer enunciado, por ejemplo,

Fprintf ('formato_e: %12.5e', 12345.2)

Fprintf (‘formato_f: %l2.3f\n', 7.23462)

toda la salida se imprimirá en una sola linea, así:

formato_e: l.23452e+O4 formato_f: 7.235

Se puede teclear un valor entero empleando el mismo formato, sólo que se pone un 0 después del punto decimal; por ejemplo,

Fprintf ('formato_f: %12.0f\n', 93)

Produce

formato_f: 93

Page 14: Analisis Numerico

Análisis Numérico y Programación

13 Ciencia, pasión y aventura

Si se desea imprimir varios números en una misma línea, puede utilizarse varias veces fprintf sin \n, excepto en el último enunciado.

Escritura en un archivo específico: Es posible utilizar el enunciado fprintf

para escribir salidas con formato en un archivo. Para ello, se incluye el nombre del archivo en el argumento; por ejemplo,

Fprintf (’archivo_x', ‘Volumen = %12.5 f\n’ , vol)

Escribirá la salida en el archivo de nombre archivo_x. Si no existe el archivo, se

creará uno nuevo; si existe, la salida se anexará al final de su contenido. Si ya

existe archivo_x, es posible eliminarlo con : !rm archivo_x en Unix o !erase archivo_x en Windows. Se puede tener un mejor control de los archivos con fopen y fclose. Si desea

mayores detalles, consulte la guía de usuario de MATLAB.

1.4 VARIABLES DE ARREGLO

Variables de arreglo unidimensional: Las variables de arreglo unidimensional tienen forma de fila o columna y están íntimamente relacionadas con los vectores y las matrices. En MATLAB, arreglo de fila es lo mismo que vector de fila y arreglo de columna es lo mismo que vector de columna. La variable x puede definirse como vector de fila especificando sus elementos; por ejemplo:

X= [0, 0.1, 0.2, 0.3, 0.4, 0.5];

Si desea imprimir un elemento en particular, teclee x con su subíndice. Por ejemplo, si teclea x (3) como un comando se exhibirá:

ans =

0. 2

Una forma equivalente de definir la misma x es for i=1:6

x(i) = (i-1)*0.1;

end

El tamaño de un vector no tiene que declararse previamente, pues se ajusta automáticamente. El número de elementos de x puede incrementarse definiendo elementos adicionales, por ejemplo,

x (7 ) = 0.6 ;

Otra forma de escribir una variable de arreglo de fila con un incremento o decremento fijo es:

x = 2 = -0 . 4 = -2

que produce

Page 15: Analisis Numerico

Análisis Numérico y Programación

14 Ciencia, pasión y aventura

x = 2.0000 1.6000 1.2000 0.8000 0.4000 -0.0000

La definición de un arreglo de columna es similar a la de un arreglo de fila excepto que los elementos se separan mediante signos de punto y coma; por ejemplo,

z= [0; 0.1; 0.2; 0.3; 0.4; 0.5];

Una alternativa para definir esto mismo es agregar un apóstrofo a un arreglo de fila:

z= (0, 0.1, 0.2, 0.3, 0.4, 0.5+’;

El operador apóstrofo equivale al operador de transposición en el álgebra de matrices y vectores, así que convierte vectores de columna en vectores de fila y viceversa. Si se teclea z como orden se obtiene:

z =

0

0. 1

0. 2

0. 3

0. 4

0. 5

Si se define un solo elemento de un arreglo c, por ejemplo, c ( 8) = 11 ;

se supondrá c (i) = 0 para i=1 hasta 7. Por tanto, si teclea c como comando obtendrá

C =

0 0 0 0 0 0 0 11

Cuando y y x tienen la misma longitud y la misma forma (fila o columna), los

vectores y y x se pueden sumar, restar, multiplicar y dividir empleando los

operadores aritméticos de arreglos: z = x + y

z = x e y

z = x . * y

z = x . / y

que equivalen respectivamente a

Listado 1.12

for i=1:6; z(i) = x(i) + y(i); end

for i=1:6; z(i) =x(i) -y(i); end

for i=1:6; z(i) = x(i) *y(i); end

for i=1:6; z(i) = x8i) /y(i); end

Page 16: Analisis Numerico

Análisis Numérico y Programación

15 Ciencia, pasión y aventura

Las reglas para la suma y la resta son las mismas que para los vectores en el álgebra lineal. En cambio, .* y ./ son operadores nombrados para la multiplicación y la división de arreglos, respectivamente, y son distintos de la multiplicación y división de matrices y vectores. Si se omite el punto de .* o ./, el significado cambia totalmente. El operador de potenciación de arreglos se puede ilustrar con

g = z . ^ 1 . 2 ;

donde z es un vector de longitud 6, se coloca un punto antes del operador ^ y g se

convierte en un vector de la misma longitud. El enunciado anterior equivale a

for i=1:6; g(i) = z(i) ^1.2; end

donde el operador A no lleva antepuesto un punto. El tamaño de un arreglo puede incrementarse anexándole un elemento o un vector (o vectores). Por ejemplo, suponga

x =

2 3

El comando que sigue anexa 5 a x y hace que su longitud sea 3:

x = [x , 5]

Lo que devuelve x =

2 3 5

Podemos anexar un número, un vector o varios vectores a un vector de columna. Suponga que y es un vector de columna,

y=

2

3

entonces

y = [y ; 7]

produce

y =

2

3

7

Page 17: Analisis Numerico

Análisis Numérico y Programación

16 Ciencia, pasión y aventura

Aquí, 7 se añade al final del vector de columna. Observe que se utiliza un signo de

punto y coma para anexar a un vector de columna. También se puede anteponer un elemento a un vector; por ejemplo, x = [9 , x] produce

x =

9 2 3 5

donde x del lado derecho se definió previamente. De forma similar, [-1 ; y] produce

y =

-1

2

3

7

Un procedimiento inverso consiste en extraer una parte de un vector. Con la y anterior,

w = y (3 : 4)

define a w que equivale al tercer y cuarto elementos de y, a saber:

w =

3

7

Si no recuerda el tamaño de un vector, pregúntelo a la computadora. Para un vector

x = [9 , 2 , 3 , 5]

la consulta length (x)

recibe la respuesta ans =

4

La respuesta es la misma para un arreglo de columna. Definamos y = *9, 2 ,3+’; entonces, length (y) devolverá ans = 3. Por otro lado, si además de la longitud

se desea saber si el vector es de columna o de fila, se debe usar size. Por ejemplo,

size (y) devolverá

ans =

3 1

donde la primera cifra es el número de filas y la segunda es el número de columnas. Esta respuesta nos dice que y es una arreglo de 3 por 1, es decir, un vector de columna de longitud g ¡ 3.Para z=[9, 2, 3, 5], size (z) devolverá

Page 18: Analisis Numerico

Análisis Numérico y Programación

17 Ciencia, pasión y aventura

ans =

1 4

es decir, z es un vector de longitud 4.

Variables de cadena: Las variables de cadena son arreglos. Por ejemplo, una variable de cadena v definida por

v = ' glaciar '

equivale a v = * ‘g’ , ‘1’ , ‘a’, ‘c’ , ‘i’ , ‘a’ , ‘r’]

La variable v puede convertirse en una cadena de columna con

v = v’

que es g

l

a

c

i

a

r

Variables de arreglo bidimensional: Un arreglo bidimensional, que es lo mismo que una matriz en MATLAB, se puede definir especificando sus elementos. Por ejemplo, un arreglo de 3 por 3 se puede definir mediante

m = [0.1, 0.2, 0.3; 0.4, 0.5, 0.6; 0.7, 0.5, 0.9];

Observe que los elementos de una fila terminan con un signo de punto y coma. Desde luego, todas las filas deben tener el mismo número de elementos; si no es así, la definición no será aceptada. El enunciado anterior equivale a escribir

Listado 1.13

m(1 , 1)=0.l;

m(1 , 2)=0.2;

m(1 , 3)=0.3;

m(2 , 1)=0.4;

m (2 , 2 ) =0.5;

m ( 2 , 3 ) =0.6;

m (3 , 1 ) =0.7;

m(3 , 2)=0.8;

Page 19: Analisis Numerico

Análisis Numérico y Programación

18 Ciencia, pasión y aventura

m(3 , 3)=0.9;

Si tecleamos m como un comando obtenemos

m =

0.1000 0.2000 0.3000

0.4000 0.5000 0.6000

0.7000 0.8000 0.9000

Podemos expresar una columna o una fila completa de un arreglo bidimensional empleando un signo de dos puntos. Por ejemplo, m (1 , : ) y m ( : , 3) son la primera

fila de m y la tercera columna de m, respectivamente, y se tratan como vectores.

Por ejemplo, c (1 , :) = m( 3 , :);

c (2 , :) = m(2 , :);

c (3 , :) = m(1 , :);

producen c =

0.7000 0.8000 0.9000

0.4000 0.5000 0.6000

0.1000 0.2000 0.3000

Los arreglos bidimensionales se pueden sumar, restar, multiplicar y dividir con los operadores aritméticos de arreglos:

Listado 1.14a

c = a + b .

c = a - b

c = a .* b

c = a ./ b

Aquí, a y b son arreglos bidimensionales del mismo tamaño. Los enunciados anteriores equivalen a, respectivamente,

Listado 1.14b

for i=1 : 3

for j=1 : 3

c(i , j) = a(i , j) + b(i , j );

end

end

for i=1 : 3

Page 20: Analisis Numerico

Análisis Numérico y Programación

19 Ciencia, pasión y aventura

for j=1 : 3

c(i , j) = a(i , j) - b(i , j );

end

end

for i=1 : 3

for j=1 : 3

c(i , j) = a(i , j) * b(i , j );

end

end

for i=1 : 3

for j=1 : 3

c(i , j) = a(i , j) / b(i , j );

end

end

Observe que las expresiones del listado 1.14a son mucho más compactas y claras que las del listado 1.14b. El enunciado con el operador de potenciación de arreglos,

g = a . ^ 3

equivale a for i=1 : 3

for j=1 : 3

g(i , j) = a (i , j) ^ 3;

end

end

Los vectores de columna y los de fila son casos especiales de matrices; por tanto, los operadores de arreglos funcionan igual con los vectores que con las matrices. El empleo de los operadores aritméticos de arreglos tiene dos ventajas. En primer lugar, los programas son más cortos. En segundo lugar, la eficiencia computacional de MATLAB es mayor con la forma corta que cuando se escribe lo mismo empleando ciclos.

Enunciados if que comparan arreglos: Las variables de arreglos pueden

compararse en un enunciado if. Si suponemos que a y b son matrices del mismo

tamaño: (a) if a==b sólo se satisface si a (i , j ) ==b (i , j ) para todos los elementos.

(b) if a>=b sólo se satisface si a (i , j ) >=b (i , j ) para todos los elementos.

(c) if a~=b se satisface si a (i , j ) ~=b (i , j ) para al menos un elemento.

Page 21: Analisis Numerico

Análisis Numérico y Programación

20 Ciencia, pasión y aventura

Si se comparan dos variables de cadena de diferente longitud en un enunciado if,

ocurrirá y un error aritmético, porque los dos arreglos deben tener la misma longitud. Para poder comparar variables de cadena en enunciados if, será preciso

ajustar todas las variables a una longitud predeterminada anexando espacio; en blando. Por ejemplo, en lugar de

a = ' equidna '

b = ' tapir '

c = ' albatross '

d = ‘petrel’

debemos escribir

a = ' equidna '

b = ’ tapir '

b = 'albatross '

d = ' petrel '

Con esto ya podremos comparar a, b y c en enunciados if.

Sin embargo, una forma más fácil de realizar la tarea es con str2mat. Por ejemplo,

supongamos que las variables de cadena están dadas por t1 = 'digitalis'’

t2 = 'nicotiana'

t3 = 'basilicum'

t4 = ' lychnis'

t5 = ' chrysantemum'

Entonces, podemos organizar las variables en una sola matriz de cadenas con s = str2mat ( t1 , t2 , t3 , t4 , t5)

La primera fila de s se convierte en t1, la segunda en t2, y así sucesivamente, con

longitudes idénticas porque se añaden espacios en blanco a las cadenas más cortas.

1.5 FUNCIONES MATEMATICAS EN SOFTWARE

Al igual que otros lenguajes de programación, MATLAB tiene numerosas funciones matemáticas, desde las elementales hasta las de alto nivel. Las funciones elementales pueden agruparse en tres categorías:

(a) Funciones trigonométricas

(b) Otras funciones elementales

(c) Funciones que realizan tareas

Las funciones matemáticas en MATLAB presentan dos notables diferencias respecto de las de otros lenguajes de programación como Fortran o C: (1) las funciones matemáticas funcionan con variables complejas sin discriminación

Page 22: Analisis Numerico

Análisis Numérico y Programación

21 Ciencia, pasión y aventura

alguna y (2) las funciones matemáticas funcionan con argumentos vectoriales y matriciales. Argumentos complejos: Para ilustrar la forma en que las funciones de MATLAB trabajan con variables imaginarias o complejas, probemos

cos ( 2 + 3 * i )

donde i es el numero imaginario unitario, equivalente a la raíz cuadrada de -1. La

respuesta es ans =

-4.1896 - 9.l092i

En otro ejemplo, consideremos la función arco coseno, que es el inverso de la función coseno definido por

y = acos(x) = cos¯1(x)

El comando acos (0 . 5)

produce ans=

1.0472

El argumento x de acos(x) normalmente esta

limitado al intervalo -1 ≤ x ≤ -1 (asi es como trabaja

la funcion acos en Frontan). En MATLAB, en

cambio, acos acepta cualquier valor en - < x < porque los valores de acos(x) no estan limitados a valores reales de hecho si probamos

Acos(3)

entonces ans=

0 + 1 . 7627 i

Argumentos de arreglo: La mayor parte de las funciones de MATLAB puede aceptar vectores y matrices como argumentos. Por ejemplo, si

x =

1 2 3

9 8 7

entonces sin (x) producirá

ans =

0.8415 0.9093 0.1411

0.4121 0.9894 0.6570

Page 23: Analisis Numerico

Análisis Numérico y Programación

22 Ciencia, pasión y aventura

que es una matriz del mismo tamaño que x. El cálculo realizado equivale a

Listado 1.18

for i=1 : 2

for j =1 : 3

x(i , j) = sin( x ( i , j))

end

end

Si x es un arreglo de columna o de fila, sin (x) se convierte en un arreglo de

columna o de fila, según sea el caso.

1.6 FUNCIONES QUE REALIZAN TAREAS

Además de las funciones que calculan funciones matemáticas directas y que aparecen en la tabla 1.3, hay varias funciones que realizan tareas. Ordenar: La función sort reordena los elementos de un vector en orden

ascendente. Esto resulta útil en los casos en que datos en un orden aleatorio tienen que reacomodarse en orden ascendente. El argumento x puede ser un

vector de fila, un vector de columna o una matriz. Si x es una matriz, el

reordenamiento se realizará en cada columna. A continuación presentamos algunos ejemplos:

sort( [ 2 1 5 ] )

ans =

1 2 5

sort ( [2 1 , 5’)

ans =

l

2

5

Sort ( [ 9 1 5 ; 2 8 4 ] )

ans =

2 1 4

9 8 5

Sumatoria: sum (x) calcula la sumatoria de los elementos de un vector o matriz x.

Para los vectores tanto de fila como de columna, sum calcula el total de los

elementos. Si x es una matriz, se calcula la sumatoria de cada columna y se

Page 24: Analisis Numerico

Análisis Numérico y Programación

23 Ciencia, pasión y aventura

devuelve un vector de fila formado por las sumatorias de todas las columnas. A continuación damos unos cuantos ejemplos

sum ( [ 2 1 5] )

ans=

8

sum( [ 2 1 5} ' )

ans =

8

sum([ 2 1 5 ; 9 8 5 ])

ans =

11 9 10

Máximo y mínimo: max (x) encuentra el máximo en el vector x y min (x)

encuentra el mínimo, El argumento x puede ser un vector de fila o de columna o

una matriz. Si x es una matriz, la respuesta es un vector de fila que contiene el

máximo o mínimo de cada columna de x. (La regla es la misma que para sort y

sum.)

Números aleatorios: Podemos generar números aleatorios con rand. La forma

básica de la función es rand (n), donde n especifica el tamaño de la matriz de

números aleatorios que debe devolverse. Si n = 1, se devuelve un solo número

aleatorio; si n > 1, se devuelve una matriz n por n de números aleatorios. Si no se

especifica otra cosa, los números aleatorios así generados están en 0 ≤ x ≤ 1. Si se

invoca rand varias veces seguidas, se genera una secuencia de números

aleatorios. El generador de números aleatorios puede inicializarse proporcionando un número que sirva como semilla. La forma básica de la inicialización es

rand ( ’ seed ' , k )

donde k es la semilla. Si se utiliza la misma semilla, la secuencia de números

aleatorios es la misma. Por otro lado, si se desea que la secuencia difiera aleatoriamente cada vez que se inicie el generador de números aleatorios, se deberá proporcionar una semilla elegida al azar, que podría ser la hora en segundos o el número que ganó el premio mayor en la lotería de la semana, aunque no es fácil obtener números verdaderamente aleatorios a partir de fenómenos naturales o la vida diaria (véase el ejemplo 1.1). La semilla debe ser mayor que r la unidad.

Page 25: Analisis Numerico

Análisis Numérico y Programación

24 Ciencia, pasión y aventura

1.7 CREACION DE UN PROGRAMA EN FORMA DE ARCHIVO

La ejecución de comandos en una ventana sólo es apropiada si no hay que teclear mucho o si se desea explorar ideas de forma interactiva. Sin embargo, en los casos en que los comandos ocupan más de unas cuantas líneas es más conveniente que el usuario escriba un archivo M de guión o un archivo M de función, porque los archivos M se pueden guardar en disco y pueden corregirse tantas veces como sea necesario. El archivo M puede incluir cualquier cosa que el usuario pueda escribir directamente en la ventana de comandos. Se recomienda a los principiantes tratar de crear primero archivos M cortos y luego ejecutarlos. MAC y Windows: Si desea elaborar un archivo M nuevo en Macintosh o Windows, haga clic en NEW del menú File (Archivo) de la parte superior de la

ventana de comandos; aparecerá una ventana nueva. Como ejercicio, teclee el contenido del listado 1.1b, por ejemplo, y guárdelo como archivo M haciendo clic en SAVE AS del menú File. El nombre del archivo puede ser esfera . m. El archivo

puede ejecutarse desde la ventana de comandos tecleando esfera como un

comando; incluso puede ejecutarse desde otro archivo M incluyendo esfera en ese archivo. Otra forma de ejecutar el archivo en Macintosh es hacer clic en SAVE and

GO del menú File.

Estación de trabajo Unix: Abra MATLAB desde el directorio de trabajo donde se van a guardar los archivos M. Abra además un editor desde el mismo directorio. Se puede utilizar cualquier software de edición, como vi, emacs y jot. Se puede

editar un archivo en la ventana del editor y guardarse sin cerrar la ventana. El nombre de archivo debe tener la extensión .m en Unix. Cuando esté listo para

ejecutar el archivo M que guardó, pase a la ventana de MATLAB y ejecútelo tecleando el nombre del archivo sin la extensión. Si es necesario invocar comandos de Unix desde el entorno de MATLAB, teclee ! seguido del comando de

Unix. Esta es una forma de abrir un editor como vi o emacx.

Eco: Cuando se ejecuta un guión, lo normal es que los enunciados del archivo M no se exhiban en la pantalla. Sin embargo, si se activa el eco con la orden echo

on, los enunciados se exhibirán. De este modo, el usuario puede ver cuál parte del

archivo M se está ejecutando. Para desactivar el eco, teclee echo of f.

Enunciados de comentario: El signo % en un archivo M indica que los

enunciados que siguen al signo en la misma línea son comentarios y deben ignorarse durante los cálculos. Los comentarios que se añaden así a los archivos M pueden ayudar a explicar el significado de las variables y los enunciados.

Page 26: Analisis Numerico

Análisis Numérico y Programación

25 Ciencia, pasión y aventura

Ejemplo 1.1 Los números aleatorios pueden servir para crear juegos. El enunciado x=rand (1) genera un número aleatorio entre 0 y 1 y asigna ese número a x. Consideremos 13

cartas de espadas que se barajaron bien. La probabilidad de escoger una carta en particular de la pila es de 1/13. Escriba un programa que simule la acción de

escoger una carta de espadas con un número aleatorio. El juego debe continuarse devolviendo la tarjeta a la pila y barajándola otra vez después de cada juego. i!

Solución Puesto que la probabilidad de que un número aleatorio esté en un intervalo de tamaño dx es igual a dx, supondremos que si el número aleatorio está en

(n-1)/13<x<n/13 entonces se sacará la enésima carta; n puede encontrarse

multiplicando x por 13 y 5 redondeando al entero superior más cercano.

Desde luego, antes de utilizar rand es preciso inicializar la función con una semilla. Si utilizamos la misma semilla, se generará una secuencia idéntica de números aleatorios. Una forma de escoger una semilla es aprovechar el comando clock. Por

ejemplo, c=clock asigna a c un vector de fila de longitud 6. El producto de todos los

números desde el segundo hasta el último, es decir, c (2) *c (3) *c (4) *c (5) *c (6) ,

tiene aproximadamente 3e+7 combinaciones y cambia cada segundo durante todo

el año. El siguiente archivo M determina una carta cada vez que se ejecuta. El juego se repite respondiendo a la solicitud con r y termina si se teclea cualquier letra distinta de r. Este archivo M se guarda con el nombre List1_19 . m, así que puede

ejecutarse desde la ventana de comandos tecleando List1_19. Listado 1.19

c=clock;

k=c(2)*c(3)*c(4)*c(5)*c(6);

rand ( ' seed ' , k )

for k=1 : 2 0

n = ceil (13 * rand (1) ) ;

fprintf ( ‘ Número de carta sacada: % 3.0 f \ n’ , n)

disp ( ’ ’ )

disp ( ' Teclee r y pulse Return para repetir ')

r = input ( ' o cualquier otra letra para terminar ' , ' s ' ); ‘

if r ~= 'r’, break, end

Page 27: Analisis Numerico

Análisis Numérico y Programación

26 Ciencia, pasión y aventura

end

1 .8 CÓMÓ ESCRIBIR FUNCIONES DE USUARIO PROPIAS

Las funciones en MATLAB, que se guardan como archivos M independientes, equivalen a las subrutinas y funciones de otros lenguajes. Una función que devuelve una sola variable: Consideremos un archivo M de función para la siguiente ecuación:

( )

Suponiendo que el archivo M se guarda como demof_.m, su guión seria el siguiente

Listado 1.20

function y = demof_ (x)

y = ( 2 * x. ^ 3 + 7 * x . ^ 2 + 3 * x-1) ./ ( x. ^2 – 3 * x + 5 * exp (-x) );

Observe que el nombre del archivo M es idéntico al nombre de la función, que aparece a la derecha del signo de igual. En el archivo M se utilizan los operadores aritméticos de arreglos, así que el argumento x puede ser un escalar, un vector o una matriz. Una vez que se guarda demof_ . m como archivo M, se puede utilizar

desde la ventana de comandos o en otro archivo M. El comando y = demof_ ( 3)

produce y =

502 .1384

Si el argumento es una matriz, por ejemplo, demof_ ( [ 3 , 1 ; 0 , -1 ] )

El resultado también es una matriz:

ans =

5 0 2 . 1 3 8 4 -6 8 . 4 9 2 0

-0. 2 0 0 0 0. 0 5 6 8

Función que devuelve múltiples variables: Una función puede devolver más de una variable. Supongamos una función que evalúa la media y la desviación estándar de una serie de datos. Para devolver las dos variables utilizamos un vector en el miembro izquierdo del enunciado de la función; por ejemplo,

Listado 1.21

function [media , dvstd] = media_ds (x)

Page 28: Analisis Numerico

Análisis Numérico y Programación

27 Ciencia, pasión y aventura

n=length (x) ;

media = sum(x)/n;

dvstd = sqrt(sum(x.^2)/n – media.^2);

Para utilizar esta función, el miembro derecho del enunciado de llamada también debe ser un vector. El guión anterior debe guardarse como media__ds. m.

Entonces, x=[ 1 5 3 4 6 5 8 9 2 4 ];

[ m , d ] = media_ds(x)

produce

m =

4.7000

s =

2 . 3685

Función que utiliza otra función: El argumento de una función puede ser el nombre de otra función. Por ejemplo, supongamos una función que evalúa la media ponderada de una función en tres puntos como

( ) ( ) ( )

donde ( ) es la función que se nombrará en el argumento. El siguiente guión ilustra una función f_av . m que calcula la ecuación 1.7.2:

Listado 1.22

function mp = f _ av ( nombre _ f , a , b , c )

mp = ( feval ( nombre _ f , a ) + 2 * feval ( nombre _ f , b) ...

+ feval(nombre_f)c))/4;

En el guión anterior, nombre_f (una variable de cadena) es el nombre de la función

( ). Si es la función seno, nombre_f será ' sin’ . feval (nombre_f, x) es un comando

de MATLAB que evalúa la función llamada nombre_f para el argumento x. Por

ejemplo, y = feval('sin' ,x) equivale a y=sin(x). Ejemplo 1.2 Evalúe la ecuación 1.7.2 para la función definida por la ecuación 1.7.1 con a = 1, b =

2 y c = 3. La ecuación 1.7.1 se programó como demof_.m y se muestra en el listado

1.19.

Solución

Page 29: Analisis Numerico

Análisis Numérico y Programación

28 Ciencia, pasión y aventura

Suponemos que f_av.m (listado 1.22) se guardó como archivo M. Entonces, el

comando A = f _ av ( ' demof _ ' , 1 , 2 , 3 )

produce 89 . 8976

El número de argumentos de entrada y de salida de feval debe coincidir con el

formato de la función nombre__f. Por ejemplo, si la función nombre_f requiere

cuatro variables de entrada y devuelve tres variables de salida, el enunciado para llamar a feval sería

[ p , q , s] = feval (nombre_ f , u , v , w , z )

Depuración de archivos M de función: La depuración de archivos M de función es más dificil que la de archivos M de guión. Una de las causas es que no es posible ver los valores de las variables tecleando los nombres de las variables a menos que se utilicen órdenes de depuración. El método más básico pero eficaz para crear un archivo M de función consiste en convertir en comentario el enunciado de la función en la primera línea colocando % antes de la palabra function y probar el

archivo M como guión. Cuando haya depurado exhaustivamente el archivo M, reincorpore el enunciado de la función. El empleo de comandos de depuración sólo se recomienda a usuarios avanzados de MATLAB.

1.9 CÓMO GUARDAR Y CARGAR DATOS

Guardar y cargar: Si utiliza save sólo, así:

save

todas las variables se guardarán en el archivo por omisión matlab . mat. La orden

load es el inverso de save y recupera todas las variables guardadas por save.

Se puede especificar el nombre de archivo colocándolo después de save; por

ejemplo, save nombre_archivo

guarda todas las variables en el archivo llamado nombre_archive . mat. Cuando

quiera recuperar las variables, escriba load nombre_archivo

Si sólo desea guardar ciertas variables, escriba sus nombres después de nombre_archivo; por ejemplo,

save nombre_archivo a b c

En este ejemplo, a, b y c se guardan en el archivo llamado nombre_archivo. No

separe nombre_archivo y las variables con una coma. Todas las variables se

Page 30: Analisis Numerico

Análisis Numérico y Programación

29 Ciencia, pasión y aventura

guardan en formato binario de doble precisión. Cuando quiera cargar los datos contenidos en nombre_arichivo.mat teclee

load nombre_archivo

sin nombres de variables; a continuación se recuperarán a, b y c. Guardar y cargar en formato ASCII: Se puede utilizar save para escribir datos en formato ASCII. Los comandos load y save con la opción ASCII son importantes porque permiten exportar datos de MATLAB e importarlos en MATLAB. Si desea utilizar el formato ASCII, agregue -asciio /ascii después de los nombres de

las variables; por ejemplo, save datos. tmp x -ascii

guarda la variable x en ASCII de 8 dígitos en el archivo llamado datos. tmp. El

comando save puede guardar más de una variable; por ejemplo, x= [ 1 , 2 , 3 , 4]

y = [ -1 , -2 , -3 ]

save dat1.tmp x y -ascii

Si abre el archivo M dat1 . tmp, se verá así:

1 . 0000000e+00 2. 0000000e+00 3 . 0000000e+00 4 . 0000000e+00

-l .0000000e+00

42.0000000e+00

-3 .0000000e+00

El comando load lee un archivo de datos y lo guarda en una variable, pero la carga

de un archivo en formato ASCII no es exactamente el inverso de save en formato

ASCII. La razón es que si bien save en ASCII puede escribir múltiples variables, load

lee todo el archivo de datos y lo coloca en una variable. Además, el nombre del archivo se convierte en el nombre de la variable. Por ejemplo, cargamos un archivo llamado y_dat. e con

load y_dat . e

el contenido se carga en la variable llamada y_dat sea cual sea la extensión. Por

tanto, el archivo de datos y_dat debe estar sólo en uno de los siguientes formatos

de datos: (1) un solo número (2) un vector de fila (3) un vector de columna (4) una matriz

Si tiene necesidad de cargar múltiples variables, cada una deberá prepararse en un archivo de datos ASCII individual.

Page 31: Analisis Numerico

Análisis Numérico y Programación

30 Ciencia, pasión y aventura

Los archivos de datos preparados con Fortran o C en formato ASCII (o de texto) se pueden cargar con load siempre que la estructura de datos tenga una de las

cuatro formas indicadas.

UNIDAD 2: GRAFICAS CON SOFWARE MATEMATICO

Como la mayor parte de las ecuaciones matemáticas expresa relaciones

complicadas en una, dos, tres 0 más dimensiones, tratar de entenderlas sin

gráficas es casi lo mismo que tener los ojos vendados. El empleo de gráficas es

importante desde la educación primaria hasta la superior, así como para

ingenieros y científicos profesionales por la misma razón. En las presentaciones

profesionales, casi lodos los análisis matemáticos, científicos y de ingeniería se

presentan con gráficas.

Durante las últimas tres décadas, en las que Fortran dominó entre los lenguajes

de computación, las gráficas estuvieron desafortunadamente muy desligadas de

los cálculos. Por ello, muchos usuarios de Fortran se vieron obligados a leer los

resultados calculados en forma de listados de números.

Las gráficas son ahora una parte natural del entorno de computación con

MATLAB, y la graficación de los resultados de los cálculos puede efectuarse con

algunos comandos.

Se recomienda a los lectores graficar las funciones matemáticas con las que se

tope, así como los resultados de análisis. Tratar de entender las ecuaciones

matemáticas con gráficas es una forma agradable y muy eficiente de aprender

matemáticas. Este capítulo se escribió con la intención de ayudar al lector a hacer

precisamente esto.

Antes de desarrollar el capítulo, el lector debe tomar nota de lo siguiente. Algunos

comandos de gráficas siguen en vigor incluso después de haber terminado de

graficar y pueden interferir trabajos posteriores. Es posible que cl comportamiento

de MATLAB se haga impredecible después de utilizarse algunos comandos como

hold on o subplot, o que se interrumpa abruptamente la ejecución de un guión.

Se recomienda a los lectores borrar las variables y las ventanas de gráficas antes

de iniciar cualquier trabajo de graficación. Si aun así MATLAB se comporta de

forma extraña, salga por completo de MATLAB y ábralo otra vez.

Page 32: Analisis Numerico

Análisis Numérico y Programación

31 Ciencia, pasión y aventura

2.1 GRAFICACION SIMPLE

Graficar: Suponga que desea graficar un conjunto de puntos de datos,

( ) Es necesario preparar y en forma de arreglo idéntica, es

decir, convertirlos en arreglos de fila o de columna de la misma longitud. Los datos

se grafican con plot. Por ejemplo, ( ) ( ) , se grafica

con el listado 2.1

Listado 2.1

x= 0: 0.05:10;

y = sin(x).*exp (-0. 4*x)

plot (x, y)

Page 33: Analisis Numerico

Análisis Numérico y Programación

32 Ciencia, pasión y aventura

xlabel ('x') ; y1abel(‘y' )

También se pueden utilizar vectores de columna en los argumentos de plot, como

se muestra en el siguiente guión:

Listado 2.1

x= (0:0.05:10)’;

y = sin(x).*exp (-0. 4*x);

plot (x, y)

xlabel ('x') ; y1abel(‘y' )

Los dos guiones anteriores producen la misma gráfica, que se muestra en la

figura 2.1. Los rótulos de los ejes se imprimen mediante los comandos xlabel y

ylabel, que se explicarán mayor detalle posteriormente. La figura 2.2 se grafica con

el listado 2.3 que conecta una de puntos en un plano complejo.

Listado 2.3

p=0: 0.05: 8*pi;

z=(cos (p) + i*sin (2*p) ) .*exp (-O . O5*p) + 0. Ol*p;

plot (real (z) , imag(z))

xlabel('Re(z)');ylabe1('Im(z)')

Graficación únicamente con marcas: Los datos pueden graficarse sólo con

marcas sin conectados por líneas. Se dispone de cinco tipos de marcas o letras:

Si desea graficar con un solo tipo de marca, coloque el símbolo de la marca como

una cadena después de las coordenadas en los argumentos de plot. La gráfica

producida por el listado 2.4 se muestra en la figura 2.3.

Page 34: Analisis Numerico

Análisis Numérico y Programación

33 Ciencia, pasión y aventura

Listado 2.4

x = (0:0.4:l0)';

y=sin(x) .*exp (—0 . 4*x);

plot (x,y, ' +') ‘

xlabe1('x'); y1abe1('y')

Si desea graficar una función tanto con líneas

como con una marca, grafique dos veces: la

primera con líneas y la segunda sólo con marcas. Para graficar de este modo, el

último enunciado del listado 2.4 se cambia a plot (x, y , x, y , ’ +’ ) . El comando text

sirve para graficar con cualquier marca o letra; sin embargo, la posición de la

marca puede estar desplazada un poco de la posición real de punto de datos.

Tipos y colores de líneas: Se dispone de cuatro tipos de líneas:

El tipo de línea por omisión es el continuo. Si desea graficar con un tipo de línea

en particular, especifique la marca de línea después de las coordenadas; por

ejemplo,

plot ( x , y , ‘- -‘)

Se dispone de los siguientes colores:

Page 35: Analisis Numerico

Análisis Numérico y Programación

34 Ciencia, pasión y aventura

Utilice el símbolo del color igual que los tipos de línea en el argumento de plot; por

Ejemplo,

plot (x, y,’ 'g’ )

También es posible combinar marcas y colores:

plot ( x , y , '+g’) grafica los datos con marcas + de color verde.

Graficación de funciones con fplot: Otra forma de graficar funciones

individuales es con fplot (' nombre_f [xmin, xmax] ), donde nombre es el nombre de

la función o del archivo M de función que se desea graficar y xmín y xmax son los

límites de la gráfica. El máximo y el mínimo del eje y está determinado por el

máximo y el mínimo reales de la función; sin embargo, es posible ajustar los

límites de la gráfica con axis, que se explicará en breve.

Borrado de gráficas: clf borra todo lo que haya en la ventana de gráficos,

mientras que cla borra las curvas graficadas y redibuja los ejes.

Funciones implícitas: Si una función está en forma implícita, como por

ejemplo

( ) ( )

No se puede expresar como en función de ni como en función de . No

obstante, la curva se puede graficar utilizando contour. En la sección 2.3

detallaremos este procedimiento.

Eje: El mínimo y el máximo de las coordenadas, las

marcas de escala y los valores de las coordenadas en

las marcas de escala se determinan automáticamente.

Sin embargo, es posible modificar la forma del marco y el

mínimo y el máximo de las coordenadas con la orden

axis. Se puede redibujar una figura en forma cuadrada

con

axis ( ' square’)

Page 36: Analisis Numerico

Análisis Numérico y Programación

35 Ciencia, pasión y aventura

(véase la figura 2.4). Los ejes de coordenadas y las marcas de escala pueden

omitirse con

axis ( ' of f ’ )

Este efecto se cancela con axis ( ' on ' ) .

El máximo y el mínimo de las coordenadas en la gráfica se pueden especificar con

axis ( [x_min , x_max , y_mín , y_max] )

Las líneas que se salgan de los límites se recortarán. Este comando se utiliza

después de plot para poder modificar el área de visualización tantas veces como

se desee. Se sugiere al lector anexar axis ( [-2 , 6 , -0 .7 , 0 .71 ) al listado 2.4 para ver

cómo axis límita las fronteras de la figura.

Retícula: Se puede agregar una retícula a la gráfica con grid on. Por otro lado,

grid off elimina la retícula. El empleo de grid por sí solo activa y desactiva la retícula

alternadamente. El siguiente guión es un ejemplo del empleo de grid on:

Listado 2.5

X = (0:0.2:10)';

y=sin(x) .*exp(—O.4*x);

plot (x, y)

grid on

xlabel ('x' ) , ylabel ( ‘y’ )

(Véase la figura 2.5 producida por el listado 2.5.)

Gráficas polares: Podemos graficar una función en coordenadas polares con

polar. La figura 2.6 se grafica con el listado 2.6.

Listado 2.6

t = 0: .05:pi+.01;

y = sin (3*t) .*exp (‘0 . 3*t:);

polar (t , y)

title(‘Gráfica polar’) y

Page 37: Analisis Numerico

Análisis Numérico y Programación

36 Ciencia, pasión y aventura

gr id

Gráficas logarítmicas y semi logarítmicas: Las funciones pueden graficarse

en una escala log-log con loglog. (Véase el listado 2.7 y la figura 2.7.)

Listado 2.7

t= .1 : .1 :3 ;

x= exp(t);

y= exp(t.*sinh(t)) ;

loglog (x,y)

grid

xlabel (‘x’); ylabel (‘y’)

El listado 2.8 produce una gráfica semilogaritmica con en la escala logarítmica

Listado 2.8

t = . 1: . 1 : 3;

semilogy (t, exp(t.*t))

grid

xlabel(' t‘ ); ylabel ( 'exp(t. *t) ' );

De forma similar, el listado 2.9 produce una gráfica semilogarítmica con en la

escala logarítmica.

Listado 2.9

t = . 1 : . l z 3 ;

semilogx (t, exp (t . *t:))

gr i d

xlabel(’t') ; ylabel('exp(t.*t)');

Múltiples curvas: Si quiere graficar dos o más curvas con una sola orden plot,

escriba todos los conjuntos de coordenadas repetidamente en la orden plot:

Listado 2.10

x = 0 : O . O5 : 5 ;

Page 38: Analisis Numerico

Análisis Numérico y Programación

37 Ciencia, pasión y aventura

Y = sin (X) i

z = cos (x) ;

p1ot(x,y, x, z)

Se escogerán automáticamente tipos o colores de línea distintos para cada curva.

No obstante puede especificarse el color o el tipo de línea, o la marca, después de

cada par de coordenadas; Por ejemplo,

plot:(x,y, '- -' , x,z, '*')

plot(x,y’ ' : ' , x,z, '*g')

plot(x.y. ‘r’ , x,z. 'y’)

Los dos listados siguientes ilustran otra forma de graficar múltiples curvas con un

solo comando plot:

Listado 2.11

x = 0 : 0 . 05 : 5;

y(1, : ) = sin(x);

y(2, :) = cos(x);

plot (x, y)

Listado 2.12

x = (0:0.05:5) ';

y( : , l) = sin(x);

y( : , 2) = cos(x);

plot (x , y)

Retención: Hasta aquí hemos graficado todas las curvas en una sola

operación con un solo comando plot. Sin

embargo, a menudo resulta deseable agregar

una curva a una gráfica que ya se trazó. Esta

graficación adicional puede realizarse con el

comando hold on (véase la figura 2.8).

Page 39: Analisis Numerico

Análisis Numérico y Programación

38 Ciencia, pasión y aventura

Listado 2.13

X = 0 : 0 . 05 : 5;

y = sin (x) ;

plot (x , y) ;

hold on

z = cos (x) ;

plot(x , z , '- - ‘)

xlabel (’x’ ); ylabel ('y(-) , z (- -) ');

Una vez emitido el comando hold on, la gráfica permanece en la pantalla incluso si

se ejecuta otro guión; por tanto, lo prudente es colocar un comando hold of f tanto

al principio como al final del guión; por ejemplo,

Listado 2.14

Clear ; clf ; hold off

x = 0 : 0 . 05 : 5;

y = sin (x) ;

plot (x. y)

hold on

z = cos (X)

plot: (x, z)

hold off

Cuando se grafican varias curvas con hold on, es recomendable especificar

mínimos y máximos de las coordenadas en el dominio gráfico con el comando axis;

de lo contrario, los límites se determinarán por omisión con base en la primera

curva, cosa que podría causar recortes de las demás curvas.

El comando hold on también resulta muy importante cuando se está preparando

una gráfica que tarda mucho en dibujarse, por la siguiente razón: los comandos

para cambiar parámetros de las figuras, como los ejes, el mapa de color, los

Figura 2.8 dos curvas graficadas con hold on (listado 2.13)

Page 40: Analisis Numerico

Análisis Numérico y Programación

39 Ciencia, pasión y aventura

ángulos de perspectiva, el eje de color y otros, se pueden modificar después de

haber graficado una figura.

2.2 CONTORNO DE FUNCIONES BIDIMENSIONALES

Malla: Se puede definir una función bidimensional z = z(x,y) con puntos

discretos mediante

( )

donde , y , son puntos en los ejes y en orden

ascendente. Las intersecciones constituyen una retícula cartesiana. Como

ilustración, consideremos la retícula definida por

( )

( )

y valores funcionales definidos por

( )

La función anterior se graficó en la figura 2.13 con el listado 2.18.

Listado 2.18

clear, cl f

xa = -2 : . 2 : 2 ;

ya = -2 : . 2 : 2 ; ’

[x,y] = meshgrid (xa,ya);

z = x .* exp(-x. ^ 2 - y. ^ 2);

mesh (x , y , z)

title ( ‘Ésta es una gIáfica 3—D de z =

x * exp (’x‘2 - y"2) ')

xlabel ('x' ); ylabel ( ‘y’ ); zlabel ( ' z’);

En el listado 2. 1 8 utilizamos meshgrid para crear arreglos bidimensionales, y ,

donde x es un arreglo de las coordenadas de la retícula y y es un arreglo de las

coordenadas . Estos arreglos x y y sirven para calcular el arreglo bidimensional z.

Page 41: Analisis Numerico

Análisis Numérico y Programación

40 Ciencia, pasión y aventura

Es muy importante darse cuenta de la correspondencia que existe entre los

arreglos bidimensionales, x, y y z, y , respectivamente. El hecho es que

x (j , i) , y (j , i) y z (j , i) corresponden , respectivamente. Dicho de otro

modo, el primer índice de x, y y z cambia en la dirección y, en tanto que el segundo

índice cambia en la dirección .

Es preciso respetar esta regla si se calculan los elementos de z (j , i) con ciclos for

/end.

El comando mesh del guión anterior puede sustituirse por mesh (z) . El primer índice

de cambia en la dirección , mientras que el segundo lo hace en la dirección .

Contorno: Podemos utilizar contorno para graficar el contorno de una función

en un arreglo bidimensional. La sintaxis básica es

contour (x, y, z , nivel)

Aquí, z es el arreglo bidimensional de la función; x y y son, respectivamente, las

coordenadas y en arreglos bidimensionales, y nivel es un vector que contiene

los niveles de contorno. Las coordenadas x y y también pueden ser arreglos

unidimensionales, pero aquí también se aplica la regla antes mencionada respecto

de los índices de z; es decir, el primer índice de z cambia en la dirección de y,

mientras que el segundo índice lo hace en la dirección de x. Si la retícula está

equiespaciada, una forma más sencilla es contour ( z) , En este caso, el primero y

el segundo índices cambian en las direcciones y , respectivamente. Además,

puede sustituirse nivel por un entero, m, que se interpretará como el número de

niveles de contorno. Estos niveles se determinan dividiendo los valores mínimo y

máximo de z en m-1 intervalos.

La figura 2.14 muestra una gráfica de contorno

producida por el listado 2.19, en la que la función

graficada está definida por la ecuación 2.3.1 y es

la misma de la figura 2.13. Los valores de los

contemos de la figura se rotularon con clabel (h ,

’manual ’ ) , que permite al usuario indicar la

posición de los números con el ratón. Los niveles

Page 42: Analisis Numerico

Análisis Numérico y Programación

41 Ciencia, pasión y aventura

de contorno pueden rotularse automáticamente con clabel ( h) .

Listado 2.19

clear , clc, clf, axis ( ' squane‘)

xm=-2: .2:2; ym=‘2: .2:2;

[x, y] = meshgrid (xm, ym);

z = x .* exp(-x.‚2 - y."2);

zmax=max(max(z) ); Zmin=min(min (z) ) ;

dz = (Zmax-zmin) /10;

nivel = zmin + O . 5*dz: dz: zmax;

h=contour (x, y, z , nivel); clabel (h, ‘manual’ )

title(‘Gráfica de contorno hecha con contou1(x,y, z,nivel) ‘)

xlabel ('x' ); ylabel (‘y’)

El comando contour puede servir para graficar una función implícita como

( ) ( )

Para graficar la curva, reescribimos la_ ecuación así:

( ) ( ) ( )

y graficamos el contorno de un solo nivel que corresponde a f = 0 (véase la figura

2.15). El siguiente guión ilustra el procedimiento de graficación:

Listado 2.20

clear , clf

Page 43: Analisis Numerico

Análisis Numérico y Programación

42 Ciencia, pasión y aventura

xm = ’3:0.2:3; ym = ’2:0.2:1;

lx, y] = meshgi: id (xm, yrn);

f = y. ‘3 + exp(y) e tanh(x);

contour (x,y, f, [t], 0])

xlabel ('x' ); ylabel ('y')

Observe que en el guión anterior el vector [0 , 0] en los argumentos de contour sirve

para especificar el nivel del contorno. El único

contorno que nos interesa es el del nivel 0, pero los

niveles de contorno deben estar en forma de

vector, por lo que repetimos el cero.

Gráfica vectorial: En ocasiones, las

cantidades correspondientes a los puntos

de una retícula se dan en forma

vectorial. Por ejemplo, la

distribución de

velocidades e n un

flujo de fluido

bidimensional se pueden expresar mediante vectores de velocidad en los puntos

de la retícula. Los vectores en esos puntos pueden graficarse con quiver y

requieren dos componentes, uno para la dirección x y otro para la dirección y.

Suponga que estos componentes están dados por u y v, que son matrices del

mismo tamaño que x y y. Entonces, los vectores se graficarán con

quiver (x,y,u,v, s) ’

donde s es un factor de escala que es un parámetro del usuario para ajustar la

longitud de los vectores. La figura 2.16 ilustra el trazado de los vectores de

velocidad en un problema de flujo típico (llamado flujo de cavidad con impulso). La

figura muestra también curvas de las líneas de flujo hechas con contour. El

siguiente guión ilustra las partes esenciales del guion para graficar la figura 2.16.

% (Se omitió la parte anterior del guión en la que se

% calculan x, y, s, u y v.)

Page 44: Analisis Numerico

Análisis Numérico y Programación

43 Ciencia, pasión y aventura

clf

L= [-0 . 00577 z-D . 00577 z-O . O54 I 0, O . 0001, O. 00005) ;

c=contour (x, y, s, L); % s=función de flujo

clabel (c)

title ( ' función de flujo Re=4OO (retícula 51x51) ') »

xlabel ( ’ dirección x‘)

ylabel ( ' dirección y‘)

axis ( ’ square’)

hold on % u y v constituyen un vector.

quiver (x(1:2:ni,1:2,ni) , y(1:2:ni,1:2,ni) , …..

u(1:2:ni,1:2,ni) , v(l:2:ni,1:2,ni) , 4)

En el listado anterior, suponemos que x, y, u y v se calcularon en una parte anterior

del guión que no se muestra aquí.

2.4 RETÍCULA TRIANGULAR Y CONTORNOS

Una retícula triangular consta de elementos triangulares y su uso más común es

en el análisis de elementos finitos o de volúmenes finitos.

Graficación de una retícula triangular: Necesitamos los dos archivos de

datos llamados cell_da y point_da para trazar una retícula triangular. El primer

archivo incluye los datos de los elementos triangulares, y el segundo, las

coordenadas de los puntos nodales. (En FM 2-1 de la página 76 se explican con

mayor detalle los archivos.) Cuando se ejecuta el listado 2.21, aparecen dos

preguntas. La primera se refiere a si se desea numerar o no los elementos; teclee l

si desea hacerlo o 0 si no. La segunda pregunta se refiere a si se desea numerar o

no los puntos; acepte con 1 o niéguese con 0. La primera parte de la figura 2.17

muestra la retícula trazada.

Listado 2.21

% trazado de retícula triangular

cleaR: , clf

load cell_da

Page 45: Analisis Numerico

Análisis Numérico y Programación

44 Ciencia, pasión y aventura

load point_da

tri_grid(cell_da, point_da, 1.8)

Gráfica de contorno en una retícula triangular: Si tenemos una función

discreta definida en los puntos nodales de una retícula triangular, podemos trazar

su contomo con tri_cont de FM 2-2 (página 79). Para ejecutar este guión

necesitamos dos archivos de datos, cell_da y point_da (los mismos que usamos

en m i_cont), y un archivo de función adicional, f_da. La segunda parte de la figura

2.17 ilustra la gráfica de contorno producida por el listado 2.22 empleando tri_cont.

Listado 2.22

% Gráfica de contorno en una retícula t]: iangular

clear , clf

load cell_da

load point_da

load f__da

tri_cont (cell_da , point_da , f_da , l . 8)

RETÍCULA CURVILÍNEA Y CONTORNOS

Suponga que los valores funcionales de

( ) están dados en los puntos de una

retícula,

( )‟ Por

( )

donde

son

índices de puntos. El sistema de retícula es

una retícula cartesiana si sus líneas son

paralelas a los ejes de las coordenadas

cartesianas. Por otro lado, si la geometría

en cuestión es compleja podemos utilizar

puntos de retícula ajustados a fronteras

curvas, como se ilustra en la figura 2.18.

Page 46: Analisis Numerico

Análisis Numérico y Programación

45 Ciencia, pasión y aventura

Una retícula así se denomina

La retícula curvilínea y el contorno de se pueden trazar con g_cont de F M 2.3

(página 81). Su sintaxis es:

g_cont (x, y, f , nivel)

donde

x, y: las coordenadas de los puntos de la retícula.

f: arreglo bidimensional de los valores funcionales.

nivel: niveles del contorno en forma vectorial.

Como demostración, el lector podría ejecutar el siguiente guión:

Listado 2.23

clear , clf

[x, y, f] = tcLdata;

f_max = max (max (f) )

f_1‘nin = min (min ( f) )

kmax = 2 0;

fOI k=l : kmax

ELV (k) = (k-l) /kmax* (f_maxef_min) *0 9999 + f_min;

end

g_cont (x, y, f, ELV)

O %Para responde: automáticamente a la pregunta que hace

Page 47: Analisis Numerico

Análisis Numérico y Programación

46 Ciencia, pasión y aventura

g_cont

1 % Ídem

axis ( [-10, 15, -15, 10])

axis ( ' square’)

axi s ( ’ of f ' )

En el guión anterior, td_data es un archivo M de

función que está en FM 2.3 y que genera la reticula

y la función de ejemplo para fines de demostración.

La gráfica de contorno trazada por listado 2.23 se

muestra en la figura 2.19. Los datos f generados

por cd_data se pueden graficar con mesh como se

muestra en la figura 2.20 o con surf, que se explica

en la sección 2.6 pero no es posible utilizar contour

porque la retícula no es rectangular.

2.4 GRAFICACIÓN DE MALLA Y DE SUPERFICIES

En esta sección, estudiaremos los gráficos tridimensionales, que se han mejorado

notablemente en la nueva edición para estudiantes y en las últimas versiones

profesionales de MATLAB. que ya presentamos a mesh, aquí lo veremos con

mayor detalle.

Gráfica de malla de una matriz: La aplicación más sencilla de los gráficos

tridimensionales es la graficación de una matriz. Consideremos una matriz de

por . El elemento z(j, i) se considera el valor funcional en y en el

plano bidimensional. Definimos una matriz de muestra con

Listado 2.24

clear: , c l f

for i=1 : 4 % corresponde a la dirección

for j=1 :7 % corresponde a la dirección y

z(j,i) = sqrt(i"2 + j‚2);

end

Figura 2.19 ejemplo de una

gráfica de contorno

Page 48: Analisis Numerico

Análisis Numérico y Programación

47 Ciencia, pasión y aventura

end

mesh (z)

xlabel ( ' i ' )

ylabel ( ' j ' )

zlabel ( ' z ' )

Entonces,

mesh (z)

produce la gráfica de malla que se muestra en la figura 2.21.

Color por omisión: En una pantalla a color, las líneas que conectan los

puntos se colorean con el mapa de color por omisión hsv (iniciales en inglés de

matriz, saturación, valor). Se asigna rojo a los valores tanto máximo como mínimo

de z (i, j ) . Entre el mínimo el máximo, el máximo el color se determina

linealmente en el orden rojo, amarillo, verde, turquesa, azul, magenta, rojo.

2.5 GRÁFICOS INTERACTIVOS

El elemento fundamental de los gráficos interactivos es la capacidad de un

programa para leer las coordenadas del apuntador del ratón en cualquier posición.

Esto puede hacerse con ginput en uno de los siguientes formatos:

[x.y1 = ginput

[x,y,botón] = gínput

[x,y,botón] = ginput (n)

suponga que se hace clic con el ratón en cierto lugar dentro de una pantalla de

gráficos. Entonces, [x , y] = ginput acumulará un número ilimitado de puntos hasta

que se pulse la tecla return (intro), así que x y y se convertirán en vectores de

longitud igual al número de puntos acumulados. [x , y , botón] = ginput es lo mismo

excepto que también se registran los números de botón del ratón. Los números de

botón son l, 2 y 3, contando a partir del lado izquierdo del ratón. [x , y , botón] =

ginput (n) acumula n puntos, pero puede suspenderse pulsando la tecla retum.

El listado 2.31 ilustra el empleo de ginput. Cuando se ejecuta este listado, el

programa espera hasta que se hace clic con el ratón. Si se hace clic con el botón

izquierdo, se imprimirá una marca ‟+‟ roja en la posición del apuntador. De forma

Page 49: Analisis Numerico

Análisis Numérico y Programación

48 Ciencia, pasión y aventura

similar, si se acciona el botón del medio o el derecho, se imprimirá una marca ‟o‟

amarilla o una marca ‟ * ‟ verde, respectivamente. La ejecución termina si se hace

clic con el ratón cuando el cursor está dentro del cuadro en la esquina inferior

izquierda de la pantalla. La figura 2.35 ilustra las marcas graficadas con el listado

2.31.

Listado 2.31

clear: , clf , hold off

axis( [0, 10, 0, 10] )

hold on

plot([l.2.Z.l.1] , [2.2.3,3,2])

text (1, 1 .6 , ‘ Haga clic dentro del cuadro para terminar ’)

while 1

[x , y , boton] = ginput (l)

if boton=1, plot: (x,y, ' +x ' ) , end

if boton=2 , plot (x,y, ' oy’ ) , end

if boton=3 , plot: (x, y , ‘ *g’) , end

if x>1 S‘ x<2 & y>2 & y<3, bzealqend

end

hold off

UNIDAD 3: ALGEBRA LINEAL En MATLAB, las matrices, los vectores de columna y los vectores de fila se

introducen siguien ‟ las mismas reglas que los arreglos, mismas que se explicaron

en el capítulo 1. Por ejemplo, lama ‟

B= [

]

se introduce en MATLAB con

b= (1, 6; 5, 2);

Page 50: Analisis Numerico

Análisis Numérico y Programación

49 Ciencia, pasión y aventura

Un vector de columna o de fila se puede definir como una matriz de una columna o

una fila, respectivamente; por ejemplo,

c = *1 , 2+ ; (vector de fila)

d = [1 ; 7] ; (vector de columna)

Podemos transponer una matriz en MATLAB colocando un apóstrofo después de

la matriz; por ejemplo, con

e = b '

la matriz e se convierte en la transpuesta de la matriz b. Una matriz identidad de m

por m se genera con

s = eye (m)

De forma similar, una matriz nula de m por m es

s = zeros (m)

Una matriz nula de m por n se genera con s = zeros (m, n) . Escribimos una matriz

de m por n que consiste sólo en la unidad así:

w = ones (m , n)

Si a es una matriz que ya existe, zeros (size (a) ) y ones (size (a) ) producen,

respectivamente, la matriz nula y la matriz unidad del mismo tamaño que a.

Generamos una matriz aleatoria m por n con rand (m, n) (la sección 1.5 contiene

mayores detalles sobre los números aleatorios). Una matriz especial, llamada

matriz de Hílbert, se genera con hilb (m) (véase el „emplo 3.6). La multiplicación de

matrices en MATLAB se expresa con el operador de multiplicación;

por ejemplo,

b= [12; 43; O2];

d = [5 ; 1] ;

9 = b*d .

produce

g =

7

2 3

2

que corresponde al inciso (a) del ejemplo 3.2. La suma y la resta de matrices es

igual que en el de arreglos bidimensionales.

Page 51: Analisis Numerico

Análisis Numérico y Programación

50 Ciencia, pasión y aventura

MATRIZ INVERSA

Ahora que aprendimos a multiplicar matrices tanto mediante cálculos manuales

como con MATLAB, podemos estudiar el concepto de matrices inversas. Cuando

dos matrices cuadradas A y B satisfacen

AB=IoBA=1

donde I es la matriz identidad, A y B están en la relación inversa; es decir, A es el

inverso de B y B es el inverso de A. Por ejemplo,

A=[

] B=[

]

están en la relación inversa entre si, es decir

AB=[

] [

] = [

]

La inversa de una matriz M se escribe M“ ; por tanto, la relación anterior entre A y

B puede escribirse como A = y B = . Así, la ecuación 3.3.1 se puede

escribir como

= 1 y =1

Sólo las matrices cuadradas tienen inversos.

El inverso de un producto de matrices es igual al producto del inverso de las

matrices en el orden inverso. Por ejemplo, si W = ABC..G, donde A, B, G son

matrices cuadradas, entonces

= …

En MATLAB, el inverso de M se calcula con inv (M) . Por ejemplo, sea

A = [1 6 ; 5 2] ,

entonces,

B = inv (A)

produce „

Page 52: Analisis Numerico

Análisis Numérico y Programación

51 Ciencia, pasión y aventura

B =[

]

Para asegurarse de que B es el inverso de A, calculamos tanto AB como BA como

sigue:

A*B

ans =

[

]‟

B *A

ans =

[

]

El comando inv calcula el inverso de cualquier matriz cuadrada excepto cuando es

singular. Si MATLAB se niega a calcular el inverso, sabremos que la matriz es

singular. No obstante, merece la pena aprender a crear un ejemplo de matriz

singular. En una matriz „singular, al menos una fila (o columna) puede expresarse

restando o sumando otras filas (o columnas); por tanto, para crear una matriz

singular de 3 por 3, escribimos la primera y la segunda filas eligiendo números

arbitrarios, pero escribimos la tercera fila como la primera fila „multiplicada por una

constante más la segunda fila multiplicada por otra constante. El resultado - es

una matriz singular. Si ninguna fila (o columna) puede expresarse sumando o

restando otras filas (o columnas), todas las filas (o columnas) son linealmente

independientes y la matriz no es singular.

3.2 ECUACIONES LINEALES

Consideremos un conjunto de m ecuaciones con n incógnitas dado por „

A1.1x1 +a1,2x2+a1,3x3+…+a1nxn=y1

A2,1x1 +a2,2x2+a2,3x3+…a2,nxn=y2

Am,1x1+am,2x2+am,3x3+…am,nxn=ym

Page 53: Analisis Numerico

Análisis Numérico y Programación

52 Ciencia, pasión y aventura

donde ‟ son coeficientes conocidos, ‟ son incógnitas y; son términos

conocidos que se denominan términos no homogéneos (o términos fuente). " Las

ecuaciones lineales anteriores se pueden expresar de forma compacta como

Donde , y están definidos, respectivamente, por

A =[

]

X=[ ]

y=[ ]

La ecuación 3.4.2 también puede expresarse en la forma = donde A‟ es una

matriz de n por m y x‟ y y„ son vectores de fila. Las ecuaciones lineales

expresadas por la ecuación 3.4.2 se pueden agrupar en los siguientes tres casos:

Caso l: m = n .

Caso 2: m<n (ecuación subdeterminada)

Caso 3: m>n (ecuación sobredeterminada)

El caso l es el más común, con el número de ecuaciones igual al número de

incógnitas. En el caso 2, el número de ecuaciones es menor que el de incógnitas y

tenemos lo que se conoce como problema sub determinado. En el caso 3, el

número de ecuaciones es mayor que el número de incógnitas y tenemos un

problema sobre determinado. Esto ocurre en el ajuste de curvas y lo veremos en

el capítulo 8. En el caso l, la matriz es cuadrada. Para obtener la solución en

MATLAB, escribimos

x = A\y

Un mecanismo equivalente es

x = inv (A) *y

Sin embargo, el primer método es más eficiente desde el punto de vista

computacional (el tiempo de cómputo del segundo método en MATLAB es

aproximadamente 50% más largo que para el primero).

Si la ecuación se escribe en la forma de la ecuación 3.4.3, la solución se obtiene

en MATLAB con

Page 54: Analisis Numerico

Análisis Numérico y Programación

53 Ciencia, pasión y aventura

» z = y’ /A'

donde y‟ es un vector de fila y z también se convierte en un vector de fila. Las

siguientes expresiones producen el mismo resultado:

inv (A) *y

A ^ ( -1 ) *y

y ' * inv (A ' )

Los resultados de las primeras dos están en forma de vector de columna, mientras

que el de la última está en forma de vector de fila.

Ejemplo 3.4

Utilice MATLAB para obtener la solución de

Donde

A=[

] , Y=[ ]

Solución

Sea

A = [ 3 2 ; 1 -1 ] ;

Y = [-1 , 1] ';

Entonces,

x = A\y

produce

x =

0 . 2 000

-0 . 8 000

También, si escribimos

z = y ' / A '

Obtendremos la misma respuesta en forma de vector de fila como

z =

Page 55: Analisis Numerico

Análisis Numérico y Programación

54 Ciencia, pasión y aventura

0 . 2000 -0 . 8000

3.3 DETERMINANTES

El determinante es una cantidad importante asociada a una matriz cuadrada. De hecho, no podemos obtener una solución única de un conjunto no homogéneo de ecuaciones lineales si el determinante de la matriz de coeficientes es cero. Esto se debe a que, si por lo menos una ecuación de un conjunto de ecuaciones lineales no es linealmente independiente, el determinante es cero. Si el valor del determinante es extremadamente pequeño o grande, es señal de que hay errores graves en la solución de las ecuaciones. El determinante de una matriz también desempeña un papel importante cuando se calculan los valores propios de una matriz.

El determinante de la matriz A se denota por det(A) o lAl. En el caso de una matriz

de 2 x 2, el determinante de A se calcula como:

( ) [

]

Para una matriz de 3 x 3, el determinante es

( ) [

]

Es fácil memorizar la regla para una matriz de 3 por 3 como la regla del espagueti. En la figura 3.3, cada una de las tres líneas continuas conecta tres números. Los productos a lo largo de las líneas continuas tienen signo positivo en la ecuación 3.6.2. Los productos de los tres números a lo largo de las líneas punteadas tienen signo negativo en la ecuación 3.6.2. Sin embargo, la regla del espagueti no puede extenderse a una matriz dc 4 por 4 o mayor.

Una definición formal del determinante de una matriz A de orden n está dada por ( ) ∑ ( ) ( )

donde la sumatoria abarca todas las permutaciones del primer subíndice de a, y

( ) es + si y la permutación es par y — si es impar Si la matriz es una matriz triangular inferior 0 superior, 0 una matriz diagonal, el cálculo de la ecuación 3.6.3 se simplifica mucho. La matriz triangular inferior es

(3.63)

(3.62)

(3.61)

Page 56: Analisis Numerico

Análisis Numérico y Programación

55 Ciencia, pasión y aventura

una matriz en la que todos los elementos que están arriba de la línea diagonal son cero. La matriz triangular superior es aquella en la que todos los elementos que están abajo de los pivotes son cero. La matriz diagonal es un caso especial de la matriz triangular superior o inferior. Para estas matrices, la ecuación 3.6.3 se reduce a

( )

es decir, el determinante es igual al producto de todos los pivotes. Por ejemplo,

Si una matriz se expresa como un producto de matrices, digamos M = ABC...K, el detenninante de M es igual al producto de los determinantes de las matrices, o sea:

( ) ( ) ( ) ( ) ( ) Por tanto, cuando es necesario evaluar el determinante de una matriz es común transformar la matriz en un producto de las matrices para las cuales la evaluación del detemrinante es fácil.

Por ejemplo, si una matriz se descompone en el producto de , donde L es una matriz triangular inferior y es una matriz triangular superior, ( ) es igual a ( ) ( ). Otra alternativa para calcular el determinante de una matriz consiste en utilizar la eliminación hacia adelante del método de Gauss. Si queremos calcular un determinante en MATLAB utilizamos ( ) , donde A es una matriz cuadrada. La siguiente ilustración muestra el cálculo del determinante de una matriz de 3 por 3:

A =[3 , 4 , 1; 0 , 2 , 7; 5 , 1 , 2];

d = det (A)

d=

1 6 3

3.4 ELIMINACION DE GAUSS-JORDAN

La eliminación de Gauss—Jordan es una variación de la eliminación de Gauss mediante la cual se eliminan los números que están arriba y abajo de un pivote sin distinguir la eliminación hacia adelante de la sustitución hacia atrás. No obstante,

Page 57: Analisis Numerico

Análisis Numérico y Programación

56 Ciencia, pasión y aventura

el pivoteo sigue siendo necesario por la misma razón que lo es en la eliminación de Gauss. En la presente sección ilustraremos primero la resolución de una ecuación lineal por eliminación de Gauss-Jordan y luego aplicaremos este método a la inversión de una matriz. Una ventaja de la eliminación de Gauss-Jordan es que la explicación del algoritmo para calcular el inverso de una matriz se simplifica. Ejemplo 3.10 Resuelva el mismo problema del ejemplo 3.8 por eliminación de Gauss-Jordan.

Solución Comenzamos con la misma matriz aumentada que en el ejemplo 3,8. El procedimiento para el primer pivoteo es el mismo que se siguió en ese ejemplo, pero ahora después del primer pivoteo se normaliza la primera fila dividiéndola entre el pivote:

a =

1.0000 -2.7857 0.5714 1.7857

-0.0400 0.0400 0.1200 3.0000

-0.2400 1.2400 0.2800 0

A continuación se eliminan todos los elementos que están debajo del primer pivote restando (o sumando) un múltiplo de la primera fila:

a =

1.0000 -2.7857 0.5714 1.7857

0 0.0714 0.1429 3.0714

0 0.5714 0.1429 0.4286

El segundo pivote se compara con los elementos que están abajo. Puesto que la magnitud del segundo pivote es menor que la del elemento que está abajo, es necesario pivotear. Luego, la segunda fila se divide entre su propio pivote:

a =

1.0000 2.7857 0.57l4 1.7857

0 1.0000 0.2500 0.7500

0 -0.07l4 0.1429 3.0714

Todos los elementos que están arriba y abajo del segundo pivote se eliminan restando (o sumando) un múltiplo de la segunda fila:

a=

l.0000 0 40.1250 3.8750

0 1.0000 -0.2500 0.7500

0 0 0.1250 3.1250

La tercera fila se normaliza dividiéndola entre su propio pivote:

Page 58: Analisis Numerico

Análisis Numérico y Programación

57 Ciencia, pasión y aventura

a =

1.0000 0 -0.1250 3.8750

0 1.0000 40.2500 0.7500

0 0 1.0000 25.0000

Los elementos que están arriba del tercer pivote se eliminan restando (o sumando) la tercera fila multiplicada por el número que se va a eliminar. Ahora, la matriz aumentada es

a =

1.0000 0 0 7.0000

0 1.0000 0 7.0000

0 0 1.0000 25.0000

Aquí, las primeras tres columnas forman una matriz identidad, mientras que la última columna es la solución.