Está en la página 1de 71

Agustín 

E. González Morales 

MATLAB 
Guía rápida   

 
 

Más de 200  
sentencias y comandos  
con ejemplos 

 
Agustín E. González Morales 

 
 
 
 
 
 
 

ÍNDICE 
 
pág.   
   
3  ESQUEMA DE LA DESCRIPCIÓN  DE LAS SENTENCIAS Y COMANDOS 
4  EMPEZANDO: Intro. Tres puntos. Coma. Punto y coma. clc. quit. ans. pi. inf. NaN. format 
6  FUNCIONES TRIGONOMÉTRICAS 
7  LOGARITMOS, EXPONENCIALES, RAÍCES, SIGNO, ENTEROS, MCD, MCM, COMPLEJOS 
11  VECTORES Y MATRICES 
30  POLINOMIOS 
33  TIEMPO, FECHA y HORA 
34  CADENAS DE CARACTERES 
36  HIPERMATRICES 
38  ESTRUCTURAS 
40  MATRICES DE CELDAS (Cell Arrays) 
42  MATRICES DISPERSAS (Sparse Arrays)   
44  PROGRAMACIÓN 
50  FICHEROS DE COMANDOS y FUNCIONES. VARIABLES 
53  FICHEROS DE DATOS: Lectura y escritura 
60  SISTEMA OPERATIVO. Comandos  
61  DERIVACIÓN, INTEGRACIÓN, RAÍCES DE UNA FUNCIÓN, MÁXIMOS Y MÍNIMOS 
63  GRÁFICOS 
 
 
 

 
Agustín E. González Morales 

ESQUEMA DE LA DESCRIPCIÓN  
DE LAS 
SENTENCIAS Y COMANDOS 
 
Se  presenta  una  breve  descripción  de  la  sentencia  o  comando,  seguida  de  un 
ejemplo que, si se ejecuta desde la ventana de comandos, aparece precedido por >>: 
 
Ej. 
 
mod(x,y) 
 
Calcula el resto de la división de x entre y.  
 
>> disp(mod(5,4)) 
     1 
 
Si  el  ejemplo  es  un  programa,  se  presenta  dicho  programa  y,  a 
continuación, tras una línea formada por ^, el resultado de su ejecución: 
 
Ej. 
 
A=1; 
if A==1 
    disp('A es uno') 
else 
    disp('A no es uno') 
end 
B=2; 
if B==1 
    disp('B es uno') 
else 
    disp('B no es uno') 
end 
 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
 
A es uno 
B no es uno 

 
Agustín E. González Morales 

EMPEZANDO:  
Intro. Tres puntos. Coma. Punto y coma 
clc. quit. ans. pi. inf. NaN. format 
 
Intro 
 
Una expresión termina al pulsar Intro. 
 
Tres puntos (…) 
 
Para que una expresión continúe en la línea siguiente, y se interprete como una única expresión,  
se introducen tres puntos (…) antes de pulsar Intro. 
 
Coma (,) 
 
Se pueden teclear varias expresiones distintas separadas por comas (,). 
  
>> A=[1,4;9,16];, sqrt(A)     
ans = 
     1     2 
     3     4 
 
 Obsérvese ; seguido de ,. También se puede escribir A=[1,4;9,16]; sqrt(A) sin la coma en medio. 
 
Punto y coma (;) 
 
Tecleando  expresiones  separadas  por  punto  y  coma  (;),  su  resultados  se  calculan,  pero  no  se 
escriben en pantalla. 
 
>> A=[1,4;9,16];disp(sqrt(A)) 
     1     2 
     3     4 
 
Al poner un (;) al final de sqrt(A), se calcula, pero no se escribe 
 
>> A=[1,4;9,16];sqrt(A); 
>> 
 
clc 
 
Limpia la ventana de comandos (Command Window) 
 

 
Agustín E. González Morales 

quit ó exit 
 
Sale de Matlab. 
 
ans 
 
Es la variable por defecto: contiene el resultado de la última línea ejecutada. 
 
>> 3*2 
ans = 
     6 
>> a=ans 
a = 
     6 
 
pi 
 
Es el número π. 
 
>> disp(pi) 
       3.1416 
 
inf 
 
Es un infinito generado al dividir por cero. 
 
>> 1/0 
Warning: Divide by zero. 
ans = 
   Inf 
 
NaN 
 
Acrónimo de Not a number (No es un número). Se genera al introducir una indeterminación.   
 
>> 0/0 
Warning: Divide by zero. 
ans = 
   NaN 
 

 
Agustín E. González Morales 

format 
 
Establece los formatos numéricos. 
 
disp('123.456789'); a=123.456789; 
format rational, disp(a)  % Expresa los números como cocientes de enteros 
format short,      disp(a)  % coma fija con 4 decimales (opción por defecto)  
format short e,  disp(a)   % notación científica con 4 decimales 
format short g,  disp(a)   % notación científica o decimal, dependiendo del valor 
format long,       disp(a)   % coma fija con 15 decimales 
format long e,    disp(a)   % notación científica con 15 decimales 
format long g,    disp(a)   % notación científica o decimal, dependiendo del valor 
format hex,        disp(a)   % cifras hexadecimales 
format bank,      disp(a)   % números con 2 cifras decimales 
format,                disp(a)   % Vuelve al formato estándar que es el de 4 decimales 
 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
 
123.456789 
   10000/81     
  123.4568 
  1.2346e+002 
       123.46 
    1.234567890000000e+002 
    1.234567890000000e+002 
                123.456789 
   405edd3c07ee0b0b 
        123.46 
  123.4568 
 
 
FUNCIONES TRIGONOMÉTRICAS 
 
sin(A) 
 
Calcula el seno de los elementos de la matriz A.  
Análogamente: cos (), tan(), asin() y acos(). 
 
>>A=[0,pi/2; pi, 3*pi/2]; 
>>disp(sin(A)) 
         0    1.0000 
    0.0000   ‐1.0000 

 
Agustín E. González Morales 

 
atan(a) 
 
Calcula el arco tangente y devuelve un ángulo entre –π/2 y π/2. 
 
atan2(a,b) 
 
Calcula el arco tangente y devuelve un ángulo entre –π y π. 
Se deben introducen dos valores a y b proporcionales al seno y al coseno. 
 
rad= atan(1); grados=rad*180/pi; 
disp(['Ángulo del primer cuadrante: ',num2str(grados)]) 
% ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 
rad=atan2(1,‐1); grados=rad*180/pi; 
disp(['Ángulo del segundo cuadrante: ',num2str(grados)]) 
% ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 
rad=atan2(‐1,‐1); grados=rad*180/pi; 
disp(['Ángulo del tercer cuadrante: ',num2str(grados)]) 
% ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 
rad= atan(‐1); grados=rad*180/pi; 
disp(['Ángulo del cuarto cuadrante: ',num2str(grados)]) 
%‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 
 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
 
Ángulo del primer cuadrante: 45 
Ángulo del segundo cuadrante: 135 
Ángulo del tercer cuadrante: ‐135 
Ángulo del cuarto cuadrante: ‐45 
 
sinh(), cosh(), tanh(), asinh(), acosh(), atanh() 
 
Funciones hiperbólicas. Se emplean de manera similar a las funciones trigonométricas. 
 
 
LOGARITMOS, EXPONENCIALES, RAÍCES 
SIGNO, ENTEROS, MCD, MCM, COMPLEJOS 
 
log(A) 
 
Calcula el logaritmo neperiano o natural de los elementos de A. 

 
Agustín E. González Morales 

 
>> log(2) 
ans = 
    0.6931 
 
log10(A) 
 
Calcula el logaritmo decimal de los elementos de la matriz A. 
 
>> disp(log10(2)) 
    0.3010 
 
exp(A) 
 
Calcula la exponencial  de los elementos de la matriz A. 
 
>> disp(exp(1)) 
    2.7183 
 
sqrt(A) 
 
Calcula la raíz cuadrada de los elementos de la matriz A. 
 
>> A=[1,4;9,16];,disp(sqrt(A)) 
     1     2 
     3     4 
 
sqrtm(A) 
 
Calcula una matriz que multiplicada por sí misma da A. 
 
>> A=[1,4;9,16]; disp( sqrtm(A)) 
   0.4662 + 0.9359i   0.8860 ‐ 0.2189i 
   1.9935 ‐ 0.4924i   3.7888 + 0.1152i 
 
sign(A) 
 
Devuelve  ‐1 si x < 0, 0 si x = 0 y 1 si x > 0. Aplicada a un número complejo, devuelve el vector 
unitario en su dirección. 
 
>> A=[‐5,0;5,7];  
disp(sign(A)) 
    ‐1     0 

 
Agustín E. González Morales 

     1     1 
 
>> A=3+4i;  
disp(sign(A)) 
   0.6000 + 0.8000i 
 
mod(x,y) 
 
Calcula el resto de la división de x entre y. 
  
>> disp(mod(5,4)) 
     1 
>> disp(mod(12.34,5.38)) 
    1.5800 
 
round(x) 
 
Redondea x al entero más próximo. (Ver num2str). 
 
>> disp([num2str(round(2.3333)),' ',num2str(round(2.7777)),' ',num2str(round(‐2.7777))]) 
2 3 ‐3 
 
fix(x) 
 
Redondea x al entero más próximo a cero. Equivale a la parte entera de x. (Ver num2str). 
 
>> disp([num2str(fix(2.3333)),' ',num2str(fix(2.7777)),' ',num2str(fix(‐2.7777))]) 
2 2 ‐3 
 
floor(x) 
 
Redondea x al entero más próximo a  ∞. (Ver num2str). 
 
>> disp([num2str(floor(2.3333)),' ',num2str(floor(2.7777)),' ',num2str(floor(‐2.7777))]) 
2 2 ‐3  
 
ceil(x) 
 
Redondea x al entero más próximo a  ∞. (Ver num2str). 
 
>> disp([num2str(ceil(2.3333)),' ',num2str(ceil(2.7777)),' ',num2str(ceil(‐2.7777))]) 
3 3 ‐2 

 
Agustín E. González Morales 

 
gcd(A,B) 
 
Calcula el máximo común divisor de A y B. 
 
>> A=24; B=40; disp(gcd(A,B)) 
     8 
 
lcm(A,B) 
 
Calcula el mínimo común múltiplo de A y B. 
 
>> A=24; B=40; disp(lcm(A,B)) 
     120 
 
a+bi  ó  a+bj 
 
Escribe un número complejo. Se puede emplear i ó j indistintamente, pero Matlab devuelve i. Sin 
embargo, si i ó j se han usado previamente como variables, Matlab las considera como tales. 
 
>> disp(3+4i), disp(3+4j) 
   3.0000 + 4.0000i 
   3.0000 + 4.0000i 
 
complex(a,b) 
 
