Herramientas en GNU/Linux para estudiantes universitarios: | ||
---|---|---|
Anterior | Capítulo 2. Sintaxis de Octave | Siguiente |
Los operadores permiten construir sentencias más complejas. Es posible concatenar operaciones. Su precedencia es semejante a la de otros lenguajes, pero es posible modificarla agrupando las expresiones entre paréntesis.
Para obtener la lista completa de la precedencia de los operadores teclear help -i precedence |
Operan sobre escalares y matrices.
Tabla 2-2. Operadores aritméticos
Operador | Descripción |
---|---|
x + y | Suma. Si los dos operadores son matrices las dimensiones deben coincidir. Si no el escalar se suma a cada elemento de la matriz. |
x .+ y | Suma elemento a elemento. Esta operación es equivalente a +. |
x - y | Resta. El resultado es equivalente a x + (-y), donde -y representa el opuesto de y. |
x .- y | Resta elemento a elemento. Esta operación equivale a -. |
x * y | Multiplicación de matrices. El número de columnas de x debe coincidir con el número de filas de y. |
x .* y | Multiplicación de matrices elemento a elemento. |
x / y | División a derechas. Conceptualmente es equivalente a (inverso (y') * x')', pero sin necesidad de calcular la inversa de y ni calcular las transpuestas de las matrices. |
x ./ y | División elemento a elemento, de los elementos de x divididos por los elementos de y. |
x \ y | División por la izquierda. Conceptualmente es equivalente a inverso (x) * y. |
x .\ y | División elemento a elemento, de los elementos de y entre los elementos de x |
x ^ y o x ** y | Operación de exponenciación. Ambos operadores no pueden ser matrices, y si alguno es matriz, deberá ser cuadrada. |
x .^ y o x .** y | Exponenciación, elemento a elemento. Si ambos operadores son matrices, deberán tener igual dimensión. |
-x | Negación. Se obtiene el escalar opuesto o la matriz de igual dimensión y cuyos elementos son los opuestos de la matriz original. |
+x | Operador suma unitario. No tiene ninguna consecuencia sobre el operando. |
x' | Conjugado complejo y transpuesta. Para números reales es equivalente a la transposición. |
x.' | Transposición de los elementos de x. No se conjugan los elementos. |
++x | Operador de preincremento. Equivalente a ejecutar la expresión x=x+1 antes de acceder al valor de x |
--x | Operador de predecremento. Equivalente a ejecutar la expresión x=x-1 antes de acceder al valor de x |
x++ | Operador de postincremento. Equivalente a ejecutar la expresión x=x+1 después de acceder al valor de x |
x-- | Operador de postdecremento. Equivalente a ejecutar la expresión x=x-1 después de acceder al valor de x |
Si el valor de la variable predefinida warm_divide_by_zero es distinto de cero, y en algún caso se produce una división por cero, Octave imprime un aviso y continúa con las operaciones. |
Todos los operadores de comparación devuelven un valor 1 si la comparación es cierta, y 0 si es falsa. Para matrices las operaciones se realizan operando a operando. Por ejemplo:
octave> [1 2; 3 4] == [1 3; 2 4] ans = 1 0 0 1 |
Si un operador es escalar y el otro una matriz, el escalar se compara con cada elemento de la matriz y el resultado tiene las mismas dimensiones que la matriz.
Tabla 2-3. Operadores de comparación
Operador | Descripción |
---|---|
x < y | Cierto si x es menor que y. |
x <= y | Cierto si x es menor o igual que y. |
x == y | Cierto si x es igual que y. |
x > y | Cierto si x es mayor que y. |
x >= y | Cierto si x es mayor o igual que y. |
x != y o x ~= y o x <> y | Cierto si x no es igual a y. |
Las comparaciones con cadenas de caracteres pueden hacerse con la función strcmp. |
El resultado de un operador booleano es una matriz de dimensión equivalente a los operandos, donde cada elemento es el resultado de aplicar el operador booleano a los elementos correspondientes. Se considera como cierto un valor distinto de cero, y falso un valor igual a cero.Los operadores booleanos se pueden emplear en las mismas situaciones que los operadores de comparación. Si además se utilizan en estructuras de control de flujo (if o while) sólo serán cierto si todos los elementos son distintos de cero.
octave> [1 0] & [1 1] ans = 1 0 |
Únicamente hay tres operadores booleanos:
Tabla 2-4. Operadores booleanos
Operador | Descripción |
---|---|
boolean1 & boolean2 | Operador 'and' lógico. Cada elementos del resultado es cierto si los elementos correspondientes de los operandos lo son. |
boolean1 | boolean2 | Operador 'or' lógico. Cada elementos del resultado es cierto si alguno de los elementos correspondientes de los operandos lo es. |
! boolean o ~ boolean | Operador 'not' lógico. Cada elemento del resultado toma el valor booleano opuesto al del operando. |
Los operadores booleanos de "corto circuito" son semejantes a los operadores booleanos, con la diferencia de que si después de evaluar el primer operando, ya es suficiente para obtener el resultado, no se comprueba el segundo operando.
Tabla 2-5. Operadores binarios de corto circuito
Operador | Descripción |
---|---|
boolean1 && boolean2 | El operando boolean1 es evaluado y convertido a un escalar (el resultado es análogo a all(boolean1)). Si el resultado es falso, la operación termina con resultado falso. Si es cierto se realiza la misma operación con el segundo operando y este será el resultado de la operación. |
boolean1 || boolean2 | El operando boolean1 es evaluado y convertido a un escalar (el resultado es análogo a any(boolean1). Si el resultado es verdadero, la operación termina con resultado verdadero. En cambio si fue falso se evalúa de la misma manera el segundo operando el resultado obtenido será el resultado de la operación. |
La diferencia entre los operadores binarios normales y los de cortocircuito se verá mejor con un ejemplo:
octave> a=0; b=0; a & b++, b ans = 0 b = 1 octave> a=0; b=0; a && b++, b ans = 0 b = 0 |
En el segundo caso, b será incrementado sólo si a es verdadero. En el primer caso b siempre será incrementado.
El signo = es el operador de asignación. Después de una asignación una variable cambia de valor y de tipo para acomodarse al del nuevo valor. El operador asignación es la única manera de poder almacenar valores. En el lado derecho puede aparecer cualquier expresión de las descritas anteriormente en este capítulo, o funciones que devuelvan un valor. En el lado izquierdo podemos tener variables, elementos de una matriz o vector, o listas de valores de retorno (este concepto se aclarará en el apartado dedicado a funciones). Ejemplos:
octave> a=1; octave> b=ones(2,3); octave> b(:,1)= 2 b = 2 1 1 2 1 1 octave> [d c]= size(b); octave> e=["esta " "es " "una " "cadena"]; |