Está en la página 1de 7

MATLAB

- Operaciones básicas
suma (+), resta (-), multiplicación (*), división (/) y exponenciación (^).
Raíz de dos= 2^(1/2)
Las funciones seno, coseno, tangente e inversas trabajan en radianes. Para poner el ángulo
en radianes, meter entre paréntesis esta fórmula (Xº*pi/180) o sino, se puede trabajar con
las fórmulas sind(), cosd(), tand().
Seno= sin() asin()
Coseno= cos() acos()
Tangente= tan() atan()
El valor pi, se escribe como pi.

¡El símbolo decimal en Matlab es el punto!


Raíz cuadrada= sqrt()
e^número= exp(número)
Ln= log()
El logaritmo en base 10 se calcula con la función log10()

- Números complejos
El número i viene escrito como 1i. Ejemplo: (1+i)=(1+1i)

- real(): se queda con la parte real del número complejo.

- imag(): se queda con la parte imaginaria del número complejo.

- conj(): complejo conjugado.

-abs(): calcula el modulo.

- Precisión en la presentación
Si queremos ver los resultados con muchos decimales usamos format long y abajo la cifra. Para
volver al formato por defecto de 4 decimales escribimos format short.

- VARIABLES
a = 2 (guarda 2 en la variable, también puede guardar una operación u otra operaciones)

-Número aleatorio= rand. Si queremos hacer una matriz 2x2, 3x3, 4x4,… sería rand(2), rand(3),
rand(4), etc.
El símbolo "=" no es igualdad sino "guardar". Matlab trabaja primero en el lado derecho del "=" y
luego asigna ese resultado a la variable cuyo nombre está a la izquierda del "=". Matlab va línea a
línea según están numeradas.

Símbolo punto y coma no muestra el resultado de ejecutar la línea, pero sí la realiza.

Si se quiere borrar una o varias variables se utiliza clear a, … Si son todas solamente clear. También
se puede borrar la ventana de comandos con clc.

Para guardar texto debe ir entre apóstrofes o entre comillas (‘ y “). Con apóstrofes el texto se guarda
como una colección de letras y puedes acceder a cada una de ellas de manera individual, por
ejemplo, si pongo motto= ‘estrella’, motto(3) será igual a la tercera letra.

- Lógicas
Solo puede ser 1 (verdadero) o 0 (falso).

Menor estricto <, menor o igual <=, mayor >, mayor o igual >=, igualdad ==, distinto de ~= (alt gr +
4)

idx = valor == 0 (crea una variable lógica)

- Vector o matriz
Usamos corchetes cuadrados para introducir las coordenadas del vector: vector = [1, 2, 3] (esto es
un vector FILA). El vector COLUMNA se forma con ; en vez de , ([1; 2; 3]).

VARIABLES ESPECIALES. Inf es infinito. NaN cuando la operación no está bien definida. eps que es el
épsilon y corresponde a la diferencia más pequeña que puede "ver" entre dos números. Si la i o la j
no han sido utilizadas como variables, al invocarlas en Matlab se interpretan como la unidad
imaginaria.

- VECTORES
o Creación de vectores por VECTORIZACION: número partida : incremento : número máximo
(cuando el incremento es 1 se puede omitir)

o Creación de vectores por concatenación: fila3= [-1 -2 -3] fila4= [1 2 3 4] [fila3 fila4]
Para concatenar por columna usaremos punto y coma col3= [-10; -11; -12] col2= [7;8] [col2;col3]

Si en vez de ; pongo , ---> si tienen el mismo tamaño, concatena los vectores columna
horizontalmente, generando una matriz.