Escribe el complejo a+bi. 
 
>> disp (complex(2,1)) 
   2.0000 + 1.0000i 
 
real(x) 
 
Calcula la parte real del complejo x. 
 
>> disp(real(3+4i)) 
     3 
 
imag(x) 
 
Calcula la parte imaginaria del complejo x. 
 
10 

 
Agustín E. González Morales 

>> disp(imag(3+4i)) 
     4 
 
angle(x) 
 
Calcula el argumento en radianes del complejo x. 
 
>> disp(angle(1+1i))       % el argumento es 45º 
    0.7854 
 
 
VECTORES Y MATRICES 
 
X=m:p:n 
 
Crea un vector X con valores entre m y n a intervalos de p en p. 
 
>> X=‐1:0.5:1 
X = 
   ‐1.0000   ‐0.5000         0    0.5000    1.0000 
 
linspace (a,b,n) 
 
Crea un vector con n valores espaciados entre a y b. 
 
>>disp(linspace (1,2,7)) 
    1.0000    1.1667    1.3333    1.5000    1.6667    1.8333    2.0000 
 
logspace (a,b,n) 
 
Crea un vector con n valores espaciados logarítmicamente. 
 
>> disp(logspace(1,2,5)) 
   10.0000   17.7828   31.6228   56.2341  100.0000 
 
[mx, pmx]=max (X) 
 
Devuelve en mx el valor máximo de los elementos del vector X y su posición pmx dentro de X. 
 
>> X=[1,5,2]; disp(max(X)); [mx, pmx]=max(X) 
     5 
mx = 
11 

 
Agustín E. González Morales 

     5 
pmx = 
     2 
 
[mn, pmn]=min (X) 
 
Devuelve en mn el valor mínimo de los elementos del vector X y su posición pmn dentro de X. 
 
>>X=[1,5,0]; disp(min(X)); [mn,pmn]=min(X) 
     0 
mn= 
     0 
pmn= 
     3 
 
sum(X) 
 
Suma los elementos del vector X. 
 
>> X=[1,5,2]; disp(sum(X)) 
     8 
 
cumsum(X) 
 
Devuelve el vector suma acumulativa de los elementos del vector X. 
 
>> X=[1,5,2]; disp(cumsum(X)) 
     1     6     8  
 
mean(X) 
 
Calcula el valor medio de los elementos del vector X. 
 
>> X=[1,5,2]; disp(mean(X)) 
    2.6667 
 
std(X) 
 
Calcula la desviación típica de los elementos del vector X. 
 
>> X=[1,5,2]; disp(std(X)) 
    2.0817 
 
12 

 
Agustín E. González Morales 

prod(X) 
 
Calcula el producto de los elementos del vector X. 
 
>> X=[1,5,2]; disp(prod(X)) 
    10 
 
cumprod(X) 
 
Devuelve el vector producto acumulativo de los elementos del vector X. 
 
>> X=[1,5,2]; disp(cumprod(X)) 
     1     5    10 
 
[Y,n]=sort(X) 
 
Devuelve el vector ordenado Y, con los elementos del vector X, y un vector n con las posiciones 
iniciales de los elementos de X. 
 
>> X=[1,5,2,0]; [Y,n]=sort(X) 
Y = 
     0     1     2     5 
n = 
     4     1     3     2 
 
Nota: Todas las sentencias desde max hasta sort  son aplicables a matrices pero para cada columna 
 
A=[1,2; 3,4]   ó   A=[1  2; 3  4]  ó 
A=[1 2 (intro en vez de ;) 
3,4] 
 
Crea la matriz A .  
   es un espacio en blanco. 
 
>> A=[1,2;3,4] 
A = 
     1     2 
     3     4 
 
También es una matriz lo siguiente: 
 
>>v=[1,2,3]; w=[4,5,6]; 

13 

 
Agustín E. González Morales 

>>matriz=[v;w;0, 0, 1];  
>>disp (matriz)  
1 2 3  
4 5 6  
0 0 1 
 
A=[1,2]   ó  A=[1  2] 
 
Crea un vector fila. 
 
>> A=[1 2] 
A = 
     1     2 
 
A=[1;2]  ó  
A=[1 (intro)  
2] 
 
Crea un vector columna. 
 
>> A=[1 
2] 
A = 
     1 
     2 
 
A(i,j) 
 
Extrae el elemento de la fila i y la columna j de la matriz A . 
 
>>A=[1,2,3;4,5,6;0, 0, 1];  
>>disp(A (1,3))    % Elemento en la primera fila y tercera columna de la matriz A 
     3 
 
A(3, 1:2) 
 
Extrae los 2 primeros elementos de la fila 3. 
 
>>A=[1,2,3;4,5,6;0, 0, 1]; disp(A(3,1:2)) 
     0     0 
 

14 

 
Agustín E. González Morales 

A(1:2,3) 
 
Extrae los 2 primeros elementos de la columna 3. 
 
>>A=[1,2,3;4,5,6;0, 0, 1]; disp(A(1:2,3)) 
     3 
     6 
 
A(3, :) 
 
Extrae todos los elementos de la fila 3. 
 
>>A=[1,2,3;4,5,6;0, 0, 1];  
>> disp(A(3,:)) 
     0     0     1 
 
A(:,3) 
 
Extrae todos los elementos de la columna 3. 
 
>>A=[1,2,3;4,5,6;0, 0, 1]; disp(A(:,3)) 
     3 
     6 
     1 
 
A(end,:) 
 
Extrae todos los elementos de la última fila. 
 
>>A=[1,2,3;4,5,6;0, 0, 1];  
>> disp(A(end,:)) 
     0     0     1 
 
A(:,end) 
 
Extrae todos los elementos de la última columna. 
 
A(2:3, :) 
 
Extrae todos los elementos de las filas 2 y 3. 
 
>>A=[1,2,3;4,5,6;0, 0, 1];  

15 

 
Agustín E. González Morales 

>> disp(A(2:3,:)) 
     4     5     6 
     0     0     1 
 
A(:,2:3) 
 
Extrae todos los elementos de las columnas 2 y 3. 
 
>>A=[1,2,3;4,5,6;0, 0, 1]; disp(A(:,2:3)) 
     2     3 
     5     6 
     0     1 
 
A([1, 3], :) 
A([1_ 3], :) 
 
Extrae todos los elementos de las filas 1 y 3. 
 
>>A=[1,2,3;4,5,6;0, 0, 1];  
>> disp(A([1,3], :)) 
     1     2     3 
     0     0     1 
 
A (:,[1, 3]) 
A(:, [1_ 3]) 
 
Extrae todos los elementos de las columnas 1 y 3. 
 
>>A=[1,2,3;4,5,6;0, 0, 1];  
>> disp(A(:,[1,3])) 
     1     3 
     4     6 
     0     1 
 
B([1,3],:)=A(1:2,:) 
 
Las filas 1 y 3 de la matriz B son sustituidas por las filas 1 y 2 de A. 
 
>>A=[1,2,3;4,5,6;0, 0, 1]; B=[7,8,9;1,1,1;0,0,0]; 
>> B([1,3],:)=A(1:2,:); 
>> disp(B) 
     1     2     3 

16 

 
Agustín E. González Morales 

     1     1     1 
     4     5     6 
 
A+n 
 
Suma el escalar n a todos los elementos de la matriz A. 
 
>> A=[1,2;3,4] 
A = 
     1     2 
     3     4 
>> disp(A+2) 
     3     4 
     5     6 
 
Operadores elemento a elemento: .^  .*  ./  .\ 
 
Son los operadores ^,*, / y \ precedidos por un punto (.) 
 
>> disp([1,2,3,4]^2) 
??? Error using ==> mpower 
Matrix must be square. 
 
Error porque la matriz (un vector en este caso) debe ser cuadrada, pero: 
 
>>disp([1,2,3,4].^2) 
     1     4     9    16 
 
>> disp([1,2,3,4]*[5,6,7,8]) 
??? Error using ==> mtimes 
Inner matrix dimensions must agree. 
 
Error, pero: 
 
>> disp([1,2,3,4].*[5,6,7,8]) 
     5    12    21    32 
 
inv(A) 
 
Calcula la matriz inversa de la matriz A. 
 
>> A=[1,2;3,4] 
A = 

17 

 
Agustín E. González Morales 

     1     2 
     3     4 
>> disp(inv(A)) 
   ‐2.0000    1.0000 
    1.5000   ‐0.5000 
 
X=A\B 
 
En AX=B, con X: vector columna de incógnitas de un sistema lineal y B: vector columna de 
términos independientes, se puede emplear dividir por la izquierda \ : (Ver linsolve): 
 
>>X=A\B 
Equivalente a 
>>X=inv(A)*B 
 
 
X=linsolve(A,B) 
 
En  AX=B,  con  X:  vector  columna  de  incógnitas  de  un  sistema  lineal  y  B:  vector  columna  de 
términos independientes: 
 
>> A=[1,2;3,4]; B=[1;2]; X=linsolve(A,B) 
X = 
         0 
    0.5000 
 
La misma solución que empleando inv(): 
 
>> X=inv(A)*B 
X = 
         0 
    0.5000 
 
det(A) 
 
Calcula el determinante de la matriz cuadrada A. 
 
>> A=[1,2;3,4], det(A) 
A = 
     1     2 
     3     4 
ans = 
    ‐2 

18 

 
Agustín E. González Morales 

 
A' 
 
Calcula la matriz traspuesta de A. 
 
>> A=[1,2;3,4], A' 
A = 
     1     2 
     3     4 
ans = 
     1     3 
     2     4 
 
Si los elementos de A son complejos, A' es la matriz conjugada y traspuesta 
 
>> A=[1+i,2+i;1‐i,3‐4i], A' 
A = 
   1.0000 + 1.0000i   2.0000 + 1.0000i 
   1.0000 ‐ 1.0000i   3.0000 ‐ 4.0000i 
ans = 
   1.0000 ‐ 1.0000i   1.0000 + 1.0000i 
   2.0000 ‐ 1.0000i   3.0000 + 4.0000i 
 
conj(A) 
 
Calcula la matriz conjugada de A con números complejos. 
 
>> A=[1+i,2+i;1‐i,3‐4i] 
A = 
   1.0000 + 1.0000i   2.0000 + 1.0000i 
   1.0000 ‐ 1.0000i   3.0000 ‐ 4.0000i 
>> disp(conj(A)) 
   1.0000 ‐ 1.0000i   2.0000 ‐ 1.0000i 
   1.0000 + 1.0000i   3.0000 + 4.0000i 
 
A. ' 
 
Calcula la matriz traspuesta de A con números complejos. 
 
>> A=[1+i,2+i;1‐i,3‐4i], A.' 
A = 
   1.0000 + 1.0000i   2.0000 + 1.0000i 
   1.0000 ‐ 1.0000i   3.0000 ‐ 4.0000i 

