3. Tipos de datos numéricos

Contents of this section

Estas son algunos ejemplos de constantes numéricas con valores reales. Todas tienen el mismo valor:

     105
     1.05e+2
     1050e-1

Para valores complejos:

     3 + 4i
     3.0 + 4.0i
     0.3e1 + 40e-1i

`i' denota la unidad imaginaria.

3.1 Matrices

Las matrices son entradas entre corcheter por filas. Los elementos en la misma fila van separados por comas y las filas van separadas por punto y coma:

octave> a = [1, 2; 3, 4]
a =
  1  2
  3  4
octave> 

Los elementos que inervienen en una matriz pueden ser expresiones arbitrarias mientras que las dimensiones tengan sentido cuando se combinan entre si:

octave> [a , a]
ans =
  1  2  1  2
  3  4  3  4
octave> [a ; a]
ans =
  1  2
  3  4
  1  2
  3  4
octave> [a ; [1 1] ]
ans =
  1  2
  3  4
  1  1
octave> [a , [1 1] ]
error: number of rows must match
octave> 

3.2 Tamaño de los objetos

Las funciones `columns()', `rows()', `length()' y `size()' permiten inspeccionar las diferentes dimensiones de las matrices. `size()' retorna un vector de dos componentes con el número de columnas y de filas, mientras que `columns()' y `rows()' retornan cada uno de esos valores por separado. `length()' retorna el maximo de ambas dimensiones: su uso está orientado a vectores ya sean horizontales o verticales.

octave> a=rand(3,5)
a =
  0.700263  0.029678  0.858449  0.836040  0.205443
  0.814676  0.162003  0.361927  0.325249  0.740022
  0.223069  0.722034  0.221037  0.202889  0.606426
octave> columns(a)
ans = 5
octave> rows(a)
ans = 3
octave> size(a)
ans =
  3  5
octave> b=rand(5,1);
octave> length(b)
ans = 5
octave> length(a)
ans = 5
octave> length(b)
ans = 5
octave> length(b')
ans = 5
octave> columns(b)
ans = 1
octave> columns(b')
ans = 5
octave> 

Además, existen funciones básicas que retornan valores Booleanos (1=true, 0=false): `is_empty(A)', `is_vector (A)', `is_scalar (A)', `is_square (X)', `is_symmetric (X, TOL)'.

3.3 Rangos

Un "rango" es una forma conveniente de construir vectores con elementos espaciados uniformemente. El rango esta definido por el valor inicial, incremento (opcional) y valor final separados por `:'. Si el incremento no está se asume 1.

octave> a=1:0.5:3
a =
  1.0000  1.5000  2.0000  2.5000  3.0000
octave> a=5:10
a =
   5   6   7   8   9  10
octave> 

Los rangos son muy utilizados para controlar los valores que toman los índices en los lazos. Sin embargo el rango no es convertido explícitamente a vector hasta que esto es necesario para ahorrar memoria. Por ejemplo si queremos hacer un lazo (esto se ver después) de 1 a 1000000 y lo ponemos de la forma 1:1000000, esto generaría en principio un vector de longitud 1000000 de reales doble precisión, lo cual consume 8Mb de memoria RAM.

Otro punto a tener en cuenta en cuanto a los rangos es que (debido a errores de redondeo) el punto final puede no estar dentro del vector generado. En el caso de que esto sea absolutamente necesario debe usarse en su lugar la función `linspace()'.


Next Chapter, Previous Chapter

Table of contents of this chapter, General table of contents

Top of the document, Beginning of this Chapter