o Transposición: El apóstrofe sirve para transponer un vector o una matriz (fila3').

- DIRECCIONAMIENTO (vectores)
Cada componente queda identificada por un índice idx, que da su posición en el vector, de manera
que el valor almacenado en esa componente se obtiene poniendo su idx entre paréntesis después
del nombre del vector: vector(idx).

Por ejemplo: pos= [3.1 4.6 7.9 5.3 1.2] idx= 2 (idx es un índice: el número de caja) pos(idx)= 4.6
(también valdrá pos(2)).
La componente puede ser un número, pero también una expresión, siempre que la expresión
retorne un número natural.

Modificar una componente. Dado un vector prueba, la componente idx se convierte en una
variable cuyo nombre es prueba(idx) y, por otra parte, para guardar en una variable usamos la
sintaxis variable=valor. Por tanto, la sintaxis para grabar un valor en la componente idx del vector
prueba será prueba(idx)=valor.

Por ejemplo: prueba=[-1 -2 -3] idx=2 prueba(idx)= 7*2 (que cambiará el valor de la caja 2 por
14)

Esta forma de trabajar permite utilizar el direccionamiento de dos maneras en una misma línea de
código. A la derecha del igual significa LEER, a la izquierda significa ESCRIBIR .

- Direccionamiento múltiple
Se puede acceder a muchas componentes a la vez haciendo que idx sea un vector con todas las
componentes a cambiar del vector vec. Por tanto, la sintaxis se mantiene, vec(idx), pero ahora idx no
es un número natural, sino un vector.

Por ejemplo:

b=-1: -1: -10

idx= [2 4 5] (queremos acceder a las cajas 2, 4 y 5 del vector b)

b(idx)= [-2 –4 –5] (nos muestra los valores de las cajas 2, 4 y 5 del vector b)

-Posiciones pares del vector: idx = 2: 2: 10


-Posiciones impares del vector: idx= 1: 2: 10
-Dado un vector a ¿cómo se obtienen las posiciones 2, 3 y 6? --> a([2 3 6]) o idx= [2 3 6] y a(idx)

Si en lugar de trabajar con idx, escribes explícitamente el vector de posiciones entre paréntesis (),
puedes usar la variable especial end, que representa la longitud del vector.

b(1:2:end) --> mostrará los valores impares del vector b hasta el último valor.

MATlab devuelve los valores en el orden que se los pides (en este caso b(end: -1: 1) del último
número al primero)

Pero dentro, end es una variable---> b(1: end/2) (ultimo número del vector entre 2).

- Modificar varias componentes


- Al mismo valor. Las componentes del vector vec seleccionadas con idx se cambian TODAS al
mismo valor: a= -11: 2: 11 idx= [3 8 11] a(idx)= 0 (cambia el valor a 0 de las cajas (componentes)
indicadas en idx)

- A valores diferentes. vec(idx) = vec_val: a= 0: 3: 45 idx= [1 3 6] a(idx)= [-10 -20 -30] (se
cambia el valor de las 3 cajas(componentes) a estos números, por orden). Saldría [-10 1 –20 3 4 -30]

Ejemplo: Escribe los valores del primero en las posiciones pares del segundo. lectura= -3:3:9
escritura= 63: -5: 18 idx= 2: 2: 10 (fijarse en el 1x10 para ver el número de cajas. Cogemos las
cajas pares) escritura(idx)= lectura (mete en las cajas pares de escritura los valores de lectura).
OJO. El número de cajas de idx debe coincidir con el número de cajas del vector que tendrá los
valores a añadir.

- A los valores de otro vector (incluso el mismo). Las componentes del vector vecw
seleccionadas con idxw se cambian a los valores del vector vecr en las posiciones dadas por idxr.
vecw(idxw) = vecr(idxr)

Vec(las cajas que voy a modificar) = vec2(las cajas que quiero leer de este vector para
introducir en el vec)
Ejemplo: leer los valores en las posiciones pares de un vector y escribirlos en las posiciones impares
de otro.

vecw= 1:10 vecr= -10:-1 idxw= 2 : 2 :10 (voy a escribir en las cajas(coordenadas) pares de
vecw)

idxr= 1: 2: 10 (voy a leer las cajas impares de vecr)

vecw(idxw) = vecr(idxr)---> meto los valores de las cajas impares de vecr en en las cajas pares del
otro vector vecw.

Precaución: el número de valores debe coincidir con el de cajas, luego las longitudes de idxw e idxr
tienen que ser las mismas.

Otro ejemplo: multiplica por 2 las posiciones pares.

vec= [1.3 -3.4 4.6 -7.2] idx= [2 4] vec(idx)= 2*vec(idx)

- ÁLGEBRA (vectores)
1) Suma y resta. a= [1 2 3]; b= [10 20 30]; a+b= [11 22 33]
2) Multiplicación. ¡OJO! como en cualquier multiplicación de matrices las filas y las columnas
tienen que ser las adecuadas. Si transponemos el segundo, la operación sí es correcta y
corresponde al producto escalar.