19 

 
Agustín E. González Morales 

ans = 
   1.0000 + 1.0000i   1.0000 ‐ 1.0000i 
   2.0000 + 1.0000i   3.0000 ‐ 4.0000i 
 
A^n 
 
Calcula la potencia n‐sima de la matriz A. Si A es una matriz cuadrada y n un número entero: 
 
A=[1,2;3,4]; 
>> A^2,A^‐1,inv(A),A^‐3                 %Obsérvese que A^‐1=inv(A) 
ans = 
     7    10 
    15    22 
ans = 
   ‐2.0000    1.0000 
    1.5000   ‐0.5000 
ans = 
   ‐2.0000    1.0000      
    1.5000   ‐0.5000 
ans = 
  ‐14.7500    6.7500 
   10.1250   ‐4.6250 
 
[m,n]=size(A) 
 
Devuelve  el  número  de  filas  m  y  columnas  n  de  la  matriz  A.  Si  A  es  cuadrada  basta  indicar  el 
primer valor. 
 
>> A=[1,2,3;4,5,6]  
A = 
     1     2     3 
     4     5     6 
>> disp(size(A)) 
     2     3 
 
trace(A) 
 
Devuelve la traza o suma de los elementos de la diagonal de la matriz A. 
 
>> A=[1,2;3,4] 
A = 
     1     2 
     3     4 

20 

 
Agustín E. González Morales 

>> disp(trace(A)) 
     5 
 
eye(n) 
 
Crea una matriz unidad de orden n. 
 
>> disp(eye(2)) 
     1     0 
     0     1 
 
ones(m,n) 
 
Crea una matriz de unos de tamaño m x n. 
 
>> disp(ones(2,3)) 
     1     1     1 
     1     1     1 
 
zeros(m,n) 
 
Crea una matriz de ceros de tamaño m x n. 
 
>> disp(zeros(2,3)) 
     0     0     0 
     0     0     0 
 
rand(m,n) 
 
Crea una matriz de números aleatorios de tamaño m x n. 
 
>> disp(rand(2,5)) 
    0.0185    0.4447    0.7919    0.7382    0.4057 
    0.8214    0.6154    0.9218    0.1763    0.9355 
 
randn(n) 
 
Crea una matriz de números aleatorios de tamaño n x n con distribución normal de valor medio 0 
y varianza 1. 
  
>> disp(randn(2)) 
    0.1746    0.7258 

21 

 
Agustín E. González Morales 

   ‐0.1867   ‐0.5883 
 
magic(n) 
 
Crea una matriz de tamaño n x n con los números 1, 2, …, n*n en la que todas las filas y columnas 
suman lo mismo. 
 
>> disp(magic(3)) 
     8     1     6 
     3     5     7 
     4     9     2 
 
kron (X,Y) 
 
Crea  una  matriz  con  todos  los  productos  de  los  elementos  del  vector  X  por  los  elementos  del 
vector Y. 
>> X=[1,2];Y=[3,4];disp(kron(X,Y)) 
     3     4     6     8 
 
vander(X) 
 
Crea una matriz de Vandermonde a partir del vector X, cuyas columnas son las potencias de los 
elementos de X. 
 
>> X=[1,2,3]; disp(vander(X)) 
     1     1     1 
     4     2     1 
     9     3     1 
 
n=length(X) 
 
Calcula el número de elementos del vector X. 
 
>> X=[1,2,5,7]; disp(length(X)) 
     4 
 
[X,D]=eig(A) 
 
Coloca los vectores propios de la matriz A en las columnas de la matriz X y los valores propios en 
la diagonal de la matriz diagonal D.  
 
A = 
    ‐3     0    ‐4 
22 

 
Agustín E. González Morales 

     4     1     4 
     2     0     3 
>> [X,D]=eig(A) 
X = 
         0   ‐0.6667    0.6742 
    1.0000    0.6667    0.3015 
         0    0.3333   ‐0.6742 
D = 
     1     0     0 
     0    ‐1     0 
     0     0     1 
 
A=diag(X) 
 
Crea una matriz diagonal con los elementos del vector X. 
 
>> X=[1,5]; disp(diag(X)) 
     1     0 
     0     5 
 
X=diag(A) 
 
Crea un vector columna X con los elementos de la diagonal de la matriz A. 
 
>> A=[1,2;3,4] 
A = 
     1     2 
     3     4 
>> X=diag(A) 
X = 
     1 
     4 
 
triu(A) 
 
Crea una matriz triangular superior con A. 
 
A = 
     1     2 
     3     4 
     5     6 
>>disp( triu(A)) 
     1     2 

23 

 
Agustín E. González Morales 

     0     4 
     0     0 
 
tril(A) 
 
Crea una matriz triangular inferior con A. 
 
A = 
     1     2 
     3     4 
     5     6 
>> disp.(tril(A)) 
     1     0 
     3     4 
     5     6 
 
null(A) 
 
Devuelve una base ortonormal del núcleo de la matriz rectangular A. El núcleo son los vectores X 
tales que AX = 0. 
  
>> A=[1,1,1;2,3,4;3,4,5];disp(null(A)) 
   ‐0.4082 
    0.8165 
   ‐0.4082 
>> disp(norm(null(A)))   % El módulo de null(A) es la unidad 
     1 
>> disp(A*null(A))          
 % El resultado es el vector (0,0,0) salvo los errores de redondeo expresados por 1.0e‐015 * 
  1.0e‐015 * 
    0.2220 
   ‐0.1110 
    0.1110 
>> disp(round(A*null(A)))             % Los errores de redondeo se evitan con round 
     0 
     0 
     0 
 
P=orth(A) 
 
Las  columnas  de  P  son  una  base  ortonormal  del  espacio  de  columnas  de  A.  El  número  de 
columnas de P es el rango de A. 
 

24 

 
Agustín E. González Morales 

>> A=[8 ‐3 ‐3;‐3 8 ‐3;‐3 ‐3 8] 
A = 
     8    ‐3    ‐3 
    ‐3     8    ‐3 
    ‐3    ‐3     8 
 
>> P=orth(A) 
P = 
   ‐0.8165    0.0000   ‐0.5774    
    0.4082   ‐0.7071   ‐0.5774 
    0.4082    0.7071   ‐0.5774 
 
>> disp([1/sqrt(2),1/sqrt(3),1/sqrt(6),2/sqrt(6)])    
 
% Los elementos  de P son 1/sqrt(2), 1/sqrt(3), 1/sqrt(6) y 2/sqrt(6)    
 
    0.7071    0.5774    0.4082    0.8165 
>> disp(inv(P)) 
   ‐0.8165    0.4082    0.4082 
   ‐0.0000   ‐0.7071    0.7071 
   ‐0.5774   ‐0.5774   ‐0.5774 
