Matlab
Matlab
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.
- Números complejos
El número i viene escrito como 1i. Ejemplo: (1+i)=(1+1i)
- 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.
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)
- 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.
- 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(idx)= [-2 –4 –5] (nos muestra los valores de las cajas 2, 4 y 5 del vector b)
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).
- 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)
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.
- Á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.
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.
120 ./ (1:6)----> va dividiendo 120 entre los valores del vector sucesivamente, es decir [(120/1)
(120/2) (120/3)...]
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.
Funciones que trabajan con un vector en su conjunto y devuelven otro vector. De momento solo nos
interesa sort().
¿Cómo se ordena de mayor a menor? e(end : -1: 1) para que vaya del final al principio.
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)
Si está en el intervalo, como por ejemplo 3> a > 1, hay que escribir:
(1>2) | (0>2)---> falso porque ambas son falsas (mismo uso que operador O en excel)
- 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.
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)
idx= (-1) .^ (1:7) > 0 (manera de conseguir posiciones pares. Tambien se hace con 2:2:end); a(idx) = -
1
-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)