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:
>> 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,
- % es el símbolo que indica formato
- -, alinea el número hacia la izquierda
- +, imprime el signo (+ si es positivo y - si es negativo)
- 0, añade ceros
- 5, indica cinco caracteres que es el ancho del campo donde ese imprime el valor numérico, si el número es más corto se añaden espacios o ceros delante del número.
- 2, indica la precisión, indica el número de dicimales que se mostrarán a la derecha del punto decimal
- f, indica que se utilizará la notación (entero.decimal) por ejemplo 17.09
- e, indica que se utilizará la notación exponencial, por ejemplo1.709e+001
- i, indica entero
- g, formato corto
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.
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