>>disp( P')                                                                % Obsérvese que P' = inv(P). O sea, P es ortogonal 
   ‐0.8165    0.4082    0.4082 
    0.0000   ‐0.7071    0.7071 
   ‐0.5774   ‐0.5774   ‐0.5774 
>>disp( inv(P)*A*P)                                               % Obsérvese que inv(P)*A*P es una matriz diagonal 
   11.0000    0.0000   ‐0.0000 
    0.0000   11.0000    0.0000 
   ‐0.0000    0.0000    2.0000 
 
rank(A) 
 
Calcula el rango de una matriz rectangular A. 
 
>> A=[1,1,0,2;2,2,‐1,2;0,1,2,‐1; 1,2,1,‐1]; disp( rank(A)) 
     3 
norm(X) 
 
Calcula la norma o módulo del vector X. 
 
>> X=[3,4]; disp(norm(X)) 
     5 
 

25 

 
Agustín E. González Morales 

fliplr(A) 
 
Invierte el orden de la columnas de la matriz A. 
 
>> A=magic(3) 
A = 
     8     1     6 
     3     5     7 
     4     9     2 
>> disp(fliplr(A)) 
     6     1     8 
     7     5     3 
     2     9     4 
 
A=[] 
 
Crea la matriz vacía A. Su dimensión es cero. 
 
>> A=[] 
A = 
     [] 
 
A>n 
 
Devuelve  una  matriz  de  unos  y  ceros,  con  unos  en  las  posiciones  donde  el  elemento  de  A  es 
mayor que n. Análogamente con < Menor que, >= Mayor o igual que, <= Menor o igual que, == 
Igual que, ~= Distinto que, (con Alt 126: ~).  
 
>> A=magic(3) 
A = 
     8     1     6 
     3     5     7 
     4     9     2 
>> disp(A>4) 
     1     0     1 
     0     1     1 
     0     1     0 
 
any(X) 
 
Comprueba los elementos del vector X que cumplen una determinada condición. Devuelve un 
uno o un cero. 
 
26 

 
Agustín E. González Morales 

>> any([2,‐3,0,1,7])   % comprueba si algún elemento es distinto de cero y devuelve 1 = verdadero 
ans = 
     1 
>> disp(any([2,‐3,0,1,7]>7))   % comprueba si algún elemento es mayor que 7 y devuelve 0 = falso 
     0 
 
any (A) 
 
Se aplica a cada columna de la matriz A. El resultado es un vector de unos y ceros. 
 
>> A=[1,0,0,2;2,0,‐1,2;0,0,2,‐1;1,0,1,‐1] 
A = 
     1     0     0     2 
     2     0    ‐1     2 
     0     0     2    ‐1 
     1     0     1    ‐1 
>>disp(any(A)) 
     1     0     1     1 
 
all(X) 
 
Comprueba si todos los elementos del vector X cumplen una condición. Devuelve un uno o un 
cero. 
 
>> all([2,‐3,0,1,7])   % comprueba si todos los elementos son mayores que cero y devuelve 0 = falso 
ans = 
     0 
>> all([2,‐3,0,1,7]<8) % comprueba si son menores que 8 y devuelve 1 = verdadero 
ans = 
     1 
 
all(A) 
 
Se aplica a cada columna de la matriz A. El resultado es un vector de ceros y unos. 
  
>> A=magic(3) 
A = 
     8     1     6 
     3     5     7 
     4     9     2 
>> disp(all(A)) 
     1     1     1 
 

27 

 
Agustín E. González Morales 

Si todos los elementos de A son mayores que cero devuelve un uno: 
 
>> all(all(A)) 
ans = 
     1 
 
logical(A) 
 
Genera  una  variable  con  el  mismo  número  de  elementos  de  A,  con  ceros  y  unos  según  que  el 
correspondiente elemento de A sea distinto de cero o no. 
  
A = 
    16     2     3    
     5    11     0    
     9     0     6     
>> logical(A) 
Warning: Values other than 0 or 1 converted to logical 1 
ans = 
     1     1     1      
     1     1     0      
     1     0     1          
 
find(X>n) 
 
Busca  índices  correspondientes  a  los  elementos  del  vector  X  que  cumplen  una  condición.  El 
resultado es un vector con los índices que cumplen la condición. 
 
>> A=[1,0,0,2;2,0,‐1,2;0,0,2,‐1;1,0,1,‐1]  
A = 
     1     0     0     2 
     2     0    ‐1     2 
     0     0     2    ‐1 
     1     0     1    ‐1 
>>find(A>1) 
ans = 
     2 
    11 
    13 
    14  
 
exist('X') 
 
Devuelve 1 si existe la variable X. 

28 

 
Agustín E. González Morales 

 
>> X=1;B=3;disp([exist('X'),exist('B'),exist('b')]) 
>> disp('La variable b minúscula no existe') 
     1     1     0 
La variable b minúscula no existe 
 
isequal(A,B) 
 
Devuelve 1 si A y B son iguales. 
 
>>A=[1,2;5,6]; B=[3,4;5,6]; C=[1,2;5,6]; disp(isequal(A,B)) 
>>disp(isequal(A,C)), disp('A y B son distintas, pero A = C') 
     0 
     1 
A y B son distintas, pero A = C 
 
isempty(A) 
 
Devuelve 1 si la matriz A esta vacía. 
 
>> A=[]; disp(isempty(A)) 
     1 
 
isnan(X) 
 
Comprueba valores NaN y devuelve una matriz de ceros y unos. 
 
>> X=[1,2,0/0,3]; 
Warning: Divide by zero. 
>> disp(isnan(X)) 
     0     0     1     0 
 
isinf(X) 
 
Comprueba valores Inf y devuelve una matriz de ceros y unos. 
 
>> X=[1,2,7/0,3]; 
Warning: Divide by zero. 
>>disp( isinf(X)) 
     0    0     1     0 
 

29 

 
Agustín E. González Morales 

isfinite(X) 
 
Comprueba si los valores son finitos y devuelve una matriz de ceros y unos. 
 
>> X=[1,2,7/0,3]; 
Warning: Divide by zero. 
>> disp(isfinite(X)) 
     1     1     0     1 
 
ischar(X) 
 
Devuelve 1 si X es una cadena de caracteres. 
 
>> X='Pepe'; Y=1; disp(ischar(X)), disp(ischar(Y)) 
     1 
     0 
 
isglobal(X) 
 
Devuelve 1 si X es una variable global. 
 
isspace(X) 
 
Comprueba si un carácter es un espacio en blanco. Si se le pasa un vector o matriz de caracteres 
devuelve un vector o matriz de unos y ceros. 
 
X=' '; disp(isspace(X)) 
Y='Me llamo Pepe'; disp(Y), disp(isspace(Y)) 
 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
 
    1 
Me llamo Pepe 
     0     0     1     0     0     0     0     0     1     0     0     0     0 
 
 
POLINOMIOS 
 
X=poly(A) 
 
Devuelve un vector X con los coeficientes del polinomio característico de la matriz cuadrada A. 
  
30 

 
Agustín E. González Morales 

>> A=[2,2;‐2,2]; X=poly(A) 
X = 
    1.0000   ‐4.0000    8.0000 
 
roots(X) 
 
Calcula la raíces del polinomio cuyos coeficientes son los elementos del vector X. 
 
>> X=[1,0,‐8,6,‐10]; disp(roots(X)) % Raíces de x^4 – 8x^2 + 6x – 10 
  ‐3.2800           
   2.6748           
   0.3026 + 1.0238i 
   0.3026 ‐ 1.0238i 
 
polyval(X,a) 
 
Calcula el valor del polinomio definido por el vector X, para x = a. 
 
>> X=[1,0,‐8,6,‐10]; disp(polyval(X,1)) 
   ‐11 
 
polyval(X,Y) 
 
Calcula el valor del polinomio X para cada elemento del vector Y. 
 
X=[1,0,‐8,6,‐10]; Y=[1,0]; polyval(X,Y) 
ans = 
   ‐11   ‐10 
 
Z=conv(X,Y) 
 
Z  es  un  vector  que  contiene  los  coeficientes  del  producto  de  los  polinomios  definidos  por  los 
vectores X e Y. 
  
>> X=[1,2]; Y=[1,1]; disp(conv(X,Y)) 
     1     3     2  
 
[C,R]=deconv[P,Q] 
 
Divide el polinomio P por el polinomio Q. En C se devuelve el cociente y en R el resto. 
 
>> X=[1,2]; Y=[1,1];[C,R]=deconv(X,Y) 

31 

 
Agustín E. González Morales 

C = 
     1 
R = 
     0     1 
 
polyder(X) 
 
Calcula la derivada del polinomio X. 
 
>> X=[1,1,1,1]; disp(polyder(X)) 
     3     2     1 
 
polyfit(x,y,n) 
 
Calcula  un  polinomio  de  grado  n  que  se  ajusta  a  los  datos  (x,y)  con  el  mínimo  error  cuadrático 
medio. 
 
n=0; 
for x=[‐1:0.2:1] 
  n=n+1;  y(n)=x^3‐100*x^2+x+100*sin(10*x); % Genera diez puntos (x,y) 
end   
x=‐1:0.2:1; P=polyfit(x,y,2) % Calcula un 
polinomio de segundo grado  
 
n=0; 
for x=[‐1:0.2:1] 
  n=n+1;  z(n)=‐100*x^2‐0.1537*x;  
% Calcula un polinomio de segundo grado 
end   
x=‐1:0.2:1; plot(x,y,x,z)    
% Dibuja los puntos (x,y)  
% y el polinomio de segundo grado 
 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
 
P = 
 ‐100.0000   ‐0.1537    0.0000 
 
 
 

32 

 
Agustín E. González Morales 

TIEMPO, FECHA y HORA 
 
pause(t) 
 
Espera t segundos antes de ejecutar la siguiente orden de un programa. 
 
disp('Pausa de 5 segundos antes de escribir ME LLAMO PEPE...') 
pause(5) 
disp('Me llamo Pepe') 
 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
 
Pausa de 5 segundos antes de escribir ME LLAMO PEPE... 
Me llamo Pepe 
 
clock 
 
Devuelve un vector fila de 6 elementos (año, mes, día, hora, minutos, segundos) del reloj interno 
del ordenador. 
 
X=clock  % Es necesario emplear fix para obtener la parte entera de clock 
X=fix(clock); 
disp('Tras emplear fix el resultado es:'), disp(X) 
disp('Y aclarando cada dato:') 
disp(['año: ',int2str(X(1)),' mes: ',int2str(X(2)),' día: ',int2str(X(3)),' hora: ', 
int2str(X(4)),' minuto: ',int2str(X(5)),' segundo: ',int2str(X(6))]) 
 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
 
X = 
  1.0e+003 * 
    2.0110    0.0030    0.0070    0.0140    0.0050    0.0468 
Tras emplear fix el resultado es: 
        2011           3           7          14           5          46 
Y aclarando cada dato: 
año: 2011 mes:3 día: 7 hora: 14 minuto: 5 segundo: 46 
 
date 
 
Devuelve una cadena de caracteres con la fecha actual. 
 
>> disp(date) 
08‐Mar‐2011 
33 

 
Agustín E. González Morales 

 
datestr(now) 
 
Devuelve una cadena de caracteres con el día, mes, año, hora, minutos y segundos. 
 
>> disp(datestr(now)) 
08‐Mar‐2011 16:32:14 
 
weekday(now) 
 
Devuelve el número del día de la semana. El primer día es el domingo, el segundo el lunes, etc. 
 
>> disp(weekday(now)) 
     3 
 
 
CADENAS DE CARACTERES 
 
double(A) 
 
Convierte en números ASCII cada carácter de la cadena A. 
 
>> A='cadena'; disp(double(A)) 
    99    97   100   101   110    97 
 
char(X) 
 
Convierte el vector de números X en una cadena de caracteres. 
 
>> A='cadena'; double(A), disp(char(ans)) 
ans = 
    99    97   100   101   110    97 
cadena 
 
disp(X) 
 
Escribe el texto contenido en X. 
 
>> X=[1,2,3,4]; disp(X) 
     1     2     3     4 
>> Y='mi texto'; disp(Y) 
mi texto 
34 

 
Agustín E. González Morales 

>> disp('mi texto') 
mi texto 
 
Para escribir en la misma línea: 
 
>>nombre='María'; edad=12; 
>>disp([nombre,' tiene ',num2str(edad),' años'])   % Obsérvense los corchetes y consúltese num2str 
María tiene 12 años  
 
strcmp(c1, c2) 
 
Compara las cadenas c1 y c2. Si son iguales devuelve un uno, si no, un cero. 
 
>> X='mi texto'; Y='tu texto';  
disp(strcmp(X,Y)) 
     0 
 
strcmpi(c1, c2) 
 
Compara cadenas c1 y c2 ignorando la diferencia entre mayúsculas y minúsculas. 
 
>> X='mi texto'; Y='MI TEXTO'; disp(strcmpi(X,Y)) 
     1 
 
strncmp(c1, c2, n) 
 
Compara los n primeros caracteres de las cadenas c1 y c2. 
 
>> X='mi texto'; Y='mis textos'; disp(strncmp(X,Y,2)) 
     1 
 
c1==c2 
 
Compara dos cadenas c1 y c2 carácter a carácter. Devuelve un vector o matriz de ceros y unos. 
 
>>  X='mi texto'; Y='mi texta'; disp(X==Y) 
     1     1     1     1     1     1     1     0 
 
s=[s, 'y más'] 
 
Concatena cadenas de caracteres añadiendo la segunda a continuación de la primera. 
 

35 

 
Agustín E. González Morales 

>> X='Tu respuesta'; Y=' es la correcta'; 
X=[X,Y,' por eso te felicito'] 
X = 
Tu respuesta es la correcta por eso te felicito 
 
int2str(X) 
 
Convierte un número entero en cadena de caracteres. 
 
>>disp( int2str(‐12)) 
‐12 
>> disp(int2str(‐12.37)) 
‐12 
 
num2str(X,n) 
 
Convierte  un  número  real  en  cadena  de  caracteres  con  cuatro  cifras  por  defecto.  Pueden 
especificarse n cifras. 
 
>>num2str(pi), disp(num2str(pi,8)) 
ans= 
3.142 
3.1415927 
 
str2double(num) 
 
Convierte la cadena de caracteres num, que representa un número real, en dicho número real. 
 
>> num2str(pi,8), disp(str2double(ans)) 
ans = 
3.1415927 
    3.1416  
 
 
HIPERMATRICES: Matrices de más de dos dimensiones 
 
A(:,:,1) 
 
>> A(:,:,1)=[1,2;3,4] 
A = 
     1     2 
     3     4 

36 

 
Agustín E. González Morales 

>> A(:,:,2)=[5,6;7,8] 
A(:,:,1) = 
     1     2 
     3     4 
A(:,:,2) = 
     5     6 
     7     8 
 
Otro ejemplo: 
 
>> B=rand(2,3,2) 
B(:,:,1) = 
    0.1389    0.1987    0.2722 
    0.2028    0.6038    0.1988 
B(:,:,2) = 
    0.0153    0.4451    0.4660 
    0.7468    0.9318    0.4186 
 
También se puede realizar con randn(2,3,2),  zeros(2,3,2) y  ones(2,3,2). 
 
cat(n,A,B)  
 
Concatena matrices con n=1, 2 ó 3: 
 
>>A=zeros(2,3); B=ones(2,3);), cat(2,A,B) 
>>disp(cat(1,A,B)) 
     0     0     0 
     0     0     0 
     1     1     1 
     1     1     1 
