Entrada/salida

Cadena de caracteres

Una cadena de caracteres es un vector formado por caracteres entre comillas simples. Los caracteres pueden ser, letras, números, otros símbolos y espacios. Creamos la cadena de caracteres 'Hola que tal' y la asignamos a la variable str

>> str='Hola que tal'
str =Hola que tal
>> str(2)
ans =o
>> str(6:8)
ans =que

Como las cadenas de caracteres son vectores, se pueden unir fácilmente. La misma operación se hace con la función strcat

>> str1='Hola';
>> str2=' que tal';
>> str=[str1,str2]
str =Hola que tal
>> strcat(str1,str2)
ans =Hola que tal

La función strcat como veremos más adelante es útil para trabajar con ecuaciones. Por ejemplo:

θ 1 =2πt θ 2 = π 2 +4πt π 12 t 2 } θ 1 = θ 2 +2kπ

>> eq1='2*pi*t';
>> eq2='pi/2+4*pi*t-(pi/12)*t^2';
>> eq=strcat(eq1,'=',eq2,'+k*2*pi')
eq =2*pi*t=pi/2+4*pi*t-(pi/12)*t^2+k*2*pi

La función char crea una matriz cuyas filas tienen la misma longitud (la fila del mayor número de caracteres) aunque guarden distinto número de caracteres (rellena con espacios las filas más cortas)

>> str=char('Hola que tal', 'gato','23');
>> str(1,:)
ans =Hola que tal
>> length(str(1,:))
ans =    12
>> str(3,:)
ans =23        
>> length(str(3,:))
ans =    12

La función strcmp compara dos cadenas de caracteres devolviendo 1 si son idénticas y 0 si no los son. Veremos su funcionamiento y el de otras funciones en el capítulo Sentencias condicionales.

Los valores numéricos se pueden convertir a cadenas de caracteres mediante las funciones num2str (números en general ) o int2str (enteros)

>> tF=50; %grado Fahrenheit
>> tC=(tF-32)*5/9; %grado Celsius
>> texto=['La temperatura es ',num2str(tC),' C']
texto = La temperatura es 10 C

str=int2str(x) convierte un número entero x en una cadena de caracteres que se guarda en str. Si x no es entero se redondea a un entero

>> str=int2str(34)
str =34
>> str=int2str(35.9)
str =36
>> str=int2str(35.2)
str =35

str=num2str(x,N) convierte un número x en una cadena de caracteres que se guarda en str. N es el número de cifras que se guarda

>> x=1000*pi;
>> num2str(x,1)
ans =3e+03
>> num2str(x,3)
ans =3.14e+03
>> num2str(x,4)
ans =3142
>> num2str(x,5)
ans =3141.6
>> num2str(x,8)
ans =3141.5927
>> num2str(x)
ans =3141.5927

>> x=pi/1000;
>> num2str(x,1)
ans =0.003
>> num2str(x,3)
ans =0.00314
>> num2str(x,4)
ans =0.003142
>> num2str(x,5)
ans =0.0031416
>> num2str(x,8)
ans =0.0031415927
>> num2str(x)
ans =0.0031416

En este ejemplo x es un vector

>> x=linspace(1,5,8)
x =  1.0000  1.5714  2.1429  2.7143  3.2857  3.8571  4.4286  5.0000
>> num2str(x,3)
ans =1   1.57   2.14   2.71   3.29   3.86   4.43      5

Entrada de datos

Si deseamos resolver otra ecuación de segundo grado, modificamos los valores de las variables a, b y c en el script, lo guardamos y lo volvemos a correr.

a=1;  b=-1; c=-6;
dis=sqrt(b^2-4*a*c);
x1=(-b+dis)/(2*a)
x=(-b-dis)/(2*a)

En MATLAB podemos cambiar el valor de los parámetros de entrada con el editor de script, guardar de nuevo el script modificado y correrlo. Pero es mucho más fácil utilizar el comado input .

a=input('primer coeficiente, a: ');
b=input('segundo coeficiente, b: ');
c=input('término independiente, c: ');
   
dis=sqrt(b^2-4*a*c); 
x1=(-b+dis)/(2*a)
x2=(-b-dis)/(2*a)

Corremos el script modificado, nos pide los coeficientes a, b y c de la ecuación de segundo grado ax2+bx+c=0 y calcula las raíces.

primer coeficiente, a: 1
segundo coeficiente, b: -1
término independiente, c: -6
x1 = 3
x2 = -2

Para asignar una cadena de caracteres (string) a una variable str, se puede hacer de una de las dos maneras siguientes:

>> str=input('mensaje: ');
mensaje: 'hola'
>> str=input('mensaje: ','s');
mensaje: hola

En el primer caso, el string deberá estar delimitado por comillas simples, en el segundo caso, pasándole a input el parámetro s, ya se le está indicando que espera un string y no son necesarias las comillas.

Introducimos un vector o una matriz con el comando input del siguiente modo

