Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Manual Octave
Manual Octave
Licencia
Copyright(c)2006JosMaraValienteCifuentes
Permission is granted to copy, distribute and/or modify this document underthetermsoftheGNUFreeDocumentationLicense,Version1.2or any later version published by the Free Software Foundation; with no InvariantSections,noFrontCoverTexts,andnoBackCoverTexts.Acopy ofthelicenseisincludedinthesectionentitled"GNUFreeDocumentation License",attheendofthedocument.
Pg -1-
1. Operaciones Bsicas 1.1. Operaciones con matrices y vectores 1.1.1. Introduccin de matrices desde el teclado 1.1.2. Operaciones con matrices 1.1.3. Tipos de datos 1.1.3.1. Nmeros reales de doble precisin 1.1.3.2. Nmeros Complejos 1.1.3.3. Cadenas de caracteres 1.1.3.4. Otras formas de definir matrices 1.1.3.4.1 Tipos de matrices predefinidos 1.1.3.4.2 Formacin de una matriz a partir de otras 1.1.3.4.3 Direccionamiento de vectores y matrices a partir de vectores 1.1.3.4.4 Operador <<Dos Puntos>> (:) 1.1.3.4.5 Definicin de matrices y vectores desde fichero 1.1.3.5. Operadores Relacionales 1.1.3.6. Operadores Lgicos 1.2. Funciones de Librera 1.2.1 Caractersticas Generales de las funciones de librera 1.2.2. Funciones matemticas elementales que operan de modo escalar 1.2.3. Funciones que actan sobre matrices 1.2.3.1 Funciones elementales 1.2.3.2 Funciones Especiales 1.2.3.3 Funciones de Factorizacin y/o Descomposicin Matricial 1.3. Ms sobre operadores relacionales con vectores y matrices 1.4. Otras funciones que actan sobre vectores y matrices 2. Otros tipos de datos de GNU Octave 2.1. Cadenas de caracteres 2.2 Hipermatrices (arrays de ms de dos dimensiones) 2.2.1 Definicin de Hipermatrices
Pg -2-
Manual de Iniciacin a GNU Octave 2.3 Estructuras 2.3.1 Creacin de Estructuras 2.3.2 Funciones para operar con Estructuras 2.4 Vectores o matrices de celdas (Cell Array) 2.4.1 Creacin de vectores y matrices de Celdas 2.4.2 Funciones para trabajar con vectores y matrices de celda 3. Programacin en GNU Octave 3.1. Bifurcaciones y bucles 3.1.1. Sentencia IF 3.1.2. Sentencia SWITCH 3.1.3. Sentencia FOR 3.1.4. Sentencia DO-UNTIL 3.1.5. Sentencia WHILE 3.1.6. Sentencia BREAK y CONTINUE 3.2 Ficheros *.m 3.2.1 Ficheros de Comandos (SCRIPTS) 3.2.2 Definicin de Funciones 3.2.3. HELP para las funciones de usuario 4. Grficos bidimensionales 4.1 Funciones grficas 2D elementales 4.1.1 Funcin PLOT 4.1.2 Estilos de Lnea y Marcadores para PLOT 4.1.3 Aadir Lneas a un grfico ya existente 4.1.4 Comando SUBPLOT 4.1.5 Control de los Ejes 4.2 Control de ventanas grficas: Funcin Figure 4.3 Otras funciones grficas 2-D 5. Grficos tridimensionales 5.1 Tipos de funciones grficas tridimensionales 5.1.1 Dibujo de lneas: Funcin PLOT3 5.1.2 Dibujo de mallados: Funciones MESHGRID, MESH Y SURF 5.1.3 Dibujo de lneas de contorno: Funcin CONTOUR 5.2. Elementos Generales: Ejes, Puntos de vista, lneas ocultas,
Pg -3-
Manual de Iniciacin a GNU Octave 6. Otros aspectos de GNU Octave 6.1 Guardar variables y estados de una sesin: Comandos save y load 6.2 Guardar sesin: Comando diary 6.3 Medida de tiempos y de esfuerzo de clculo 6.4. Funciones de funcin 6.4.1 Integracin numrica de funciones 6.4.2 Integracin Numrica de Ecuaciones Diferenciales Ordinarias
Pg -4-
1. Operaciones Bsicas
octave:31> a=[1 1; 2 5]
1 2
1 5
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
Pg -5-
Manual de Iniciacin a GNU Octave sencilla operacin con a es hallar su matriz traspuesta. En GNU Octave, el apstrofo (') es el smbolo de trasposicin matricial. Para calcular a (traspuesta de a) basta teclear lo siguiente (se aade a continuacin la respuesta del programa):
octave:32> a ans =
1 1
2 5
Como el resultado de la operacin no ha sido asignado a ninguna otra matriz, GNU Octave 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 podra haberse asignado el resultado a otra matriz llamada b. Ahora vamos a definir una matriz b diferente para hacer operaciones bsicas con estas 2 matrices:
octave:32> b=[7 6; 8 3] b =
7 8
6 3
Comenzamos con las operaciones ms bsicas que podemos encontrar, la suma y la resta de matrices:
octave:33> a + b ans =
8 10
7 8
octave:34> a -b ans =
-6 -6
-5 2
Si realizamos la multiplicacin de matrices con el operando * tendremos que tener cuidado con que el nmero de columnas de la primera matriz debe coincidir con el nmero de filas de la segunda: Pg -6-
15 54
9 27
Tambin podemos utilizar una multiplicacin elemento a elemento, que aunque no tiene demasiado sentido como multiplicacin de matrices, si que es muy utilizable en el caso de que la matriz no sea ms que un conjunto ordenado de valores.
octave:36> a .* b ans =
7 16
6 15
A continuacin vamos a definir una nueva matriz a a partir de una funcin que genera valores aleatorios entre 0 y 1.
octave:4> a=rand(3); #generar una matriz aleatoria de 3x3 octave:5> a a =
Vamos ahora a crear una matriz 3x3 para realizar nuevos clculos a partir de una matriz ms manejable si queremos comprobar a mano los datos que creamos.
octave:6> a=[1 2 1;1 2 3;4 3.4 4.5] a =
Pg -7-
Si los valores no son exactos podemos utilizar el comando round() ya que debido a los errores de aproximacin en los clculos podemos encontrar valores como
2.3e-109 que representa un valor extremadamente pequeo.
Si queremos comentar las lneas de cdigo que ejecutamos, a continuacin de la operacin podemos poner un comentario anteponiendo el carcter # o %
octave:10> c=a*b #podemos ver que la matriz c es la matriz identidad
2 0 0 octave:50> b=[2 0 0] b =
2 0 0
Como podemos observar, podemos definir vectores fila y vectores columna, con slo hacer la traspuesta del vector en la definicin. Tambin podemos definir un vector columna como si hicieramos una matriz de 1xn
octave:46> b=[1;0];
Como podemos ver, no hemos obtenido resultado tras realizar la operacin; esto es debido a que hemos puesto un ; al final de la lnea de comando, esto hace que no salga por pantalla lo que hemos ejecutado, cosa que resulta muy til cuando las Pg -8-
Manual de Iniciacin a GNU Octave matrices/vectores son de un nmero muy grande (100, 1000, ) y por lo tanto, difciles de manejar visualmente. En GNU Octave se accede a los elementos de un vector poniendo el ndice entre parntesis (por ejemplo x(3) x(i)). Los elementos de las matrices se acceden poniendo los dos ndices entre parntesis, separados por una coma (por ejemplo A(1,2) A(i,j)). Las matrices se almacenan por columnas (aunque se introduzcan por filas, como se ha dicho antes), y teniendo en cuenta esto puede accederse a cualquier elemento de una matriz con un slo subndice. Por ejemplo, si A es una matriz (3x3) se obtiene el mismo valor escribiendo A(1,2) que escribiendo A(4).
Pg -9-
.* 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. 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. Veamos un ejemplo del uso del divisor:
octave:45> #vamos a resolver un sistema de ecuaciones octave:45> #x+y=1 octave:45> #2x+5y=0 octave:45> a=[1 1;2 5]; octave:46> b=[1;0]; octave:47> x=inv(a)*b x = 1.66667 -0.66667
Pg -10-
1.66667 -0.66667
Vase el siguiente ejemplo de tres ecuaciones formadas por una recta que no pasa por el origen y los dos ejes de coordenadas:
1 1 0
2 0 1
b =
2 0 0
0.33333 0.66667
resto =
Pg -11-
0.185185 1.259259
-0.037037 -0.851852
9.0000 -2.0000
9.0000 -3.0000
0.14286 0.25000
0.16667 1.66667
7.00000 4.00000
6.00000 0.60000
7.00000 4.00000
6.00000 0.60000
Pg -12-
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 cmo trabaja GNU Octave con estos nmeros y los casos especiales que presentan. GNU Octave mantiene una forma especial para los nmeros muy grandes (ms grandes que los que es capaz de representar), que son considerados como infinito. Por ejemplo, obsrvese cmo responde el programa al ejecutar el siguiente comando:
octave:52> 1/0 warning: division by zero ans = Inf
As pues, para GNU Octave el infinito se representa como inf Inf. GNU Octave tiene tambin una representacin especial para los resultados que no estn definidos como nmeros. Por ejemplo, ejectense los siguientes comandos y obsrvense las respuestas obtenidas:
octave:51> 0/0 warning: division by zero ans = NaN
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 GNU Octave, pues permiten controlar la fiabilidad de los resultados de los clculos matriciales. Los NaN se propagan al realizar con ellos cualquier operacin aritmtica, por ejemplo, cualquier
Pg -13-
Manual de Iniciacin a GNU Octave nmero sumado a un NaN da otro NaN. GNU Octave tiene esto en cuenta. Algo parecido sucede con los Inf. Podemos encontrar 3 variables predefinidas por GNU Octave que nos dan los valores mximos y mnimos de este tipo de datos: eps devuelve la diferencia entre 1.0 y el nmero de coma flotante
inmediatamente superior. Da una idea de la precisin o nmero de cifras almacenadas. En un computador, eps vale 2.2204e-016.
realmin
(1.7977e+308)
Como podemos ver, se pueden definir tanto en mayscula como en minscula, y que no es necesario el uso del operador * para multiplicarlo por un escalar. Debemos tener la precaucin de no redefinir la variable i o j, ya que nos podra llevar a equvocos.
octave:63> i=2 i = 2
Es importante advertir que el operador de matriz transpuesta (), aplicado a matrices complejas, produce la matriz transpuesta conjugada. Existe una funcin que
Pg -14-
Manual de Iniciacin a GNU Octave permite hallar simplemente la matriz conjugada (conj()) y el operador punto y apstrofo (.) que calcula simplemente la matriz transpuesta.
octave:78> conj(a) ans = 1 - 1i
Esta funcin conj() puede ser empleada con escalares debido a que podemos entender dicho escalar como una matriz de 1x1.
Debido a que para su uso es necesario un conocimiento previo de las funciones orientadas a matrices, postpondr otras explicaciones hasta que se hayan explicado stas, al igual que con los strings, se postpone la explicacin de hipermatrices, structs y cell arrays. Ya han aparecido algunos ejemplos de variables y expresiones matriciales. Ahora se va a tratar de generalizar un poco lo visto hasta ahora. Una variable es un nombre que se da a una entidad numrica, que puede ser una matriz, un vector o un escalar. El valor de esa variable, e incluso el tipo de entidad numrica que representa, puede cambiar a lo largo de una sesin de GNU OCTAVE o a lo largo de la ejecucin de un programa. La forma ms normal de cambiar el valor de una variable es colocndola a la izquierda del operador de asignacin (=). Una expresin de GNU OCTAVE 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 GNU OCTAVE llamada ans (de answer) que almacena el ltimo resultado obtenido. Se considera por defecto que una expresin termina cuando se pulsa intro. Si se desea que una expresin contine en la lnea siguiente, hay que introducir tres puntos (...) antes de
Pg -15-
Manual de Iniciacin a GNU Octave pulsar intro. 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 pantalla. Esta posibilidad es muy interesante, 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, GNU OCTAVE distingue entre maysculas y minsculas en los nombres de variables. 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 del ordenador. Cuando se quiere tener una relacin de las variables que se han utilizado en una sesin de trabajo se puede utilizar el comando who. Existe otro comando llamado whos que proporciona adems informacin sobre el tamao, la cantidad de memoria ocupada y el carcter real o complejo de cada variable.
El comando clear tiene varias formas posibles: 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.
Pg -16-
octave:84> eye(2)
1 0
0 1
ans =
octave:83> zeros(3,5)
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
ans =
octave:85> zeros(2)
0 0
0 0
ans =
ones(3) forma una matriz de unos de tamao (3x3) ones(3,4) idem de tamao (3x4)
octave:87> ones(3,4)
1 1 1
1 1 1
1 1 1
1 1 1
Pg -17-
Columns 1 through 8:
1.0000 8.8750
2.1250
3.2500
4.3750
5.5000
6.6250
7.7500
Column 9:
10.0000
valores espaciados
rand(3) forma una matriz de nmeros aleatorios entre 0 y 1, con distribucin uniforme, de tamao (3x3) rand(2,5) idem de tamao (2x5) randn(4) forma una matriz de nmeros aleatorios de tamao (4x4), con distribucin normal, de valor medio 0 y varianza 1. magic(3) crea una matriz (3x3) con los nmeros 1, 2, ... 3*3, con la propiedad de que todas las filas y columnas suman lo mismo.
8 3 4
1 5 9
6 7 2
compan(pol) construye una matriz cuyo polinomio caracterstico tiene como coeficientes los elementos del vector pol (ordenados de mayor grado a menor).
-2 1
-1 0
Hay ms tipos predefinidos de matrices, podemos encontrar en la ayuda todos estos tipos y otros muchos ms con solo hacer help i matrix. Pg -18-
zeros(size(A)) forma una matriz de ceros del mismo tamao que una matriz A previamente creada.
0 0 0
0 0 0
0 0 0
ones(size(A)) dem con unos A=diag(x) forma una matriz diagonal A cuyos elementos diagonales son los elementos de un vector ya existente x. x=diag(A) forma un vector x a partir de los elementos de la diagonal de una matriz ya existente A.
Pg -19-
1 2 5
1 0 0
0 2 0
0 0 5
triu(A) forma una matriz triangular superior a partir de una matriz A (no tiene por qu ser cuadrada).
1 0 0
2 2 0
1 5 5
ans =
octave:109> tril(a)
1 3 6
0 2 7
0 0 5
Pg -20-
rot90(A,k) Gira k*90 grados la matriz rectangular A en sentido antihorario. k es un entero que puede ser negativo. Si se omite, se supone k=1
1 2 1
5 2 3
5 7 6
ans =
octave:114> flipud(a)
6 3 1
7 2 2
5 5 1
Un caso especialmente interesante es el de crear una nueva matriz componiendo como submatrices otras matrices definidas previamente. A modo de ejemplo, vamos a realizar la matriz generadora de un cdigo ortogonal con M=2:
octave:124> a=[0 0;0 1]; octave:125> h2=[a a;a not(a)] h2 =
0 0 0 0
0 1 0 1
0 0 1 1
0 1 1 0
Pg -21-
octave:127> a=rand(2,5) a =
0.253124 0.081242
0.517686 0.079172
0.089229 0.841718
0.382511 0.649800
0.177737 0.634496
0.253124
0.081242
0.089229
Podemos ver que hemos obtenido las posiciones 1, 2 y 5 de la matriz a, que debemos contar teniendo en cuenta que la matriz se recorre por columnas y no por filas. Si queremos ver un elemento concreto de la matriz, podemos ejecutar lo siguiente:
octave:132> a(2,1) ans = 0.081242
Creamos esta nueva matriz a para que sea ms fcil seguir los valores:
octave:133> a=randn(4)*10 a =
Pg -22-
-17.50361
-0.63861
4.61985
-0.69713
1.40557
25.56103
5.62650
Para ver el ltimo elemento de una matriz podemos usar el direccionamiento end:
octave:139> a(end,end) ans = 1.2185
10
Pg -23-
Manual de Iniciacin a GNU Octave En cierta forma se podra 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 va entre el valor inferior y el superior, pero podemos hacer que el incremento sea negativo, o que se haga con un incremento mayor o menor:
octave:142> x=10:-1:1 x =
10
Nota: Tenemos que estar dentro del directorio de trabajo o incluir el directorio donde encontrar la funcin dentro del path
Pg -24-
< menor que > mayor que <= menor o igual que >= mayor o igual que == igual que ~= distinto que
Obsrvese que, salvo el ltimo de ellos, coinciden con los correspondientes operadores relacionales de C. Sin embargo, sta es una coincidencia ms bien formal. En GNU Octave los operadores relacionales pueden aplicarse a vectores y matrices, y eso hace que tengan un significado especial. Al igual que en C, si una comparacin se cumple el resultado es 1 (true), mientras que si no se cumple es 0 (false). Recprocamente, 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 GNU Octave 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.
octave:147> a=7; octave:148> b=8; octave:149> a<b ans = 1 octave:155> a==b ans = 0
Pg -25-
Obsrvese que estos operadores lgicos tienen distinta notacin que los correspondientes operadores de C (&&, || y !). Los operadores lgicos se combinan con los relacionales para poder comprobar el cumplimiento de condiciones mltiples.
octave:165> a=true a = 1 octave:166> b=not(a) b = 0 octave:167> c=a&b c = 0 octave:168> c=a|b c = 1
Pg -26-
GNU Octave posee un gran nmero de funciones integradas y de funciones definidas por el usuario, las primeras son funciones optimizadas para Octave, las segundas, con extensin *.m son funciones definidas en ficheros, que pueden ser: o Definidas por GNU Octave o Definidas por grupos/usuarios desinteresados que ofrecen su cdigo a los dems usuarios de GNU Octave o Definidas por el propio usuario, para su uso y/o comparticin con otros usuarios.
function y=prueba(x)
y=x+3;
endfunction
Podemos ver que esta funcin es solamente la funcin de una recta, cuya pendiente es de 45 y desplazada 3 unidades. y : es el valor de retorno. prueba : es el nombre de la funcin. x : es el argumento de entrada. Una caracterstica de GNU OCTAVE es que las funciones que no tienen argumentos no llevan parntesis, por lo que a simple vista no siempre son fciles de distinguir de las simples variables. Ejemplo:
#! hello -qf printf("hello, world \n")
Pg -27-
octave:1> hello
hello, word
Los nombres de las funciones de GNU Octave no son palabras reservadas del lenguaje. Es posible crear una variable llamada sin o cos, que ocultan las funciones correspondientes. Para poder acceder a las funciones hay que eliminar (clear) las variables del mismo nombre que las ocultan. Podemos encontrar gran variedad de tipos de funcin segn lo que resuelvan: 1.- Funciones matemticas elementales. 2.- Funciones especiales. 3.- Funciones matriciales elementales. 4.- Funciones matriciales especficas. 5.- Funciones para la descomposicin y/o factorizacin de matrices. 6.- Funciones para anlisis estadstico de datos. 7.- Funciones para anlisis de polinomios. 8.- Funciones para integracin de ecuaciones diferenciales ordinarias. 9.- Resolucin de ecuaciones no-lineales y optimizacin. 10.- Integracin numrica. 11.- Funciones para procesamiento de seal.
Los argumentos actuales de estas funciones pueden ser expresiones y tambin llamadas a otra funcin.
-0.85065 0.52573
0.52573 0.85065
Pg -28-
-0.23607 0.00000
0.00000 4.23607
la funcin eig() calcula los valores y vectores propios de la matriz cuadrada A. Los vectores propios se devuelven como columnas de la matriz vector_propio, mientras que los valores propios son los elementos de la matriz diagonal valor_propio.
o
Las operaciones de suma y/o resta de una matriz con un escalar consisten 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 sobre la funcin de ese nombre.
Manual de Iniciacin a GNU Octave o sqrt(x) : raz cuadrada o round(x) : redondeo hacia el entero ms prximo o fix(x) : redondea hacia el entero ms prximo a 0 o floor(x) : valor entero ms prximo hacia - o ceil(x) : valor entero ms prximo hacia + o gcd(x) : mximo comn divisor o lcm(x) : mnimo comn mltiplo o real(x) : partes reales o imag(x) : partes imaginarias o abs(x) : valores absolutos
o
En realidad estas funciones se pueden aplicar tambin a matrices, pero en ese 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.
Pg -30-
1 - 1i 2 - 3i
1 - 2i 2 - 1i
1 + 1i 2 + 3i
1 + 2i 2 + 1i
o v = poly(A) devuelve un vector v con los coeficientes del polinomio caracterstico de la matriz cuadrada A
octave:35> x=[1 2 1]; octave:36> v=poly(x) v =
-4
-2
o t = trace(A) devuelve la traza t (suma de los elementos de la diagonal) de una matriz cuadrada A
octave:37> t=trace(c) t = 2
Pg -31-
Manual de Iniciacin a GNU Octave o [m,n] = size(A) devuelve el nmero de filas m y de columnas n de una matriz rectangular A
octave:38> [m,n]=size(c) m = 2 n = 2
Pg -32-
octave:43> [L,U]=lu(a) L =
U =
Pg -33-
2.00000 0.50000
2.00000 0.00000
o d = det(A) devuelve el determinante d de la matriz cuadrada A. Equivale a d=det(L)*det(U) o E = rref(A) reduccin a forma de escaln (mediante la eliminacin de Gauss con pivotamiento por columnas) de una matriz rectangular A. Slo se utiliza la diagonal y la parte triangular superior de A. El resultado es una matriz triangular superior tal que A = U'*U.
octave:46> a=[2 1 3 0;1 2 1 1;1 1 1 3]; octave:47> e=rref(a) e =
o c = rcond(A) devuelve una estimacin del recproco de la condicin numrica de la matriz A basada en la norma sub-1. Si el resultado es prximo a 1 la matriz A est bien condicionada; si es prximo a 0 no lo est. Funciones basadas en el clculo de valores y vectores propios:
o [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). o [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). Funciones basadas en la descomposicin QR:
Pg -34-
Manual de Iniciacin a GNU Octave o [Q,R] = qr() descomposicin QR de una matriz rectangular. Se utiliza para sistemas con ms ecuaciones que incgnitas.
octave:51> a=[1 1 1 1;1 1 2 4; 1 2 1 2; 1 2 2 3]; octave:52> [q,r]=qr(a); octave:53> q q =
octave:54> r r =
o B = null(A) devuelve una base ortonormal del subespacio nulo (kernel, o conjunto de vectores x tales que Ax = 0) de la matriz rectangular A.
octave:56> a=[1 1; 2 1]; octave:57> null(a) ans = [](2x0)
Pg -35-
o Q = orth(A) las columnas de Q son una base ortonormal del espacio vectorial de las columnas de A, y el nmero de columnas de Q es el rango de A .
octave:62> q=orth(a) q =
0.36060 0.93272
0.93272 -0.36060
0.100000 0.100000
0.200000 0.200000
o r = rank(A) calcula el rango r de una matriz rectangular A o nor = norm(A) calcula la norma sub-2 de una matriz (el mayor valor singular) o nor = norm(A,2) lo mismo que la anterior
octave:67> x=rand(1,4) x =
0.84525
0.67284
0.87206
0.57248
Pg -36-
Clculo 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). Normas de vectores:
norm(x,p) norma sub-p, es decir sum(abs(x)^p)^(1/p). norm(x) norma eucldea; equivale al mdulo o norm(x,2). norm(x,inf) norma sub-, es decir max(abs(x)). norm(x,1) norma sub-1, es decir sum(abs(x)).
octave:67> x=rand(1,4) x =
0.84525
0.67284
0.87206
0.57248
Pg -37-
Cuando alguno de los operadores relacionales vistos previamente (<, >, <=, >=, == y =) 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. 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. GNU OCTAVE dispone de varias funciones para ello. Recurdese que cualquier valor distinto de cero equivale a true, mientras que un valor cero equivale a false. Algunas de estas funciones son: any(x) funcin vectorial; chequea si alguno de los elementos del vector x cumple una determinada condicin (en este caso ser distinto de cero). Devuelve un uno un cero
octave:70> any(x) ans = 1
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 un cero.
Pg -38-
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.
octave:82> x x =
0.84525
0.67284
0.87206
0.57248
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 ltima.
Pg -39-
NaN
ans =
isinf() chequea si hay valores Inf, devolviendo una matriz de unos y ceros
octave:91> isinf(x)
ans =
octave:94> isfinite(x)
isempty() chequea si un vector o matriz est vaco ischar() chequea si una variable es una cadena de caracteres (string)
Pg -40-
issparse() chequea si una matriz es dispersa (sparse, es decir, con un gran nmero de elementos cero)
En los Captulos precedentes se ha visto la especialidad de GNU OCTAVE: trabajar con vectores y matrices. En este Captulo se va a ver que GNU OCTAVE puede tambin trabajar con otros tipos de datos: 1. Conjuntos o cadenas de caracteres, fundamentales en cualquier lenguaje de programacin. 2. Hipermatrices, o matrices de ms de dos dimensiones. 3. Estructuras, o agrupaciones bajo un mismo nombre de datos de naturaleza diferente. 4. Vectores o matrices de celdas (cell arrays), que son vectores o matrices cuyos elementos pueden ser cualquier otro tipo de dato.
GNU OCTAVE trabaja tambin con cadenas de caracteres, con ciertas semejanzas y tambin diferencias respecto a C/C++. A continuacin se explica lo ms importante del manejo de cadenas de caracteres en GNU OCTAVE. Los caracteres de una cadena se almacenan en un vector, con un carcter por elemento. Cada carcter ocupa dos bytes. Las cadenas de caracteres van entre apstrofos o comillas simples, como por ejemplo: 'cadena'. Si la cadena debe contener comillas, stas se representan por un doble carcter comilla, de modo que se pueden distinguir fcilmente del principio y final de la cadena. Por ejemplo, para escribir la cadena ni idea se escribira niidea. Una matriz de caracteres es una matriz cuyos elementos son caracteres, o bien una matriz cuyas filas son cadenas de caracteres. Todas las filas de una matriz de caracteres deben tener el mismo nmero de elementos. Si es preciso, las cadenas (filas) ms cortas se completan con blancos. Las funciones ms importantes para manejo de cadenas de caracteres son las siguientes:
Pg -41-
double(c) convierte en nmeros ASCII cada carcter char(v) convierte un vector de nmeros v en una cadena de caracteres char(c1,c2) crea una matriz de caracteres, completando con blancos las cadenas ms cortas
deblank(c) elimina los blancos al final de una cadena de caracteres disp(c) imprime el texto contenido en la variable c ischar(c) detecta si una variable es una cadena de caracteres isletter() detecta si un carcter es una letra del alfabeto. Si se le pasa un vector o matriz de caracteres devuelve un vector o matriz de unos y ceros isspace() detecta si un carcter es un espacio en blanco. Si se le pasa un vector o matriz de caracteres devuelve un vector o matriz de unos y ceros strcmp(c1,c2) comparacin de cadenas. Si las cadenas son iguales devuelve un uno, y si no lo son, devuelve un cero (funciona de modo diferente que la correspondiente funcin de C)
strcmpi(c1,c2) igual que strcmp(c1,c2), pero ignorando la diferencia entre maysculas y minsculas strncmp(c1,c2,n) compara los n primeros caracteres de dos cadenas c1==c2 compara dos cadenas carcter a carcter. Devuelve un vector o matriz de unos y ceros s=[s,' y ms'] concatena cadenas, aadiendo la segunda a continuacin de la primera findstr(c1,c2) devuelve un vector con las posiciones iniciales de todas las veces en que la cadena ms corta aparece en la ms larga num2str(x,n) convierte un nmero real x en su expresin por medio de una cadena de caracteres, con cuatro cifras decimales por defecto (pueden especificarse ms cifras, con un argumento opcional n)
str2double(str) convierte una cadena de caracteres representando un nmero real en el nmero real correspondiente vc=cellstr(cc) convierte una matriz de caracteres strrep(c1,c2,c3) sustituye la cadena c2 por c3, cada vez que c2 es encontrada en c1
Pg -42-
mas madera
octave:4>
a=[11,112,121,23];
#podemos
crear
los
caracteres
con
su
octave:7> char(112) ans = p octave:8> char(121) ans = y octave:9> char(23) ans = _ octave:10> double(b) ans =
11
112
121
23
'
12
octave:13> deblank(c)
#de
este
modo
podemos
eliminar
los
Pg -43-
21
34
41
octave:20> strmatch(a,b) ans = [](0x0) octave:21> strrep(a,b,'T') ans = eT uT lugar de la maTcha de cuyo Tombre To puedo acordarme
Pg -44-
ans(:,:,1) =
0.31106 0.48694
0.70197 0.45170
ans(:,:,2) =
0.017063 0.234682
0.261818 0.340703
Pg -45-
2.3. Estructuras
Una estructura (struct) es una agrupacin de datos de tipo diferente bajo un mismo nombre. Estos datos se llaman miembros (members) o campos (fields). Una estructura es un nuevo tipo de dato, del que luego se pueden crear muchas variables (objetos o instances). Por ejemplo, la estructura alumno puede contener los campos nombre (una cadena de caracteres) y carnet (un nmero).
Tambin puede crearse la estructura por medio de la funcin struct(), como por ejemplo,
GNU Octave permite, adems, aadir un nuevo campo a una estructura en cualquier momento. La siguiente sentencia aade el campo edad a todos los elementos del vector alumno.
Pg -46-
Como hemos visto desde un inicio, GNU Octave trabaja con matrices, por lo tanto, todo lo que veamos para un elemento es extrapolable a una matriz, vector o conjunto de estos, por lo tanto, podemos hacer matrices de structs al igual que hemos hecho structs de vectores/matrices.
Pg -47-
{ [1,1] =
{ [1,1] =
Pg -48-
octave:44> vc(3)={rand(2,2)} vc =
{ [1,1] =
0.39113 0.41501
0.97938 0.77790
Otra nomenclatura alternativa y similar, que tambin utiliza llaves, es la que podemos ver a continuacin.
octave:45> v{1}=[1 2 1] v =
{ [1,1] =
Pg -49-
octave:46> v{2}='escriche' v =
{ [1,1] =
[1,2] = escriche }
cell(m,n) crea un cell array vaco de m filas y n columnas celldisp(ca) muestra el contenido de todas las celdas de ca cellplot(ca) muestra una representacin grfica de las distintas celdas iscell(ca) indica si ca es un vector de celdas num2cell() convierte un array numrico en un cell array
octave:48> c=cell(2,2) c =
Pg -50-
octave:50> c{2,2}='azucar' c =
Pg -51-
Los bucles nos permiten realizar varias iteraciones de un mismo proceso, o sea, realizar una misma operacin sobre distintos elementos. Podemos encontrar varios tipos de bucles: while do-until for
Adems de las sentencias break y continue utilizadas dentro de los bucles para salir del proceso.
Pg -52-
3.1.1. Sentencia IF
Esta sentencia nos sirve para hacer bifurcaciones, podemos hacer 3 usos diferentes de ella: Una sola sentencia que utilizamos si es verdadera y sino no hacemos nada:
then-body endif
if (condition)
Utilizando la expresin else con la que conseguiremos hacer uso de una expresin u otra si es consecuentemente true o false.
Utilizando la expression elseif con la que se pueden anidar bifurcaciones (aunque es mejor usar la sentencia switch)
if (condition) then-body elseif (condition) elseif-body else #es la opcin por defecto cuando no se cumple ninguna condicin else-body endif
Pg -53-
Manual de Iniciacin a GNU Octave Una observacin muy importante: la condicin del if puede ser una condicin 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. Basta que haya dos elementos diferentes para que las matrices no sean iguales, y por 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. Bastara que hubiera dos elementos iguales para que la condicin no se cumpliese. 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
Al principio se evala la expression, cuyo resultado debe ser un nmero escalar o una cadena de caracteres. Este resultado se compara con las label, y se ejecuta el bloque de sentencias que corresponda con ese resultado. Si ninguno es igual a expression se ejecutan las sentencias correspondientes a otherwise.
Pg -54-
Pg -55-
Pg -56-
Pg -57-
donde name es el nombre de la funcin. Entre corchetes y separados por comas van los valores de retorno (siempre que haya ms de uno), y entre parntesis 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 sus resultados. Si no hay valores de retorno se omiten los corchetes y el signo igual (=); si slo hay un valor de retorno no hace falta poner corchetes. Tampoco hace falta poner parntesis si no hay argumentos. 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 interfieren 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. Dentro de la funcin, los valores de retorno deben ser calculados en algn sitio. De todas formas, no hace falta calcular siempre todos los posibles valores de retorno de la funcin, sino slo los que el usuario espera obtener en la sentencia de llamada a la funcin. En cualquier funcin existen dos variables definidas de modo automtico llamadas nargin y nargout, que representan respectivamente el nmero de argumentos y el nmero de valores de retorno con los que la funcin ha sido llamada. Dentro de la funcin, estas variables pueden ser utilizadas como el programador desee ya que las variables en Octave son pasadas por valor. 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.
Pg -58-
el programa responde escribiendo las primeras lneas del fichero mi_func.m que comienzan por el carcter #, es decir, que son comentarios.
Pg -59-
4. Grficos bidimensionales
A estas alturas, despus de ver cmo funciona este programa, a nadie le puede resultar extrao que los grficos 2-D de GNU Octave 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 de vectores fila). GNU Octave 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, bien aadiendo nuevos elementos grficos a un dibujo anterior. Todo esto se ver con ms detalle en las siguientes secciones. Todo este sistema de grficos est implementado a partir de GNU Plot, por lo que si fuera necesario, siempre podramos llamar directamente a este programa en vez de dejar que sea Octave el que lo haga por nosotros.
con escalas lineales sobre ambos ejes. loglog() semilogx() dem con escala logartmica en ambos ejes 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 muy similar.
Pg -60-
Manual de Iniciacin a GNU Octave Existen adems otras funciones orientadas a aadir ttulos al grfico, a cada uno de los ejes, a dibujar una cuadrcula auxiliar, a introducir texto, etc. Estas funciones son las siguientes: title('ttulo') xlabel('tal') aade un ttulo al dibujo. aade una etiqueta al eje de abscisas. Con xlabel off desaparece. ylabel('cual') aade una etiqueta al eje de 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 texto es tambin un vector de cadenas de texto de la misma dimensin, cada elemento legend() grid se escribe en las coordenadas
correspondientes. define rtulos para las distintas lneas o ejes utilizados en la figura. Para ms detalle, consultar el Help. activa la inclusin de una cuadrcula en el dibujo. Con grid off desaparece la cuadrcula.
Los dos grupos de funciones anteriores no actan de la misma forma. As, la funcin plot dibuja una nueva figura en la ventana activa (en todo momento GNU Octave tiene una ventana activa de entre todas las ventanas grficas abiertas), o abre una nueva figura si no hay ninguna abierta, sustituyendo cualquier cosa que hubiera dibujada anteriormente en esa ventana.
Pg -61-
Ms adelante se ver que con la funcin hold pueden aadirse grficos a una figura ya existente respetando su contenido.
Pg -62-
El resultado de este comando es que se abre una ventana. Por defecto, los distintos puntos del grfico se unen con una lnea continua. Tambin por defecto, el color que se utiliza para la primera lnea es el rojo. 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. Ms adelante se ver que si el vector es complejo, el funcionamiento es bastante diferente.
Pg -63-
En la pantalla de su ordenador se habr visto que GNU Octave utiliza por defecto color blanco para el fondo de la pantalla y otros colores ms oscuros para los ejes y las grficas. Una segunda forma de utilizar la funcin plot() es con dos vectores como argumentos. En este caso los elementos del segundo vector se representan en ordenadas frente a los valores del primero, que se representan en abscisas. Vase por ejemplo cmo se puede dibujar un cuadriltero de esta forma (obsrvese que para dibujar un polgono cerrado el ltimo punto debe coincidir con el primero):
octave:8>x=[1 6 5 2 1]; y=[1 0 4 3 1]; octave:9>plot(x,y)
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 dibujan en ordenadas como funcin de los valores del primer vector de la pareja, que se representan en abscisas. Obsrvese bien cmo se dibujan el seno y el coseno en el siguiente ejemplo:
octave:10> x=0:pi/25:6*pi; octave:11>y=sin(x); z=cos(x); octave:12>plot(x,y,x,z)
Ahora se va a ver lo que pasa con los vectores complejos. Si se pasan a plot() arios vectores complejos como argumentos, GNU Octave simplemente representa las partes reales y desprecia las partes imaginarias.
octave:12> a=rand(3,3)+rand(3,3)*i; octave:13> plot(a)
Pg -64-
Como ya se ha dicho, si se incluye ms de un vector complejo como argumento, se ignoran las partes imaginarias. Si se quiere dibujar varios vectores complejos, hay que separar explcitamente las partes reales e imaginarias de cada vector, como se acaba de hacer en el ltimo ejemplo. El comando plot puede utilizarse tambin con matrices como argumentos. Vanse algunos ejemplos sencillos: plot(A) dibuja una lnea por cada columna de A en ordenadas, frente
al ndice de los elementos en abscisas plot(x,A) dibuja las columnas (o filas) de A en ordenadas frente al
vector x en abscisas. Las dimensiones de A y x deben ser coherentes: si la matriz A es cuadrada se dibujan las columnas, pero si no lo es y la dimensin de las filas coincide con la de x, se dibujan las filas plot(A,x) anlogo al anterior, pero dibujando las columnas (o filas) de
A en abscisas, frente al valor de x en ordenadas plot(A,B) dibuja las columnas de B en ordenadas frente a las columnas
de A en abscisas, dos a dos. Las dimensiones deben coincidir plot(A,B,C,D) anlogo al anterior para cada par de matrices. Las dimensiones de cada par deben coincidir, aunque pueden ser diferentes de las dimensiones de los dems pares. Se puede obtener una excelente y breve descripcin de la funcin plot() con el comando help plot. La descripcin que se acaba de presentar se completar en la siguiente seccin, en donde se ver cmo elegir los colores y los tipos de lnea.
Pg -65-
Pg -66-
Pg -67-
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, etc. Por ejemplo, la siguiente secuencia de comandos genera cuatro grficos en la misma ventana:
octave:23> x=0:0.01:10;y=sin(x); z=cos(x); w=exp(-x*.1).*y; v=y.*z; octave:24> subplot(2,2,1), plot(x,y) octave:25> subplot(2,2,2), plot(x,z) octave:26> subplot(2,2,3), plot(x,w) octave:27> subplot(2,2,4), plot(x,v)
Se puede practicar con este ejemplo aadiendo ttulos a cada grfica, as como rtulos para los ejes. Se puede intentar tambin cambiar los tipos de lnea.
mientras que :
axis(auto)
Pg -68-
Pg -69-
A modo de ejemplo, genrese un vector de valores aleatorios entre 0 y 10, y ejectense los siguientes comandos:
octave:53> x=[rand(1,100)*10]; octave:69> plot(x,'m') octave:71> bar(x)
Pg -70-
Pg -71-
5. Grficos tridimensionales
Quizs sea sta una de las caractersticas de GNU OCTAVE que ms admiracin despierta entre los usuarios no tcnicos (cualquier alumno de ingeniera sabe que hay ciertas operaciones algebraicas como la descomposicin de valor singular, sin ir ms lejos, que tienen dificultades muy superiores, aunque "luzcan" menos).
Ahora se ver cmo se representa una funcin de dos variables. Para ello se va a definir una funcin de este tipo en un fichero llamado test3d.m. La frmula ser la siguiente: Pg -72-
Ahora, ejectese la siguiente lista de comandos (directamente, o mejor creando un fichero test3dFC.m que los contenga):
x=[-3:0.4:3]; y=x; closeplot figure(),fi=[0:pi/20:6*pi]; plot3(cos(fi),sin(fi),fi,'r') [X,Y]=meshgrid(x,y); Z=test3d(X,Y); figure(), mesh(Z)
Estos son unos ejemplos de las posibilidades que GNU Octave ofrece para el uso de grficos 3-D.
Pg -73-
que dibuja una lnea que une los puntos (x(1), y(1), z(1)), (x(2), y(2), z(2)), etc. Y la proyecta sobre un plano para poderla representar en la pantalla. Al igual que en el caso plano, se puede incluir una cadena de 1, 2 3 caracteres para determinar el color, los markers, y el tipo de lnea:
octave:82>plot3(x,y,z,s)
en cuyo caso se dibujan tantas lneas como columnas tienen estas 3 matrices, cada una de las cuales est definida por las 3 columnas homlogas de dichas matrices. A continuacin se va a realizar un ejemplo sencillo consistente en dibujar un cubo. Para ello se crear una matriz que contenga las aristas correspondientes, definidas mediante los vrtices del cubo como una lnea poligonal continua (obsrvese que algunas aristas se dibujan dos veces). La matriz A cuyas columnas son las coordenadas de los vrtices, y cuyas filas son las coordenadas x, y y z de los mismos:
octave:86>A=[0 1 1 0 0 0 1 0 1 1 0 0 1 1 1 1 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 1 1 0];
Ahora basta ejecutar los comandos siguientes (el trasponer los vectores en este caso es opcional):
octave:87>plot3(A(1,:)',A(2,:)',A(3,:)')
Pg -74-
Pg -75-
Se habr podido comprobar que la funcin mesh dibuja en perspectiva una funcin en base a una retcula de lneas de colores, rodeando cuadrilteros del color de fondo, con eliminacin de lneas ocultas. Ejectese ahora el comando:
octave:91> surf(W)
En vez de lneas aparece ahora una superficie faceteada (aunque no es fcilmente visible, pero de manera terica es as). El color de las facetas depende tambin del valor de la funcin.
Pg -76-
donde "20" representa el nmero de lneas de nivel. Si no se pone se utiliza un nmero por defecto. Otras posibles formas de estas funciones son las siguientes: contour(Z, val) siendo val un vector de valores para las isolneas a dibujar. contour(u,v,W,20) se utilizan u y v para dar valores a los ejes de coordenadas.
Pg -77-
donde azimut es el ngulo de rotacin de un plano horizontal, medido sobre el eje z a partir del eje x en sentido antihorario, y elev es el ngulo de elevacin respecto al plano (x-y). Ambos ngulos se miden en grados, y pueden tomar valores positivos y negativos. Tambin se puede definir la direccin del punto de vista mediante las tres coordenadas cartesianas de un vector (slo se tiene en cuenta la direccin):
view([xd,yd,zd])
En los grficos tridimensionales existen funciones para controlar los ejes, por ejemplo:
axis([xmin,xmax,ymin,ymax,zmin,zmax])
Tambin se pueden utilizar las funciones siguientes: xlabel, ylabel, zlabel, axis(auto), axis(axis), etc. Las funciones mesh y surf disponen de un algoritmo de eliminacin de lneas ocultas (los polgonos o facetas, no dejan ver las lneas que estn detrs). El comando hidden activa y desactiva la eliminacin de lneas ocultas. En el dibujo de funciones tridimensionales, a veces tambin son tiles los NaNs. Cuando una parte de los elementos de la matriz de valores Z son NaNs, esa parte de la superficie no se dibuja, permitiendo ver el resto de la superficie.
Pg -78-
octave:2>save
antes de abandonar el programa, se crea un fichero binario con el estado de la sesin (excepto los grficos, que por ocupar mucha memoria hay que guardar aparte). Dicho estado puede recuperarse la siguiente vez que se arranque el programa con el comando:
octave:3>load
Esta es la forma ms bsica de los comandos save y load. Se pueden guardar tambin matrices y vectores de forma selectiva y en ficheros con nombre especificado por el usuario. Por ejemplo, el comando:
octave:4>save filename A, x, y
guarda las variables A, x e y en un fichero binario llamado filename. Para recuperarlas en otra sesin basta teclear:
octave:5>load filename
Pg -79-
Manual de Iniciacin a GNU Octave Si no se indica ningn nombre de variable, se guardan todas las variables creadas en esa sesin. El comando save permite guardar el estado de la sesin en formato ASCII utilizndolo de la siguiente forma:
octave:6>save octave:7>save octave:8>save binario octave:9>save -ascii #guarda en formato compatible con matlab text #guarda en formato texto mat-binary #guarda en formato compatible con matlab en hdf5 #guarda en formato hdf5
Cuando se recuperan estos ficheros con load tipo la informacin se recupera, hay que tener cuidado si guardamos en ascii o en text dado que la informacin recuperada se hace en una sola matriz.
Pg -80-
octave:32>diary filename
etime(t2, t1) tiempo transcurrido entre los vectores t1 y t2 (atencin al orden!), obtenidos como respuesta al comando clock. tic operacioness toc imprime el tiempo en segundos requerido por ops. El comando tic pone el reloj a cero y toc obtiene el tiempo transcurrido.
Pg -81-
Pg -82-
6.4.2 Ordinarias
Integracin
Numrica
de
Ecuaciones
Diferenciales
GNU Octave dispone de varias funciones capaces de realizar la integracin de ecuaciones diferenciales; si hacemos uso del fichero tiropar.m:
donde se han supuesto unas constantes con los valores de c=0.001, m=1 y g=9.8. Falta fijar los valores iniciales de posicin y velocidad. Se supondr que el proyectil parte del origen con una velocidad de 100 m/seg y con un ngulo de 30, lo que conduce a los valores iniciales siguientes: u(0)=100*cos(pi/6), v(0)=100*sin(pi/6), x(0)=0, y(0)=0. Los comandos para realizar la integracin son los siguientes (se podran agrupar en un fichero llamado tiroparMain.m):
t0=0; tf=9; y0=[100*cos(pi/6) 100*sin(pi/6) 0 0]'; [t,Y]=ode23('tiropar',[t0,tf],y0); plot(t,Y(:,4)) # dibujo de la altura en funcion del tiempo
podemos encontrar varios tipos de funciones que resuelven ecuaciones diferenciales: ode23 : resuelve ecuaciones diferenciales de 2 y 3er orden ode45 : resuelve ecuaciones diferenciales de 4 y 5 orden ode78 : resuelve ecuaciones diferenciales usando frmulas de 7 orden
Pg -83-
GNUFreeDocumentationLicense
GNUFreeDocumentationLicense Version1.2,November2002 Copyright(C)2000,2001,2002FreeSoftwareFoundation,Inc. 51FranklinSt,FifthFloor,Boston,MA021101301USA Everyoneispermittedtocopyanddistributeverbatimcopies ofthislicensedocument,butchangingitisnotallowed. 0.PREAMBLE ThepurposeofthisLicenseistomakeamanual,textbook,orotherfunctionalandusefuldocument "free"inthesenseoffreedom:toassureeveryonetheeffectivefreedomtocopyandredistributeit, withorwithoutmodifyingit,eithercommerciallyornoncommercially. Secondarily,thisLicensepreservesfortheauthorandpublisherawaytogetcreditfortheirwork, whilenotbeingconsideredresponsibleformodificationsmadebyothers. ThisLicenseisakindof"copyleft",whichmeansthatderivativeworksofthedocumentmust themselvesbefreeinthesamesense.ItcomplementstheGNUGeneralPublicLicense,whichisa copyleftlicensedesignedforfreesoftware. WehavedesignedthisLicenseinordertouseitformanualsforfreesoftware,becausefreesoftware needsfreedocumentation:afreeprogramshouldcomewithmanualsprovidingthesamefreedoms thatthesoftwaredoes.ButthisLicenseisnotlimitedtosoftwaremanuals;itcanbeusedforany textual work, regardless of subject matter or whether it is published as a printed book. We recommendthisLicenseprincipallyforworkswhosepurposeisinstructionorreference. 1.APPLICABILITYANDDEFINITIONS ThisLicenseappliestoanymanualorotherwork,inanymedium,thatcontainsanoticeplacedby thecopyrightholdersayingitcanbedistributedunderthetermsofthisLicense. Suchanotice grants a worldwide, royaltyfree license, unlimited in duration, to use that work under the conditionsstatedherein.The"Document",below,referstoanysuchmanualorwork.Anymember ofthepublicisalicensee,andisaddressedas"you".Youacceptthelicenseifyoucopy,modifyor distributetheworkinawayrequiringpermissionundercopyrightlaw. A"ModifiedVersion"oftheDocumentmeansanyworkcontainingtheDocumentoraportionofit, eithercopiedverbatim,orwithmodificationsand/ortranslatedintoanotherlanguage. A"SecondarySection"isanamedappendixorafrontmattersectionoftheDocumentthatdeals exclusivelywiththerelationshipofthepublishersorauthorsoftheDocumenttotheDocument's overallsubject(ortorelatedmatters)andcontainsnothingthatcouldfalldirectlywithinthatoverall
subject.(Thus,iftheDocumentisinpartatextbookofmathematics,aSecondarySectionmaynot explainanymathematics.) Therelationshipcouldbeamatterofhistoricalconnectionwiththe subjectorwithrelatedmatters,oroflegal,commercial,philosophical,ethicalorpoliticalposition regardingthem. The"InvariantSections"arecertainSecondarySectionswhosetitlesaredesignated,asbeingthose ofInvariantSections,inthenoticethatsaysthattheDocumentisreleasedunderthisLicense.Ifa sectiondoesnotfittheabovedefinitionofSecondarythenitisnotallowedtobedesignatedas Invariant.TheDocumentmaycontainzeroInvariantSections.IftheDocumentdoesnotidentify anyInvariantSectionsthentherearenone. The"CoverTexts"arecertainshortpassagesoftextthatarelisted,asFrontCoverTextsorBack CoverTexts,inthenoticethatsaysthattheDocumentisreleasedunderthisLicense.AFrontCover Textmaybeatmost5words,andaBackCoverTextmaybeatmost25words. A"Transparent"copyoftheDocumentmeansamachinereadablecopy,representedinaformat whosespecificationisavailabletothegeneralpublic,thatissuitableforrevisingthedocument straightforwardly with generic text editors or (for images composed of pixels) generic paint programsor(fordrawings)somewidelyavailabledrawingeditor,andthatissuitableforinputto text formatters or for automatic translation to a variety of formats suitable for input to text formatters. AcopymadeinanotherwiseTransparentfileformatwhosemarkup,orabsenceof markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent.AnimageformatisnotTransparentifusedforanysubstantialamountoftext.Acopy thatisnot"Transparent"iscalled"Opaque". ExamplesofsuitableformatsforTransparentcopiesincludeplainASCIIwithoutmarkup,Texinfo inputformat,LaTeXinputformat,SGMLorXMLusingapubliclyavailableDTD,andstandard conforming simple HTML, PostScript or PDF designed for humanmodification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formatsthatcanbereadandeditedonlybyproprietarywordprocessors,SGMLorXMLforwhich theDTDand/orprocessingtoolsarenotgenerallyavailable,andthemachinegeneratedHTML, PostScriptorPDFproducedbysomewordprocessorsforoutputpurposesonly. The"TitlePage"means,foraprintedbook,thetitlepageitself,plussuchfollowingpagesasare neededtohold,legibly,thematerialthisLicenserequirestoappearinthetitlepage.Forworksin formats which do not have any title page as such, "Title Page" means the text near the most prominentappearanceofthework'stitle,precedingthebeginningofthebodyofthetext. Asection"EntitledXYZ"meansanamedsubunitoftheDocumentwhosetitleeitherisprecisely XYZorcontainsXYZinparenthesesfollowingtextthattranslatesXYZinanotherlanguage.(Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications","Endorsements",or"History".)To"PreservetheTitle"ofsuchasectionwhenyou modifytheDocumentmeansthatitremainsasection"EntitledXYZ"accordingtothisdefinition.
TheDocumentmayincludeWarrantyDisclaimersnexttothenoticewhichstatesthatthisLicense appliestotheDocument.TheseWarrantyDisclaimersareconsideredtobeincludedbyreferencein thisLicense,butonlyasregardsdisclaimingwarranties:anyotherimplicationthattheseWarranty DisclaimersmayhaveisvoidandhasnoeffectonthemeaningofthisLicense. 2.VERBATIMCOPYING You may copy and distribute the Document in any medium, either commercially or noncommercially,providedthatthisLicense,thecopyrightnotices,andthelicensenoticesaying this License applies to the Document are reproduced in all copies, and that you add no other conditionswhatsoevertothoseofthisLicense.Youmaynotusetechnicalmeasurestoobstructor controlthereadingorfurthercopyingofthecopiesyoumakeordistribute. However,youmay acceptcompensationinexchangeforcopies.Ifyoudistributealargeenoughnumberofcopiesyou mustalsofollowtheconditionsinsection3. Youmayalsolendcopies,underthesameconditionsstatedabove,andyoumaypubliclydisplay copies. 3.COPYINGINQUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document,numberingmorethan100,andtheDocument'slicensenoticerequiresCoverTexts,you mustenclosethecopiesincoversthatcarry,clearlyandlegibly,alltheseCoverTexts:FrontCover Textsonthefrontcover,andBackCoverTextsonthebackcover.Bothcoversmustalsoclearlyand legiblyidentifyyouasthepublisherofthesecopies.Thefrontcovermustpresentthefulltitlewith allwordsofthetitleequallyprominentandvisible.Youmayaddothermaterialonthecoversin addition. Copyingwithchanges limited tothecovers,as longas theypreservethe titleof the Documentandsatisfytheseconditions,canbetreatedasverbatimcopyinginotherrespects. Iftherequiredtextsforeithercoveraretoovoluminoustofitlegibly,youshouldputthefirstones listed(asmanyasfitreasonably)ontheactualcover,andcontinuetherestontoadjacentpages. IfyoupublishordistributeOpaquecopiesoftheDocumentnumberingmorethan100,youmust eitherincludeamachinereadableTransparentcopyalongwitheachOpaquecopy,orstateinor witheachOpaquecopyacomputernetworklocationfromwhichthegeneralnetworkusingpublic hasaccesstodownloadusingpublicstandardnetworkprotocolsacompleteTransparentcopyofthe Document,freeofaddedmaterial.Ifyouusethelatteroption,youmusttakereasonablyprudent steps,whenyoubegindistributionofOpaquecopiesinquantity,toensurethatthisTransparentcopy willremainthusaccessibleatthestatedlocationuntilatleastoneyearafterthelasttimeyou distributeanOpaquecopy(directlyorthroughyouragentsorretailers)ofthateditiontothepublic. It is requested, but not required, that you contact the authors of the Document well before redistributinganylargenumberofcopies,togivethemachancetoprovideyouwithanupdated versionoftheDocument.
4.MODIFICATIONS YoumaycopyanddistributeaModifiedVersionoftheDocumentundertheconditionsofsections 2and3above,providedthatyoureleasetheModifiedVersionunderpreciselythisLicense,withthe ModifiedVersionfillingtheroleoftheDocument,thuslicensingdistributionandmodificationof theModifiedVersiontowhoeverpossessesacopyofit.Inaddition,youmustdothesethingsinthe ModifiedVersion: A.UseintheTitlePage(andonthecovers,ifany)atitledistinctfromthatoftheDocument,and fromthoseofpreviousversions(whichshould,iftherewereany,belistedintheHistorysection oftheDocument).Youmayusethesametitleasapreviousversioniftheoriginalpublisherofthat versiongivespermission. B.ListontheTitlePage,asauthors,oneormorepersonsorentitiesresponsibleforauthorshipof themodificationsintheModifiedVersion,togetherwithatleastfiveoftheprincipalauthorsofthe Document(allofitsprincipalauthors,ifithasfewerthanfive),unlesstheyreleaseyoufromthis requirement. C.StateontheTitlepagethenameofthepublisheroftheModifiedVersion,asthepublisher. D.PreserveallthecopyrightnoticesoftheDocument. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F.Include,immediatelyafterthecopyrightnotices,alicensenoticegivingthepublicpermissionto usetheModifiedVersionunderthetermsofthisLicense,intheformshownintheAddendum below. G.PreserveinthatlicensenoticethefulllistsofInvariantSectionsandrequiredCoverTextsgiven intheDocument'slicensenotice. H.IncludeanunalteredcopyofthisLicense. I.PreservethesectionEntitled"History",PreserveitsTitle,andaddtoitanitemstatingatleastthe title,year,newauthors,andpublisheroftheModifiedVersionasgivenontheTitlePage.Ifthereis no section Entitled "History" in the Document, create one stating the title, year, authors, and publisheroftheDocumentasgivenonitsTitlePage,thenaddanitemdescribingtheModified Versionasstatedintheprevioussentence. J.Preservethenetworklocation,ifany,givenintheDocumentforpublicaccesstoaTransparent copyoftheDocument,andlikewisethenetworklocationsgivenintheDocumentforprevious versionsitwasbasedon.Thesemaybeplacedinthe"History"section.Youmayomitanetwork locationforaworkthatwaspublishedatleastfouryearsbeforetheDocumentitself,orifthe originalpublisheroftheversionitreferstogivespermission. K.ForanysectionEntitled"Acknowledgements"or"Dedications",PreservetheTitleofthesection, andpreserveinthesectionallthesubstanceandtoneofeachofthecontributoracknowledgements and/ordedicationsgiventherein. L.PreservealltheInvariantSectionsoftheDocument,unalteredintheirtextandintheirtitles. Sectionnumbersortheequivalentarenotconsideredpartofthesectiontitles. M. Delete any section Entitled "Endorsements". Such a section may not be included in the ModifiedVersion. N.DonotretitleanyexistingsectiontobeEntitled"Endorsements"ortoconflictintitlewithany
InvariantSection. O.PreserveanyWarrantyDisclaimers. IftheModifiedVersionincludesnewfrontmattersectionsorappendicesthatqualifyasSecondary SectionsandcontainnomaterialcopiedfromtheDocument,youmayatyouroptiondesignate someorallofthesesectionsasinvariant.Todothis,addtheirtitlestothelistofInvariantSections intheModifiedVersion'slicensenotice.Thesetitlesmustbedistinctfromanyothersectiontitles. YoumayaddasectionEntitled"Endorsements",provideditcontainsnothingbutendorsementsof yourModifiedVersionbyvariouspartiesforexample,statementsofpeerrevieworthatthetexthas beenapprovedbyanorganizationastheauthoritativedefinitionofastandard. YoumayaddapassageofuptofivewordsasaFrontCoverText,andapassageofupto25words asaBackCoverText,totheendofthelistofCoverTextsintheModifiedVersion. Onlyone passageofFrontCoverTextandoneofBackCoverTextmaybeaddedby(orthrougharrangements made by) any one entity. If the Document already includes a cover text for the same cover, previouslyaddedbyyouorbyarrangementmadebythesameentityyouareactingonbehalfof,you maynotaddanother;butyoumayreplacetheoldone,onexplicitpermissionfromtheprevious publisherthataddedtheoldone. Theauthor(s)andpublisher(s)oftheDocumentdonotbythisLicensegivepermissiontousetheir namesforpublicityforortoassertorimplyendorsementofanyModifiedVersion. 5.COMBININGDOCUMENTS YoumaycombinetheDocumentwithotherdocumentsreleasedunderthisLicense,undertheterms definedinsection4aboveformodifiedversions,providedthatyouincludeinthecombinationallof theInvariantSectionsofalloftheoriginaldocuments,unmodified,andlistthemallasInvariant Sections of your combinedworkinits licensenotice,andthatyoupreservealltheirWarranty Disclaimers. ThecombinedworkneedonlycontainonecopyofthisLicense,andmultipleidenticalInvariant Sectionsmaybereplacedwithasinglecopy.IftherearemultipleInvariantSectionswiththesame namebutdifferentcontents,makethetitleofeachsuchsectionuniquebyaddingattheendofit,in parentheses,thenameoftheoriginalauthororpublisherofthatsectionifknown,orelseaunique number.MakethesameadjustmenttothesectiontitlesinthelistofInvariantSectionsinthelicense noticeofthecombinedwork. In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled"Endorsements".
6.COLLECTIONSOFDOCUMENTS YoumaymakeacollectionconsistingoftheDocumentandotherdocumentsreleasedunderthis License,andreplacetheindividualcopiesofthisLicenseinthevariousdocumentswithasingle copy that is included in the collection, provided that you follow the rules of this License for verbatimcopyingofeachofthedocumentsinallotherrespects. Youmayextractasingledocumentfromsuchacollection,anddistributeitindividuallyunderthis License,providedyouinsertacopyofthisLicenseintotheextracteddocument,andfollowthis Licenseinallotherrespectsregardingverbatimcopyingofthatdocument. 7.AGGREGATIONWITHINDEPENDENTWORKS AcompilationoftheDocumentoritsderivativeswithotherseparateandindependentdocumentsor works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyrightresultingfromthecompilationisnotusedtolimitthelegalrightsofthecompilation's usersbeyondwhattheindividualworkspermit.WhentheDocumentisincludedinanaggregate, thisLicensedoesnotapplytotheotherworksintheaggregatewhicharenotthemselvesderivative worksoftheDocument. IftheCoverTextrequirementofsection3isapplicabletothesecopiesoftheDocument,thenifthe Documentislessthanonehalfoftheentireaggregate,theDocument'sCoverTextsmaybeplaced oncoversthatbrackettheDocumentwithintheaggregate,ortheelectronicequivalentofcoversif theDocumentisinelectronicform.Otherwisetheymustappearonprintedcoversthatbracketthe wholeaggregate. 8.TRANSLATION Translationisconsideredakindofmodification,soyoumaydistributetranslationsoftheDocument under the terms of section 4. Replacing Invariant Sections with translations requires special permissionfromtheircopyrightholders,butyoumayincludetranslationsofsomeorallInvariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers,providedthatyoualsoincludetheoriginalEnglishversionofthisLicenseandthe originalversionsofthosenoticesanddisclaimers.Incaseofadisagreementbetweenthetranslation andtheoriginalversionofthisLicenseoranoticeordisclaimer,theoriginalversionwillprevail. If a section intheDocumentisEntitled"Acknowledgements","Dedications", or"History", the requirement(section4)toPreserveitsTitle(section1)willtypicallyrequirechangingtheactual title. 9.TERMINATION Youmaynotcopy,modify,sublicense,ordistributetheDocumentexceptasexpresslyprovidedfor underthisLicense. Anyotherattempttocopy,modify,sublicenseordistributetheDocumentis void,andwillautomaticallyterminateyourrightsunderthisLicense.However,partieswhohave
receivedcopies,orrights,fromyouunderthisLicensewillnothavetheirlicensesterminatedso longassuchpartiesremaininfullcompliance. 10.FUTUREREVISIONSOFTHISLICENSE TheFreeSoftwareFoundationmaypublishnew,revisedversionsoftheGNUFreeDocumentation Licensefromtimetotime.Suchnewversionswillbesimilarinspirittothepresentversion,but maydifferindetailtoaddressnewproblemsorconcerns.Seehttp://www.gnu.org/copyleft/. EachversionoftheLicenseisgivenadistinguishingversionnumber.IftheDocumentspecifiesthat aparticularnumberedversionofthisLicense"oranylaterversion"appliestoit,youhavetheoption offollowingthetermsandconditionseitherofthatspecifiedversionorofanylaterversionthathas beenpublished(notasadraft)bytheFreeSoftwareFoundation.IftheDocumentdoesnotspecify aversionnumberofthisLicense,youmaychooseanyversioneverpublished(notasadraft)bythe FreeSoftwareFoundation.