>>disp(cat(2,A,B)) 
     0     0     0     1     1     1 
     0     0     0     1     1     1 
>>disp(cat(3,A,B)) 
(:,:,1) = 
     0     0     0 
     0     0     0 
(:,:,2) = 
     1     1     1 
     1     1     1 
 
 

37 

 
Agustín E. González Morales 

ESTRUCTURAS 
 
Las  estructuras  son  agrupaciones  de  datos  de  varios  tipos  bajo  un  mismo  nombre.  Los  datos  se 
llaman campos o miembros. 
 
struct() 
 
Crear estructuras: 
 
>> alumno.nombre='Miguel' 
alumno =  
    nombre: 'Miguel' 
>> alumno.DNI=323245 
alumno =  
    nombre: 'Miguel' 
       DNI: 323245 
 
Otra manera de crear estructuras: 
 
>> alumno=struct('nombre','Miguel','DNI',323245)  
alumno =  
    nombre: 'Miguel' 
       DNI: 323245 
 
Crear vectores, matrices e hipermatrices de estructuras: 
  
>> alumno(3)=struct('nombre','Miguel','DNI',323245) 
alumno =  
1x3 struct array with fields: 
    nombre 
    DNI 
>> disp(alumno(1)) 
    nombre: [] 
       DNI: [] 
>> disp(alumno(2)) 
    nombre: [] 
       DNI: [] 
>> disp(alumno(3)) 
    nombre: 'Miguel' 
       DNI: 323245 
 
Añadir otro campo: Basta crear el campo en uno de los datos 
 
>> alumno(2).edad=18; 
38 

 
Agustín E. González Morales 

>> disp(alumno(2)) 
    nombre: [] 
       DNI: [] 
      edad: 18 
>> disp(alumno(3)) 
    nombre: 'Miguel' 
       DNI: 323245 
      edad: [] 
 
Estructuras anidadas: 
 
>> clase=struct('curso','1º','alumno',struct('nombre','Juan','DNI',323245,'edad',18)) 
clase =  
     curso: '1º' 
    alumno: [1x1 struct] 
>> disp(clase.alumno(1)) 
    nombre: 'Juan' 
       DNI: 323245 
      edad: 18 
 
fieldnames(ST) 
 
Devuelve un vector con los nombres de los campos de la estructura ST. 
 
>> fieldnames(alumno) 
ans =  
    'nombre' 
    'DNI' 
    'edad' 
 
isfield(ST,s) 
 
Devuelve 1 si la cadena s es el nombre de un campo de la estructura ST. 
 
>> disp(isfield(alumno,'edad')) 
     1  
 
isstruct(ST) 
 
Devuelve 1 si la estructura ST existe. 
 
>> disp(isstruct(alumno)) 
     1 

39 

 
Agustín E. González Morales 

 
rmfield(ST,s) 
 
Elimina el campo s de la estructura ST. 
 
>> disp(rmfield(alumno,'edad')) 
1x4 struct array with fields: 
    nombre 
    DNI 
 
getfield(ST,s) 
 
Devuelve el valor del campo s de la estructura ST. 
 
>> alumno(3)=struct('nombre','Miguel','DNI',323245) 
alumno =  
1x3 struct array with fields: 
    nombre 
    DNI 
>> disp(getfield(alumno(3),'nombre')) 
Miguel 
 
setfield(ST,s,v) 
 
Cambia el valor del campo s de la estructura ST con el valor de v. 
 
>> alumno(3)=struct('nombre','Miguel','DNI',323245); 
>> alumno(3)=setfield(alumno(3),'nombre','Pepe'); 
>> alumno(3)=setfield(alumno(3),'DNI',1111); 
>> disp(alumno(3)) 
    nombre: 'Pepe' 
       DNI: 1111 
 
 
MATRICES DE CELDAS (Cell Arrays) 
 
Son matrices en las que el primer elemento puede ser un número, el segundo una matriz, el tercero 
una cadena de caracteres, el cuarto una estructura, etc.  
 
cell(m,n) 
 
Crear un Cell Array vacío de m filas y n columnas: 

40 

 
Agustín E. González Morales 

>> disp(cell(2,3)) 
     []     []     [] 
     []     []     []  
 
Crear un Cell Array: 
 
CA={[1,2,3],'nombre', rand(2,3)} 
CA =  
    [1x3 double]    'nombre'    [2x3 double] 
 
Mostrar el contenido de una celda: 
 
>>CA{1} = 
ans=      
    1     2     3 
>> disp(CA{3}) 
    0.9501    0.6068    0.8913 
    0.2311    0.4860    0.7621 
 
Escribir en una celda: 
 
>> CA(2)={'Antonio'}  % o también CA{2}='Antonio' 
CA =  
    [1x3 double]    'Antonio'    [2x3 double]  
 
celldisp(CA) 
 
Muestra el contenido de todas las celdas de CA. 
 
>> celldisp(CA) 
CA{1} = 
     1     2     3 
CA{2} = 
Antonio 
CA{3} = 
    0.9501    0.6068    0.8913 
    0.2311    0.4860    0.7621 
 
iscell(CA) 
 
Devuelve 1 si CA es un Cell Array. 
 
>> disp(iscell(CA)) 
     1 
41 

 
Agustín E. González Morales 

 
 
MATRICES DISPERSAS (Sparse Arrays)  
 
Son matrices que contienen una gran cantidad de ceros. 
 
sparse(A) 
 
Crea una matriz dispersa con la matriz llena A. 
 
>> A=[1,0,0,‐1,0;0,2,0,0,1] 
A = 
     1     0     0    ‐1     0 
     0     2     0     0     1 
>> S=sparse(A) 
S = 
   (1,1)        1 
   (2,2)        2 
   (1,4)       ‐1    % Los dos índices (1,4) indican la fila y la columna, y después el elemento ‐1. 
   (2,5)        1  
 
sparse(m,n) 
 
Crea una matriz dispersa de m x n con todos los elementos cero. 
 
>> sparse(100,500) 
ans = 
   All zero sparse: 100‐by‐500 
 
speye(m,n) 
 
Crea una matriz identidad dispersa de m x n con unos en la diagonal. 
 
>> disp(speye(3,4)) 
   (1,1)        1 
   (2,2)        1 
   (3,3)        1 
 
full(S) 
 
Convierte una matriz dispersa S en una llena. 
 
>> A=[1,0,0,‐1,0;0,2,0,0,1]; S=sparse(A) 
42 

 
Agustín E. González Morales 

S = 
   (1,1)        1 
   (2,2)        2 
   (1,4)       ‐1 
   (2,5)        1 
>> full(S) 
ans = 
     1     0     0    ‐1     0 
     0     2     0     0     1 
 
nnz(S) 
 
Devuelve el número de elementos distintos de cero de la matriz dispersa S. 
 
>> A=[1,0,0,‐1,0;0,2,0,0,1]; S=sparse(A); 
>>disp( nnz(S)) 
     4 
 
nonzeros(S) 
 
Devuelve un vector que contiene los elementos distintos de cero de la matriz dispersa S. 
 
>> A=[1,0,0,‐1,0;0,2,0,0,1]; S=sparse(A); disp(nonzeros(S)) 
     1 
     2 
    ‐1 
     1 
 
spones(S) 
 
Reemplaza por unos los elementos distintos de cero de la matriz dispersa S. 
 
>> A=[1,0,0,‐1,0;0,2,0,0,1]; S=sparse(A); 
>> disp(spones(S)) 
   (1,1)        1 
   (2,2)        1 
   (1,4)        1 
   (2,5)        1 
 
issparse(S) 
 
Devuelve 1 si S es una matriz dispersa. 
 
43 

 
Agustín E. González Morales 

>> A=[1,0,0,‐1,0;0,2,0,0,1]; S=sparse(A); 
>> disp(issparse(S)) 
     1 
 
 
PROGRAMACIÓN 
 
if condición 
   sentencias1 
else 
   sentencias2 
end 
 
Si  se  cumple  la  condición,  ejecuta  el  bloque  sentencias1;  si  no  se  cumple,  ejecuta  el  bloque 
sentencias2. 
 
A=1; 
if A==1 
    disp('A es uno') 
else 
    disp('A no es uno') 
end 
B=2; 
if B==1 
    disp('B es uno') 
else 
    disp('B no es uno') 
end 
 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
 
A es uno 
B no es uno 
 
switch expr 
   case expr1 
      sentencias 
   case expr2 
      sentencias 
   ….. 
44 

 
Agustín E. González Morales 

otherwise 
      sentencias 
end 
 
Evalúa  expr  cuyo  resultado  debe  ser  un  escalar  o  una  cadena  de  caracteres.  Este    resultado  se 
compara con expr1, expr2… y se ejecutan las sentencias que correspondan con ese resultado; si 
no, se ejecutan las sentencias de otherwise. 
 
A=1; 
switch A 
    case 1  
     disp('A es uno') 
    case 2 
     disp('A es dos') 
    otherwise 
     disp('A no es uno ni dos') 
end 
A=2; 
switch A 
    case 1  
     disp('A es uno') 
    case 2 
     disp('A es dos') 
    otherwise 
     disp('A no es uno ni dos') 
end 
A=3; 
switch A 
    case 1  
     disp('A es uno') 
    case 2 
     disp('A es dos') 
    otherwise 
     disp('A no es uno ni dos') 
end 
 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
 
A es uno 
A es dos 
A no es uno ni dos 
 

45 

 
Agustín E. González Morales 

for k=n:step:m 
    sentencias 
end 
 
for k=v                 % v es un vector con los distintos valores que toma k 
    sentencias 
end 
 
for k=A  
    sentencias   % A es una matriz y k toma en cada iteración el valor de una de la columnas de A 
end 
 
Se ejecutan las sentencias comprendidas entre for y end tantas veces como se indica en for. 
 
Primer ejemplo: 
 
for k=1:0.5:2   
    Y=2*k; 
    disp(Y) 
end 
 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
 
     2 
     3 
     4 
 