>> temp=input('Introduce cuatro temperaturas en grados C: ')
Introduce cuatro temperaturas en grados C: [10,22,40,23]
temp =    10    22    40    23

El vector deberá estar delimitado [ ...]

Mostrar datos

MATLAB imprime los resultados de los cálculos y los guarda bien en una variable o en ans, si no se especifica. En muchos casos, esto es suficiente, pero en programas más largos es necesario identificar o describir el resultado de un determinado cálculo. MATLAB dispone de una función fprintf muy versátil para mostrar distintos datos con formato, alternativamente se puede utilizar la función disp.

La función disp

La función disp de MATLAB se utiliza para mostrar un escalar, un mensaje (string), un vector o una matriz. En la línea de comandos escribimos

>> disp('resultado')
resultado
>> y=22;
>> disp(y)
    22
>> x=1:0.5:3;
>> disp(x)
    1.0000    1.5000    2.0000    2.5000    3.0000
>> A=[1 2 3; 4 5 6; 7 8 9];
>> disp(A)
     1     2     3
     4     5     6
     7     8     9

Mezclamos texto y números

>> x=12.76;
>> disp(['La longitud es = ',num2str(x),' m'])
La longitud es = 12.76 m
>> x=[10.32, 32.12, 5.10];
>> disp(['Las longitudes son = ',num2str(x),' m'])
Las longitudes son = 10.32        32.12          5.1 m

>> n=length(x);
>> disp([repmat('La longitud es = ',n,1),num2str(x'),repmat(' m',n,1)])
La longitud es = 10.32 m
La longitud es = 32.12 m
La longitud es =   5.1 m

Vamos a ver como imprime una tabla de valores (abscisa, ordenada) de la función, y=3x2-5

x=0:5 %vector fila
y=3*x.^2-5 %vector fila
res(:,1)=x'; %columna 1 de la matriz 
res(:,2)=y';  %columna 2 de la martiz
%esto es equivalente a poner res=[x' y']
disp('tabla función')
disp('abscisa   ordenada')
disp(res)

En la ventana de comandos corremos el script

x =     0     1     2     3     4     5
y =    -5    -2     7    22    43    70
tabla función
abscisa   ordenada
     0    -5
     1    -2
     2     7
     3    22
     4    43
     5    70

La función fprintf

Otra función para mostrar un mensaje o un resultado, que permite mezclar texto y valores numéricos de las variables y tiene un mejor control sobre el formato de los números. Esta función tiene muchas posibilidades por lo que empezaremos con las más sencillas.

fprintf('texto %5.2f texto adicional', variable)

En medio del texto se ha intercalado un valor numérico que contiene una variable con el formato %-5.2f,

Vamos a calcular el alcance de un proyectil disparado con velocidad de v0=46 m/s haciendo un ángulo de θ=30° mediante la siguiente fórmula.

x= v 0 2 sin(2θ) g

Creamos un script para probar la función fprintf

v0=46; %velocidad de disparo
ang=30; %ángulo de tiro
x=v0^2*sind(2*ang)/9.8; %alcance
fprintf('ángulo de tiro %i°, alcance %5.2f m\n',ang,x)

El carácter \n al final del texto en la función fprintf indica una nueva línea, probar el efecto al quitarlo. Las variables que guardan los datos ang y x se ponen al final en el mismo orden que se citan en el texto separadas por comas. Se sugiere al lector que pruebe otros formatos

Corremos el script en la ventana de comandos

ángulo de tiro 30°, alcance 186.99 m

En este ejemplo, vemos como controla el formato de los números

>> x=[11, -13, 4078.458, 0.11167];
>> fprintf('%5.2f\n', x)
11.00
-13.00
4078.46
 0.11
>> fprintf('x = %2.0f, y = %2.0f, z = %5.3f, w = %5.5f\n', x)
x = 11, y = -13, z = 4078.458, w = 0.11167

La función fprintf admite vectores. Calculamos y mostramos el alcance para varios ángulos de tiro

v0=46; %velocidad de disparo
ang=[15:15:75]; %vector ángulos de tiro
x=v0^2*sind(2*ang)/9.8; %vector alcances
disp('ángulo, alcance (m)')
fprintf('%i°     %5.2f\n',[ang;x])
ángulo, alcance (m)
15°     107.96
30°     186.99
45°     215.92
60°     186.99
75°     107.96

La función sprintf

La función sprintf es similar a printf salvo que imprime en una variable. Se utiliza en combinación con la función gráfica text para mostrar valores de una variable en un gráfico

%código para dibujar un gráfico
plot(Vr,Pr,'r')
text(1,1.35,sprintf('presión %1.3f',p))

Vamos a ver como funciona en la ventana de comandos. Guardamos el valor que imprime sprintf en la variable str.

>> str=sprintf('el valor de pi es %1.3f',pi)
str =
el valor de pi es 3.142

Al final de fprintf se pone el carácter \n que indica una nueva línea, no es necesario en la función sprintf