Calcula el módulo del vector c= -10: 2: 20----> sqrt(c*c')

- OPERACIONES ELEMENTO A ELEMENTO (vectores)


La operación elemento a elemento se distingue por el punto que aparece antes de escribir el
símbolo de la operación matemática: .* ./ .^

a= [1 2 3]; b= [-10 -11 -12]; a.*b (equivale [a(1)*b(1) a(2)*b(2)...])

Ejemplo: ¿Cómo conseguimos el vector [1 –1 1 –1 1...] a partir del vector [1 2 3.... 20]?

c= 1:20; signo= -((-1).^ c) (se eleva –1 a los valores del vector c sucesivamente y se multiplica por -1
para que el primer 1 sea positivo TRUCO PARA IDENTIFICAR PARES); sec= 20: -1 : 1; sec .* signo

Precauciones. Las operaciones elemento a elemento requieren que las dimensiones de los
vectores sean iguales, si no dará error. Si un vector es fila y el otro es columna NO dará error sino
que tiene un comportamiento especial, que es muy útil, pero es peligroso si no se tiene cuidado.

-Entre vectores y escalares


5+ (1:6)---> le suma 5 a cada componente del vector es decir [5 5 5 5 5 5] + (1:6)

2 .* (1:6)----> multiplica por 2 a cada componente del vector

120 ./ (1:6)----> va dividiendo 120 entre los valores del vector sucesivamente, es decir [(120/1)
(120/2) (120/3)...]

2.^ (1:6)----> equivale a [2 2 2 2] .^ (1:6)

- FUNCIONES (para vectores)


sin(n)---> hace el seno de cada valor del vector

Otro grupo de funciones admiten vectores, pero devuelven números. No trabajan elemento a
elemento, sino que el resultado depende del vector de entrada en conjunto.

a= 1:5 [max(a) min(a) sum(a) mean(a) length(a)]= [5 1 6 3 5]

Ejemplo: calcular una suma de una secuencia.

n= 1:100 sec= sin(n) ./ (1 + log(n)) sum(sec)

Funciones que trabajan con un vector en su conjunto y devuelven otro vector. De momento solo nos
interesa sort().

d= [-3 4 -2 7 5 2]; e= sort(d) (ordena de menor a mayor)

¿Cómo se ordena de mayor a menor? e(end : -1: 1) para que vaya del final al principio.

-sort(-d) (otra forma con signos negativos para ordenar)

- DIRECCIONAMIENTO LÓGICO (vectores)


~(1 > 2)---> significa una negación 0->1 1->0

2 <= 2---> menor o igual que

2== 24/12----> igual

1 ~= 2---> distinto de

Hay dos operadores lógicos muy importantes en programación: AND (&, ampersand, está con el 6) y
OR (|, está en el 1). 0 FALSO 1 VERDADERO

(1 > 3) & (2> 3)---> falso porque ambas son falsas (funciona como el operador Y en excel)

(2>1)&(3>2)---> verdadero pq ambas son verdaderas

Si está en el intervalo, como por ejemplo 3> a > 1, hay que escribir:

a=2 (a<3) & (a>1)

(1>2) | (2>0) (ALT gr y 1)

(1>2) | (0>2)---> falso porque ambas son falsas (mismo uso que operador O en excel)

- Operadores lógicos con vectores


Los operadores lógicos son operaciones elemento a elemento y podemos utilizar todo lo que ya
sabemos.

a= [-1 4 -2 0 3 7 -5]; a>0 (será [0 1 0 0 1 1 0] (0 es verdadero)

Ejemplo: ¿cuántos números positivos hay? ¿Y negativos?

sum(a>0) (positivos) sum(a<0) (negativos) sum(a == 0) (nulos)

Ejemplo: comparando dos vectores.

b= [1 -4 2 1 5 9 5] a<b= [1 0 1 1 1 1 1] (comparar cada valor de a con cada valor de b)

- Direccionamiento
Ejemplo: mostrar los valores positivos de un vector

a= [-1 4 -2 0 3 7 -5] idx= a>0 (se eligen los valores positivos del vector que serán los 1
(verdaderos)) a(idx)= [4 3 7] (se muestran los valores del vector positivos elegidos anteriormente)

Utilidad: al ejecutar un programa, no siempre sabemos las coordenadas de los valores que nos
interesan, pero si sabemos qué propiedad lógica cumplen esos valores, podremos localizarlos con
esta técnica. Por ejemplo, tenemos en un vector con las edades de un grupo de personas y
queremos calcular la edad media de los mayores de edad.

edad= [83 19 55 12 5 23 34 49 17]; idx= edad>= 18; (localiza los valores mayores a 18); mayores=
edad(idx); mean(mayores)= 43,83333

idx= edad>= 18 (localiza los valores mayores a 18); mayores= edad(idx); mean(mayores); civil= [3 1
2 1 1 1 2 2 1] (1 es soltero, 2 es casado); idx= civil == 2 (quienes están casados); edad(idx) (edades de
aquellos que son casados); mean (edad(idx)) (media de las personas mayores casadas).
Problema: ¿qué código calcula el máximo valor de las q que verifican p=r ? max(q(p==r)

-Modificar vectores
Funciona igual que el direccionamiento por coordenadas, pero ahora no olvides que el vector de
lectura tiene que ser del mismo tamaño que el vector de escritura, que a su vez es del mismo
tamaño que idx.

1) Al mismo valor. vec(idx) = valor


Ejemplo: poner todos los valores negativos a 0

a= [-2 4 5 2 -3 9 -7]; idx= a<0 (seleccionar numeros negativos del vector); a(idx)= 0 (poner todos los
valores negativos como 0)

Ejemplo: poner las coordenadas pares a -1 pero usando direccionamiento lógico.

idx= (-1) .^ (1:7) > 0 (manera de conseguir posiciones pares. Tambien se hace con 2:2:end); a(idx) = -
1

Pon todos los valores no negativos a 1.

idx= a>= 0; a(idx)= 1

3) A los valores de otro vector (incluso el mismo) vecw(idxw) = vecr(idxr)


Ejemplo: sustituye los valores a pares de un vector a por los valores b del vector b.

a= [5 6 5 8]; b= [3 9 7 1]; idx= ((-1).^ a) > 0 (identifica valores pares)

El vector de escritura es el a y el vector de lectura el b---> a(idx)=b(idx)

Ejemplo: cambia de signo los valores mayores de 5 que hay en b.

El vector de escritura y lectura en este caso es el mismo.

idx= b > 5; b(idx)= -b(idx)

a=[5 6 5 8]; b=[3 9 7 1]; idx= a>=b

-Opcion 1: c= zeros(1,4) (creamos el vector donde estara la solucion) c(idx)= a(idx) - (b(idx)./2)
idx2= ~idx (genera el "otro caso") c(idx2)= 2.*b(idx2) - a(idx2)

-Opcion 2: c= 2*b – a (prolongo todos como la opcion "otro caso"). Ahora solo necesito construir el
vector idx idx= a>=b c(idx)=a(idx)- (b(idx)/2)

También podría gustarte