Segundo ejemplo: 
 
disp('Vector Y de valores') 
for k=[5,6] 
    Y=2*k; 
    disp(Y) 
 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
 
Vector Y de valores 
    10 
    12 
 

46 

 
Agustín E. González Morales 

Tercer ejemplo: 
 
disp('Matrices k, Y de valores') 
for k=[1,2;3,4] 
    Y=2*k; 
    k,Y 
 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
 
Matrices k , Y de valores 
k = 
     1 
     3 
Y = 
     2 
     6 
k = 
     2 
     4 
Y = 
     4 
     8 
 
while condición 
   sentencias                    
end 
 
Se ejecutan las sentencias comprendidas entre while y end mientras haya elementos distintos de 
cero en condición. 
 
A=[1,2,1,1] 
while A 
    disp('No hay ceros en A') 
    A=[1,0,1,1] 
end 
 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
 
A = 
     1     2     1     1 
No hay ceros en A 
A = 
     1     0     1     1 

47 

 
Agustín E. González Morales 

 
break 
 
Termina la ejecución del bucle for o while más interno. 
 
for m=1:10 
  for k=1:0.5:3 
    y=2*k+m; 
    disp(y) 
    if y==5 
        break 
    end 
  end 
    disp('y=5') 
    break 
end 
 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
 
     3 
     4 
     5 
y=5 
 
continue 
 
Pasa a la siguiente iteración del bucle for o while, saltando las sentencias entre continue y el fin 
del bucle. 
 
for X=1:‐0.4:‐2 
    if X<0 
       continue 
    end 
  disp(X) 
end 
 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
 
    1 
    0.6000 
    0.2000 
 

48 

 
Agustín E. González Morales 

try 
   sentencias1 
catch 
   sentencias2 
end 
 
Gestiona  errores  durante  la  ejecución.  Si  en  el  bloque  de  sentencias1  se  produce  un  error,  el 
control se transfiere al bloque de sentencias2. La sentencia lasterr() gestiona el error. 
 
V=[1,2] 
W=[3,4,5] 
try 
  for X=1:‐0.5:‐2 
     if X>0 
      disp(X) 
     else 
      V=V+W 
     end 
  end 
catch 
    disp('============================================================') 
    disp('V y W tienen dimensiones distintas') 
end 
disp('La sentencia ''lasterr'' da el siguiente mensaje:') 
disp('=============================================================') 
lasterr 
disp('=============================================================') 
disp('... lasterr('''')pone a cero el contador de errores y devuelve la matriz vacía []') 
lasterr('') 
 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
 
V = 
     1     2 
W = 
     3     4     5 
     1 
    0.5000 
============================================================ 
V y W tienen dimensiones distintas 
La sentencia 'lasterr' da el siguiente mensaje: 
============================================================ 
ans = 
49 

 
Agustín E. González Morales 

Error using ==> plus 
Matrix dimensions must agree. 
============================================================ 
... lasterr('')pone a cero el contador de errores y devuelve la matriz vacía [] 
 
input 
 
Escribe  un  mensaje  en  la  línea  de  comandos  y  espera  que  el  usuario  teclee  un  número  o  una 
cadena de caracteres. 
 
nombre=input('¿Cómo te llamas? ','s');  % s es un parámetro necesario 
n=input('Teclee el número de ecuaciones: '); 
disp('===================================') 
disp('Y las mismas sentencias sin el punto y coma') 
nombre=input('¿Cómo te llamas? ','s') 
n=input('Teclee el número de ecuaciones: ') 
 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
 
¿Cómo te llamas? Pepe 
Teclee el número de ecuaciones: 3 
=================================== 
Y las mismas sentencias sin el punto y coma 
¿Cómo te llamas? Pepe 
nombre = 
Pepe 
Teclee el número de ecuaciones: 3 
n = 
     3 
 
 
FICHEROS DE COMANDOS y FUNCIONES. VARIABLES 
 
Un fichero de comandos es un fichero de texto ASCII con extensión (*.m) que contiene comandos 
que se ejecutan sucesivamente cuando se teclea su nombre (sin la extensión m). Sus variables son 
del  espacio  de  trabajo  base,  salvo  que  se  emplean  en  una  función,  en  cuyo  caso  pertenecen  al 
espacio de trabajo de la función. Al terminar la ejecución, las variables permanecen en memoria.  
 
Un  fichero  de  funciones  es  un  fichero  de  texto  ASCII  con  extensión  (*.m)  que  comienza  con  la 
palabra function seguida por los valores de retorno (entre corchetes [] y separados por comas), el 
signo igual (=) y el nombre de la función seguido por los argumentos (entre paréntesis y separados 
por comas). Su espacio de trabajo es independiente, es decir, aunque varias funciones tengan una 
variable llamada A, se trata de variables distintas, a no que ser que A se haya declarado global. 
 
50 

 
Agustín E. González Morales 


 
El símbolo % indica el comienzo de un comentario. Cuando % aparece en la línea de comandos, 
todo  lo  que  se  escribe  desde  %  hasta  el  final  de  la  línea  es  un  comentario  que  no  se  ejecuta. 
También se pueden comentar bloques de sentencias encerrando las líneas entre %{ y %}. 
 
>>nombre=input('¿Cómo te llamas? ','s');  % s es un parámetro necesario 
>>n=input('Teclee el número de ecuaciones: ');  
 
echo on, echo off 
 
Escribe (on) o no escribe (off) los comandos de un fichero a medida que se van ejecutando. 
 
echo on 
rad= atan(1); disp(rad*180/pi) 
echo off 
disp('===============') 
disp('Ejecución sin echo') 
rad= atan(1); disp(rad*180/pi) 
 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
 
rad= atan(1); 
disp(rad*180/pi) 
    45 
echo off 
=============== 
Ejecución sin echo 
    45 
 
function [valores de retorno]=nombre(argumentos) 
 
Crea una función. 
 
Ejemplo: 
Previamente se ha escrito y guardado en el directorio actual la función funcionsumaproducto.m: 
 
function [suma,producto]=funcionsumaproducto(a,b) 
suma=a+b; producto=a*b; 
 
A continuación se ejecuta el fichero de comandos operar.m que llama a la función sumaproducto: 
 
a=input('Introduce el valor de a: '); 

51 

 
Agustín E. González Morales 

b=input('Introduce el valor de b: '); 
[suma,producto]=funcionsumaproducto(a,b); 
disp(['a+b=',num2str(suma)]),disp(['a*b=',num2str(producto)]) 
 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
 
Introduce el valor de a: 2 
Introduce el valor de b: 3 
a+b=5 
a*b=6 
 
global 
 
Declara una variable como global. Las variables globales son visibles en todas las funciones que 
las declaran como tales y en el espacio de trabajo base. 
  
>>global  A  B                             
 
clear  
 
Sin argumentos, borra todas las variables excepto las globales. 
 
clear A,i 
 
Borra las variables A, i. 
 
clear functions 
 
Borra las funciones. 
 
clear global  
 
Borra las variables globales. 
 
clear all  
 
Borra todas las variables, incluidas las globales y las funciones. 
 
 
 

52 

 
Agustín E. González Morales 

FICHEROS DE DATOS: Lectura y escritura 
 
fopen 
 
Abre un fichero. Su sintaxis es: 
 
[fid,texto]=fopen('misdatos','c') 
 
 fid  es  un  número  generado  por  fopen  que  identifica  el  fichero  (si  el  fichero  misdatos  no  se 
pudiese abrir fid sería –1) y en texto se almacena información sobre un posible error.  
En c se escribe r si el fichero se abre para lectura, w si se abre para escritura reemplazando, a si se 
abre para escritura añadiendo a continuación, y r+ si se abre para lectura y escritura. 
 
>> [fid,texto]=fopen('misdatos','w') 
fid= 
     3 
texto = 
     '' 
 
También se puede hacer sin  fid ni texto: 
 
>>disp( fopen('misdatos','w')) 
    3 
 
fclose 
 
Cierra un fichero. Su sintaxis es: 
 
st=fclose(fid) 
 
 fid es el número adjudicado por fopen al fichero y st es un valor de retorno para posibles errores. 
 
>> st=fclose(3) 
st = 
     0 
 
También se puede hacer sin st: 
 
>> fclose(3) 
ans = 
     0 
 

53 

 
Agustín E. González Morales 

fprintf 
 
Escribe en un fichero de manera secuencial (desde el principio hasta el final, sin realizar saltos) en 
formato de texto ASCII. Su sintaxis es: 
 
numbytes=fprintf(fid,'cadena de control',var1,var2,…) 
 
En numbytes se devuelve el número de bytes escritos correctamente (puede omitirse); fid es el 
número  adjudicado  por  fopen  al  fichero.  La  cadena  de  control,  encerrada  entre  apóstrofos, 
contiene el formato de las variables: %s para cadenas de caracteres, %d para variables enteras, 
%f para variables de punto flotante y %lf para variables de doble precisión. La cadena de control 
puede tener formatos especiales: \n para producir un salto de línea, \r  un retorno de carro, \t un 
salto de tabulación, \\ para escribir el carácter \, o %% para escribir el carácter %.  
 
x=0:.4:1;Y=[x;exp(x);sqrt(x)] 
fid=fopen('datos.txt','w'); 
numbytes=fprintf(fid,'%2.1f   %9.8f  %9.8f  ',Y) 
     
% Los espacios en blanco     son los que se intercalan entre los datos.  
% La matriz Y se lee por columnas     
 
fclose(fid); 
type datos.txt 
 
x=0:.4:1; y=[x;exp(x);sqrt(x)]; 
fid=fopen('datos.txt','w'); 
numbytes=fprintf(fid,'%2.1f  %9.8f  %9.8f\n',y)  % Al escribir \n se produce un salto de línea 
fclose(fid); 
type datos.txt 
  
x=0:.4:1; y=[x;exp(x);sqrt(x)]; 
fid=fopen('datos.txt','w'); 
numbytes=fprintf(fid,'%2.1f  %9.8f  %9.8f\r',y)  % Al escribir \r se produce un retorno de carro 
fclose(fid); 
type datos.txt 
  
x=0:.4:1; y=[x;exp(x);sqrt(x)]; 
fid=fopen('datos.txt','w'); 
fprintf(fid,'%2.1f  %9.8f  %9.8f\t',y);  % Al escribir \t se salta un tabulador. Se ha omitido numbytes 
fclose(fid); 
type datos.txt 
  
x=0:.4:1; y=[x;exp(x);sqrt(x)]; 
fid=fopen('datos.txt','w'); 
54 

 
Agustín E. González Morales 

fprintf(fid,'%2.1f  %9.8f  %9.8f\\',y);  % Al escribir \\ se intercala un símbolo \ 
fclose(fid); 
type datos.txt 
  
x=0:.4:1; y=[x;exp(x);sqrt(x)]; 
fid=fopen('datos.txt','w'); 
fprintf(fid,'%2.1f  %9.8f  %9.8f%%',y);  % Al escribir %% se intercala un símbolo % 
fclose(fid); 
type datos.txt 
 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
 
Y = 
 
               0    0.4000    0.8000 
    1.0000     1.4918    2.2255 
               0    0.6325    0.8944 
 
numbytes = 
    93 
0.0  1.00000000  0.00000000    0.4  1.49182470  0.63245553    0.8  2.22554093  0.89442719    
 
numbytes = 
    84 
0.0  1.00000000  0.00000000 
0.4  1.49182470  0.63245553 
0.8  2.22554093  0.89442719 
 
0.0  1.00000000  0.00000000 
0.4  1.49182470  0.63245553 
0.8  2.22554093  0.89442719 
 
0.0  1.00000000  0.00000000 0.4  1.49182470  0.63245553 0.8  2.22554093  0.89442719  
 
0.0  1.00000000  0.00000000\0.4  1.49182470  0.63245553\0.8  2.22554093  0.89442719\ 
 
0.0  1.00000000  0.00000000%0.4  1.49182470  0.63245553%0.8  2.22554093  0.89442719% 
 
fscanf 
 
Lee  en  un  fichero  de  manera  secuencial  (desde  el  principio  hasta  el  final,  sin  realizar  saltos)  en 
formato de texto ASCII y lo guarda en la matriz A. Su sintaxis es: 
 
[A, num]=fscanf(fid,'cadena de control', size) 
55 

 
Agustín E. González Morales 

 
num devuelve el número de elementos leídos correctamente (puede omitirse); fid es el número 
adjudicado  por  fopen  al  fichero.  La  cadena  de  control,  encerrada  entre  apóstrofos,  contiene  el 
formato: %c para cadenas de caracteres, %s para cadenas de caracteres eliminando los espacios 
en blanco, %f genera un vector columna. Con size se puede indicar el tamaño de la matriz que se 
desea leer (puede omitirse). 
 
x=0:.4:1; y=[x;exp(x);sqrt(x)]; 
fid=fopen('datos.txt','w'); 
fprintf(fid,'%2.1f  %9.8f  %9.8f\r',y); 
fclose(fid); 
type datos.txt 
  
fid=fopen('datos.txt','r'); 
z=fscanf(fid,'%c') % Se elige uno de los formatos: '%c', '%s', '%f' 
fclose(fid); 
 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
 
Con formato '%c': 
 
0.0  1.00000000  0.00000000 
0.4  1.49182470  0.63245553 
0.8  2.22554093  0.89442719 
 
z = 
0.0  1.00000000  0.00000000 
0.4  1.49182470  0.63245553 
0.8  2.22554093  0.89442719 
 
Con formato '%s': 
 
z = 
0.01.000000000.000000000.41.491824700.632455530.82.225540930.89442719 
 
Con formato '%f': 
 
z = 
         0 
    1.0000 
         0 
    0.4000 
    1.4918 
    0.6325 

56 

 
Agustín E. González Morales 

    0.8000 
    2.2255 
    0.8944 
 
fwrite 
 
Escribe en un fichero de manera secuencial (desde el principio hasta el final, sin realizar saltos) en 
formato binario. Su sintaxis es: 
 
num=fwrite(fid,A,precision) 
 
num  es  el  número  de  elementos  de  la  matriz  A  escritos  correctamente  en  el  fichero;  fid  es  el 
número adjudicado por fopen al fichero. Con precision se especifica el tipo de dato seguido de un 
número que indica el tamaño en bits.  
 
x=0:.4:1; A=[x;exp(x);sqrt(x)]; 
fid=fopen('datos.bin','w') 
num=fwrite(fid,A,’double’) 
 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
 
fid = 
     3 
num = 
     9 
 
fread 
 
Lee  en  un  fichero  de  manera  secuencial  (desde  el  principio  hasta  el  final,  sin  realizar  saltos)  en 
formato binario. Su sintaxis es: 
 
A=fread(fid,size,precision) 
 
fid  es  el  número  adjudicado  por  fopen  al  fichero;  size  se  puede  omitir,  pero  si  es  n  se  leen  n 
elementos  en  un  vector  columna,  si  es  inf  se  lee  hasta  el  final  del  fichero,  si  es  [m,n]  se  leen 
elementos hasta rellenar una matriz de m x n ordenada por columnas, n puede ser inf, pero m no; 
con precision se especifica el tipo de dato seguido de un número que indica el tamaño en bits.    
 
x=0:.4:1; A=[x;exp(x);sqrt(x)]; 
fid=fopen('datos.bin','w'); 
num=fwrite(fid,A,'double'); 
fclose(fid); 
fid=fopen('datos.bin','r'); 

57 

 
Agustín E. González Morales 

B=fread(fid,'double') 
 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
 
B = 
         0 
    1.0000 
         0 
    0.4000 
    1.4918 
    0.6325 
    0.8000 
    2.2255 
    0.8944 
 
ftell, fseek, fgetl 
 
En  vez  de  leer  o  escribir  secuencialmente,  en  un  fichero  de  texto  en  formato  ASCII  se  puede 
acceder directamente a una posición concreta empleando una especie de cursor. La función ftell 
indica la posición de dicho cursor, fseek mueve el cursor y fgetl lee el contenido hasta el final de 
cada línea.  
 
La sintaxis de ftell es: 
 
posicion=ftell(fid) 
 
fid es el número adjudicado por fopen al fichero. En position se guarda la localización mediante 
un número que indica los bytes que hay desde el comienzo del fichero. 
 
La sintaxis de fseek es: 
 
fseek(fid,salto,origen) 
 
fid es el número adjudicado por fopen al fichero; con salto  > 0 avanza, salto = 0 no se modifica la 
posición y salto < 0 retrocede respecto a la posición indicada por origen; origen es 'bof' o –1 para 
indicar el comienzo del fichero, 'cof' o 0 para la posición actual, y 'eof' o 1 para indicar el final del 
fichero. La función fseek devuelve 0 si la lectura es correcta y –1 si se produce un fallo.  
 
La sintaxis de fgetl es: 
 
fgetl(fid) 
 
fid es el número adjudicado por fopen al fichero. 
 
58 

 
Agustín E. González Morales 

x=2:3; A=[x;sqrt(x)] 
fid=fopen('datos.txt','w'); 
fprintf(fid,'%2.1f %9.8f\r',A);   % hay un espacio en blanco   . Una matriz se lee por columnas 
disp ('==============') 
fclose(fid); 
fid=fopen('datos.txt','r'); 
fseek(fid,0,'bof'); % salta al comienzo del fichero 
for k=1:2   
  disp(fgetl(fid))  % lee la línea completa (por columnas)  
end 
disp ('==============') 
for k=0:29   
  fseek(fid,0,'bof'); 
  fseek(fid,k,0);   % salta k bytes desde la posición actual 
  disp(fgetl(fid))  
end 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
 
A = 
    2.0000    3.0000 
    1.4142    1.7321 
============= 
2.0 1.41421356 
3.0 1.73205081 
============= 
2.0 1.41421356 
.0 1.41421356 
0 1.41421356 
 1.41421356        % hay un espacio en blanco delante  
1.41421356 
.41421356 
41421356 
1421356 
421356 
21356 
1356 
356 
56 

3.0 1.73205081 
.0 1.73205081 
0 1.73205081 
 1.73205081        % hay un espacio en blanco delante 
1.73205081 

59 

 
Agustín E. González Morales 

.73205081 
73205081 
3205081 
205081 
05081 
5081 
081 
81 

 
SISTEMA OPERATIVO. Comandos 
 
!  
 
Con el símbolo ! se ejecutan comandos del DOS desde la ventana de Matlab. Basta anteponer ! al 
comando. 
 
>> !type mifichero.m     % Imprime en la pantalla la líneas de mifichero.m 
 
dir 
 
Muestra el contenido de un directorio. 
 
>> dir c:\ 
 
what 
 
Muestra los ficheros *.m que hay en el directorio actual. 
 
delete 
 
Borra ficheros. 
 
>> delete mipro*.*   
% Borra todos los ficheros cuyo nombre comience por mipro y que tengan cualquier extensión   
 
mkdir 
 
Crea un subdirectorio. 
 
>> mkdir misprogramas     % Crea el subdirectorio misprogramas en el directorio actual 
 

60 

 
Agustín E. González Morales 

type 
 
Imprime en la pantalla el contenido de un fichero. 
  
>> type mifichero.m  % Imprime en la pantalla la líneas de mifichero.m 
 
cd 
 
Cambia de directorio. Se gestiona igual que en el sistema operativo DOS. 
 
>>cd C:\Matlab 
 
pwd 
 
Muestra el path del directorio actual. 
 
>> disp(pwd) 
e:\ 
 
which 
 
Localiza un fichero *.m 
 
>> which primosiono 
C:\ Matlab\comandos y programas\primosiono.m 
 
 
DERIVACIÓN, INTEGRACIÓN, RAÍCES DE UNA FUNCIÓN 
MÁXIMOS Y MÍNIMOS 
 
diff 
 
Calcula  derivadas  de  manera  simbólica.  La  función  se  debe  ingresar  como  una  cadena  de 
caracteres.  
 
>>diff('sin(x)')   % Función sin(x) definida mediante una cadena de caracteres 
ans =  
cos(x) 
>>disp(diff('sin(x)',2))  % Derivada segunda de sin(x) 
‐sin(x) 
 

61 

 
Agustín E. González Morales 

int 
 
Calcula la integral de manera simbólica. 
 
>>disp(int('log(x)')) % Primitiva de la función logaritmo 
x*log(x)‐x 
 
quad 
 
Calcula la integral definida entre dos valores de la abscisa. El símbolo @ debe preceder al nombre 
de la función. 
Ejemplo:  
 
Se crea la función cuadrado: 
 
function y=cuadrado(x) 
y=x.^2; % Obsérvese el punto (∙) que precede a ^ 
 
Se calcula su integral entre dos valores de x, y se guarda en la variable area: 
 
>> area=quad(@cuadrado,0,3)     % Se calcula la integral entre x = 0 y x = 3.  
area = 
    9.0000 
 
Si la función ya existe como tal basta anteponer el símbolo @: 
 
>> area=quad(@sin,0,pi) 
area = 
    2.0000 
 
fzero 
 
Calcula una raíz o cero de una función de una variable. El símbolo @ debe preceder al nombre de 
la función. 
 
Ejemplo: 
Se crea la función mifuncion: 
 
function y=mifuncion(x) 
y=(x‐1)*(x‐2); 
 
Se calcula la raíz más próxima al valor de x introducido o en un intervalo de x: 
 

62 

 
Agustín E. González Morales 

>>disp( fzero(@mifuncion,0))            
>> % el valor x = 0 decide cuál es la raíz a calcular 
     1  
>>disp( fzero(@mifuncion,1.5))          
>>% el valor x = 1.5 decide cuál es la raíz a calcular 
     1 
>>disp( fzero(@mifuncion,1.6))         
>> % el valor x = 1.6 decide cuál es la raíz a calcular 
     2  
>> disp(fzero(@mifuncion,0,1.6))     
>> % la raíz debe estar en el intervalo [0,1.6]. Para ello la función debe cambiar de signo 
     1 
 
fminbnd 
 
Calcula el valor mínimo de una función de una variable. El símbolo @ debe preceder al nombre 
de la función. 
 
Ejemplo: 
Se crea la función mifuncion: 
 
function y=mifuncion(x) 
y=(x‐1)*(x‐2); 
 
Se calcula el valor mínimo correspondiente al intervalo de x introducido: 
 
>> disp(fminbnd(@mifuncion,0,1))   % El valor mínimo del intervalo [0,1] 
    0.9999 
>> disp(fminbnd(@mifuncion,0,2))   % El valor mínimo del intervalo [0,2] 
    1.5000 
 
Para calcular los máximos basta cambiar el signo de la función. 
 
 
GRÁFICOS 
 
plot  
 
Crea  un  gráfico  en  dos  dimensiones  a  partir  de  vectores  o  columnas  de  matrices,  con  escalas 
lineales  en  ambos  ejes.  Se  pueden  modificar  las  características  de  las  líneas  (ancho,  tamaño, 
marcas, etc.). 

63 

 
Agustín E. González Morales 

5.5

4.5

3.5

2.5

1.5

1
1 1.5 2 2.5 3 3.5 4

 
>>X=[1,3,2,6]; 
>>plot(X, 'color','b','LineWidth',2,'MarkerSize',8,'LineStyle','‐','Marker','+') 
 
Se dibujan en ordenadas los elementos del vector X frente a los índices del mismo en abscisas. En 
este caso: se unen con una recta los puntos: (1,1), (2,3), (3,2) y (4,6). 
 
La gestión del color es:  
Azul (b), amarillo (y), magneta (m), cyan(c), rojo (r), verde (g), blanco (w), negro (k). 
 
Se gestiona el ancho de la línea con LineWidth, el tamaño de las marcas con MarkerSize, el estilo 
de las líneas con LineStyle y la marcas con Marker. 
 
>>x=pi*(‐1:0.1:1); y=x.*sin(x);  
>>plot(x,y)  
   
Se unen los puntos (x,y) mediante una poligonal. 
 
1.8

1.6

1.4

1.2

0.8

0.6

0.4

0.2

0
-4 -3 -2 -1 0 1 2 3 4

 
 

64 

 
Agustín E. González Morales 

>>x=0:pi/25:6*pi; y= sin(x); z=cos(x);  
>>plot(x,y,x,z)  
 
Se dibujan gráficas (en este caso dos) con colores distintos siguiendo el orden azul, verde, rojo, 
cian, magenta, amarillo y negro.   
1

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1
0 2 4 6 8 10 12 14 16 18 20

 
grid 
 
Dibuja una cuadrícula en una gráfica. Con grid off desaparece la cuadrícula, además plot debe 
preceder a grid. 
  
title ('título') 
 
Añade el título a una gráfica. 
 
xlabel('etiqueta') 
 
Añade una etiqueta al eje de abscisas. 
 
ylabel('etiqueta') 
 
Añade una etiqueta al eje de ordenadas. 
 
text(x,y, 'texto') 
 
Añade un texto en el lugar especificado por las coordenadas x  e y.  
 
>>X= [1,3,2,6];  
>>plot(X)  
>>grid 
>>title('QUEBRADA'), xlabel('Eje X'),  ylabel('Eje Y'), text(2.05,3.25,'VÉRTICE') 

65 

 
Agustín E. González Morales 

QUEBRADA
6

5.5

4.5

Eje Y
3.5
VÉRTICE
3

2.5

1.5

1
1 1.5 2 2.5 3 3.5 4
Eje X
 
loglog 
 
Ídem que plot, pero con escala logarítmica en ambos ejes. 
 
semilogx 
 
Ídem que plot, pero con escala logarítmica sólo en el eje de abscisas. 
 
semilogy 
 
Ídem que plot, pero con escala logarítmica sólo en el eje de ordenadas. 
 
>>X= [1,3,2,6];  
>>loglog(X) , grid, title('QUEBRADA') 
>>xlabel('Eje X'), ylabel('Eje Y'), text(2.05,3.25,'VÉRTICE') 
   
QUEBRADA ESCALA LOGARÍTIMCA EN EJE DE ORDENADAS ESCALA LOGARÍTIMCA EN EJE DE ABSCISAS
6

5.5

4.5
VÉRTICE VÉRTICE
4
Eje Y

Eje Y
Eje Y

3.5
VÉRTICE
3

2.5

1.5

0 0
10 10 1
0 1 1.5 2 2.5 3 3.5 4 0
10 10
Eje X
Eje X Eje X

 
hold 
 
Con hold on se respetan los gráficos ya escritos y se añaden otros en la misma ventana. Con hold 
off se cancela. 
66 

 
Agustín E. González Morales 

 
>>V= [1,3,2,6]; W=[1,2,3,4]; plot(V) 
>>hold on, plot(W) 
>>text(1.5,2.2,'V'),text(3,3.2,'W') 
6

5.5

4.5

3.5
W
3

2.5
V
2

1.5

1
1 1.5 2 2.5 3 3.5 4

 
line 
 
Dibuja las líneas que unen los puntos cuyas coordenadas se pasan como argumentos. Como en 
plot, se puede gestionar el color, ancho de línea, tamaño de las marcas, estilo de línea, el tipo de 
marca, etc.   
 
>> line ([10,15], [20,30],'color','b','LineWidth',2,'MarkerSize',8,'LineStyle','‐','Marker','+')   
% Las coordenadas son ([xinicial,xfinal], [yinicial,yfinal]).  
30

29

28

27

26

25

24

23

22

21

20
10 10.5 11 11.5 12 12.5 13 13.5 14 14.5 15

 
 

67 

 
Agustín E. González Morales 

fplot 
 
Dibuja una función escalar o vectorial introducida como argumento. Su sintaxis general es:  
 
fplot ('función', límites, 'cadena', tol)  
 
donde:  'función'  es  el  nombre  de  la  función  o  del  fichero  *.m  entre  apóstrofos;  límites  es  un 
vector  de  2  ó  4  elementos  cuyos  valores  son  [xmin,xmax]  ó  [xmin,xmax,ymin,ymax];  'cadena'  
permite controlar, como en plot, el color, las marcas, el tipo de línea, etc. y tol es la tolerancia del 
error relativo.  
 
También puede utilizarse fplot con la sintaxis: 
 
[x,y]=fplot ('función', limites, 'cadena', tol)  
 
en  este  caso  se  devuelven  los  valores  x  e  y,  pero  no  se  dibuja.  El  gráfico  se  obtendría  con  un 
comando plot posterior. 
  
Ejemplo: 
 
Se comienza creando un fichero llamado doscurvas.m que contiene las siguientes líneas: 
 
function y=doscurvas(x) 
y(:,1)=200*sin(x)./x; 
y(:,2)=x.^2; 
 
a continuación se ejecuta el comando: 
 
>> fplot('doscurvas(x)',[‐20,20],'b') 
400

350

300

250

200

150

100

50

-50
-20 -15 -10 -5 0 5 10 15 20

 
68 

 
Agustín E. González Morales 

 
fill 
 
Dibuja polígonos planos rellenándolos de un color. 
 
>> x=[1,5,4,2]; y=[1,0,4,3]; fill(x,y,'r') 
4

3.5

2.5

1.5

0.5

0
1 1.5 2 2.5 3 3.5 4 4.5 5

 
 
ezplot 
 
Dibuja una función explícita, implícita o paramétrica. 
 
>> ezplot('cos(x)')  % Por defecto el intervalo de x es [–2π, 2π] 
>> ezplot('cos(x)',[‐pi,pi])  % El intervalo de x es [–pi,pi] 
   cos(x) cos(x)

 
1 1
 
 
0.5 0.5
 
 
0 0
 
 
-0.5 -0.5
 
  -1
-1
 
-3 -2 -1 0 1 2 3
  -6 -4 -2 0
x
2 4 6
x

69 

 
Agustín E. González Morales 

>> ezplot('x^2 + y^2‐25')   
% Dibuja la función implícita x^2 + y^2–25  = 0 en el intervalo [–2π, 2π] tanto para x como para y. 
 
>> ezplot('x^2 + y^2‐25', [‐5,5])  
% Dibuja la función implícita x^2 + y^2–25 =0 en el intervalo [–5,5] tanto para x como para y. 
   x 2 + y 2-25 = 0 x 2 + y 2-25 = 0
5
  6
4

  4 3

  2
2

  1

0
 

y
0
y

-1

  -2 -2

  -4
-3

  -4

-5
  -6
-6 -4 -2 0 2 4 6
-5 -4 -3 -2 -1 0
x
1 2 3 4 5

  x

>>ezplot('x^2 + y^2‐25',[‐5,5,0,5])   
% Dibuja la función implícita x^2 + y^2 –25 =0 en el intervalo [–5,5] para x, y en [0,5] para y. 
 
>> ezplot('sin(t)','cos(t)')  
% Dibuja la función paramétrica x(t) = sin(t), y(t)=cos(t) en el intervalo de t [0,2π] 
   5
x 2 + y 2-25 = 0
1
x = sin(t), y = cos(t)

  4.5 0.8

  4 0.6

  3.5 0.4

3 0.2
  2.5 0
y

  2 -0.2

  1.5 -0.4

  1 -0.6

0.5 -0.8

0
-5 -4 -3 -2 -1 0 1 2 3 4 5 -1 -0.5 0 0.5 1
x x

ezpolar 
 
Dibuja una función en coordenadas polares. 
 
>> ezpolar ('cos(theta)')  % Por defecto el intervalo de x es [0, 2π] 
>> ezpolar ('cos(theta)',[0,pi/2]) 

70 

 
Agustín E. González Morales 

90 90
1 1
120 60 120 60
0.8 0.8

0.6 0.6
150 30 150 30
0.4 0.4

0.2 0.2

180 180 0
0

210 330
210 330

240 300
240 300
270
270 r = cos(θ)
r = cos(θ)

 
 
ezsurf 
 
Dibuja superficies. 
 
ezsurf('sin(x*y)',[‐2,2, ‐2, 2])   
% Por defecto los intervalos de x e y son [–2π, 2π]. En este caso [‐2,2] para x, [‐2,2] para y  

71 

También podría gustarte