Ejercicios Matlab
Ejercicios Matlab
sobreviveUMA
Informática
Facultad de Ciencias
Universidad de Málaga
1) Herculano acaba de montar su primer gimnasio. Está un poco preocupado porque todo el
mundo le pide que le calcule el IMC (Índice de Masa Corporal). Ayúdale explicándole el
algoritmo para su cálculo a partir de la altura en cm y el peso en kg de una persona. Si tú
tampoco sabes cómo se calcula documéntate antes.
p=input('Ingrese su peso en kg: ');
cm=input('Ingrese su altuta en cm: ');
a=cm/100;
r=p/(a.^2);
disp('Su Indice de Masa Corporal es: ')
disp(r)
2) Herculano está hoy de nuevo preocupado. Ahora es su hijo el que le ha pedido que le
explique cómo resolver una ecuación de segundo grado. Échale una mano y escríbele el
algoritmo para que se lo pueda él contar a su hijo.
a=input('Inserte el coeficiente que acompaña a x^2: ');
b=input('Inserte el coeficiente que acompaña a x: ');
c=input('Inserte el coeficiente independiente: ');
raiz=(b^2)-(4*a*c);
x1=(-b+sqrt(raiz))/(2*a);
x2=(-b-sqrt(raiz))/(2*a);
disp('Las dos soluciones posibles son: ')
disp(x1)
disp(x2)
3) Como no le va muy bien con el gimnasio se quiere presentar a unas oposiciones para
bombero. Se ha enterado de que hay tres pruebas y que la nota final será igual a un 20% de la
prueba teórica, un 30% de la prueba práctica y el resto de la nota corresponderá a las pruebas
físicas. Explícale cómo puede saber su nota final sabiendo la nota de cada parte.
t=input('Inserte su nota del exámen de teoría: ');
p=input('Inserte su nota del exámen práctico: ');
f=input('Inserte su nota de las pruebas físicas: ');
N=0.2*t+0.3*p+0.5*f;
disp('Su nota final es: ');
disp(N)
4) En la prueba física le piden recorrer una distancia a una velocidad mínima en km/h. El
problema es que su cronómetro solo le da tiempo en minutos y segundos. La distancia que
recorre se puede calcular fácilmente contando el número de vueltas que da a una pista de
atletismo (cada vuelta completa son 400m). Descríbele el algoritmo que debe usar para
calcular la velocidad media en km/h que ha logrado al dar un número de vueltas (puede ser
fraccionario) a la pista si además conoce el tiempo que ha marcado su cronómetro.
m=input('Inserte los minutos transcurridos: ');
s=input('Inserte los segundos trascurridos: ');
d=input('Inserte el número de vueltas dadas: ');
h=(m/60)+(s/3600);
km=(d*400)/1000;
v=km/h;
disp('Veloidad media lograda: ');
disp(v);
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4963292
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Informática. Ingeniería química Irene Palomo Cantero
Básicos
1) Completar el problema del cálculo del IMC para que una vez se conozca su valor haga una
recomendación a las personas que estén en zona problemática. Es decir, “Engordar” si su
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
IMC<18.5 y “Adelgazar” si su IMC>25.
2) Mejorar el algoritmo para el cálculo de las raíces de un polinomio de segundo grado para
que diga el número de raíces reales que tiene y sus valores.
3) Dadas las longitudes de los tres lados de un triángulo, determinar si es “Equilátero” (3 lados
iguales), “Isósceles” (2 lados iguales) o “Escaleno” (los tres lados diferentes).
if (a==b)&(b==c)
disp('Es un triángulo equilátero');
else
if ~(a==b)|(b==c)|(a==c)
disp ('Es un triángulo escaleno');
else
disp('Es un triángulo isósceles');
end
end
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4963292
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
if (t>=4)&(p>=4)
n=0.5*t+0.5*p;
disp('Nota media: ');
disp(n)
if (n<5)
disp('Suspenso');
elseif (n>=5)&(n<7)
disp ('Aprobado')
elseif (n>=7)&(n<9)
disp('Notable')
elseif (n>=9)&(n<10)
disp ('Sobresaliente')
end
else
disp('Suspenso');
end
Intermedios
5) En un parking se cobra a 0.60 euros la hora o fracción de aparcamiento. Dado el tiempo (en
minutos) que ha estado un coche estacionado, calcular el importe total a pagar en euros.
min=input('Tiempo de estacionamiento en minutos :' );
h=min/60;
h=ceil(h);
disp('Debe pagar, en euros, la cantidad de: ');
p=0.60*h;
disp(p)
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4963292
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
elseif (a==d)&(a>c)&(a>b)
disp('Los números mayores son a y d')
disp(a)
end
% Para b=c, b=d
if (b==c)&(b>a)&(b>d)
disp('Los números mayores son b y c')
disp(b)
elseif (b==d)&(b>a)&(b>c)
disp('Los números mayores son b y d')
disp(b)
end
% Para cuando c=d
if (c==d)&(c>a)&(c>b)
disp('Los números mayores son c y d')
disp(c)
end
% Cuando hay tres números iguales
if(a==b)&(a==c)&(a>d)
disp('Los números mayores son a, b y c')
disp(a)
elseif(a==b)&(a==d)&(a>c)
disp('Los números mayores son a, b y d')
disp(a)
elseif(a==d)&(a==c)&(a>b)
disp('Los números mayores son a, c y d')
disp(a)
elseif(b==d)&(b==c)&(b>a)
disp('Los números mayores son b, c y d')
disp(b)
end
7) Clasificar una jugada, resultante de lanzar 3 dados, en función del número de 6 que se hayan
sacado: "Buena" (uno), "Muy Buena" (dos) y "Excelente" (tres).
a=input('Resultado del dado 1: ');
b=input('Resultado del dado 2: ');
c=input('Resultado del dado 3: ');
% Números
x=0;
if (a<=6)&(b<=6)&(c<=6)
if (a==6)
x=x+1;
end
if (b==6)
x=x+1;
end
if (c==6)
x=x+1;
end
else
disp('Ha introducido un número no válido')
end
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4963292
% Frases
if (x==1)
disp('Jugada Buena')
elseif (x==2)
disp ('Jugada Muy Buena')
elseif (x==3)
disp ('Jugada Excelente')
end
8) El salario semanal que recibe un empleado depende del número de horas que trabaja. Si
trabaja más de 40 horas semanales se le pagarán como horas extras. El precio de la hora extra
es el doble de la hora normal y el triple para las que superan las 48 horas semanales. Calcular
el sueldo semanal de un empleado sabiendo las horas que trabajó durante la semana y el
precio de la hora normal.
h=input('Horas semanales trabajadas: ');
p=input('Precio por hora normal: ');
% s= lo que cobra
if (h<=40)
s=h*p;
disp('Su sueldo es: ');
disp(s)
else
if (h>40)&(h<=48)
x=h-40;
% x= horas extras (p*2)
s=40*p+x*2*p;
disp('Su sueldo es: ');
disp(s)
elseif (h>48)
y=h-48;
% y= horas extras (p*3)
s=40*p+8*2*p+y*3*p;
disp('Su sueldo es: ');
disp(s)
end
end
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4963292
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Informática. Ingeniería química Irene Palomo Cantero
1) Hacer un algoritmo que busque el máximo de entre los elementos positivos de un vector.
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
% relación de while (1)
%v(i) es el valor de v en la posición i, que va variando a medida que
avanza el bucle.
v=input('Inserta un vector: ');
i=1;
while i<=length(v)
if v(i)>0
if v(i)>max
max=v(i);
end
end
i=i+1;
end
disp('El valor máximo del vector es: ')
disp(max)
2) Calcular por separado la media de los elementos que son pares e impares en un vector.
% relación de while (2)
v=input('Inserta un vector: ');
p=[]; %vector para números pares
i=[]; %vector para números impares
x=1;
while x<=length(v)
a=v(x);
if a/2==fix(a/2)
p=[p,a];%añado ese valor al vector de los pares
else
i=[i,a];%añado ese valor al vector de los impares
end
x=x+1; %le sumo 1 a la posición para que me siga recorriendo el
vector
end
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4963292
3) Dado un vector, decir si algún elemento a partir del segundo es divisible por el primer
elemento del vector, terminando de buscar en cuanto se encuentre el primero que lo cumple.
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
a partir del 2º término que se pueda dividir entre el 1er término del
vector y que el resultado de la división me de un número entero
while i<=length(v)
if v(i)/a==fix(v(i)/a)%si es número es entero
y=v(i);
disp('El número buscado es')
disp(y)
break %con esto salgo del bucle cuando se cumple el if
end
i=i+1;
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4963292
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
2 - Escribir la expresión para convertir un vector x con los dígitos de un número binario xn,
xn-1,...,x2,x1,x0 a su valor en base 10 en la variable d.
Recordar que se calcula como Σi=0n xi 2i. La función sum(v) devuelve la suma de los
elementos del vector v.
Entregar el archivo bina2deci.m sin la definición de x.
a= x .* 2 .^ (length(x)-1:-1:0);
d=sum(a)
3 - Escribir el script plots.m para representar gráficamente sobre los mismos ejes las
funciones: y1 = 5 e-x seno(5πx); y2 = ± 5 e-x (usar 2 vectores, y2a e y2b, para la y2).
La y1 debe aparecer en color azul con trazo continuo e y2 en rojo a puntitos. Utilizar en
ambos casos 100 puntos para la representación en el intervalo [0,2] (usar linspace).
Poner como título exactamente "Onda amortiguada", "tiempo" en el eje x y "Amplitud" en
el eje y.
x=linspace (0,2,100);
y1=5*exp(-x).*sin(5*pi*x);
y2a=5*exp(-x);
y2b=-5*exp(-x);
plot(x,y1,'b')
hold on
plot(x,y2a,'r:')
hold on
plot(x,y2b,'r:')
title('Onda amortiguada')
xlabel('tiempo')
ylabel('Amplitud')
5 - Sabiendo que rand devuelve valores aleatorios reales en el intervalo [0,1] con
probabilidad uniforme, generar el vector v con 100.000 valores aleatorios enteros en el
intervalo [1,10]. Tener en cuenta que para que el ejercicio sea correcto deben generarse
aproximadamente el mismo número de valores de cada número.
Entregar el algoritmo necesario en el script alea1a10.m
v= 10*rand(100000,1);
v= floor(v)+1
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4963292
En el ejercicio 3:
En el ejercicio 4:
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4963292
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Informática. Ingeniería química Irene Palomo Cantero
1 – Escribir la función [ro] = coefcorr(X,Y) que dados dos vectores X e Y del mismo
tamaño devuelva en ro su coeficiente de correlación calculado según la fórmula que aparece
en el ejercicio 11 de la relación Práctica 2. No se permite el uso de la función de Matlab
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
corrcoef (sí antes del envío para comprobar el resultado).
Entregar el archivo coefcorr.m
function [ro]=coefcorr(X,Y);
% función que calcula el coeficiente de correlación
% ro es el coeficiente de correlación
% X vector de entrada 1
% Y vector de entrada 2
% X-media de X
a=(X-mean(X));
%Y-media de Y
b=(Y-mean(Y));
%numerador
num=sum(a.*b);
%raíz
raiz=(sum(a.^2))*(sum(b.^2));
%denominador
den=sqrt(raiz);
ro=num/den
end
2 – Escribir la funcion [maxi, mini, medi, vari] = estadisticos(A), que dada una matriz A de
cualquier tamaño devuelva sus valores máximo, mínimo, media y varianza en las
respectivas variables de salida.
function [maxi, mini, medi, vari]=estadisticos(A)
%mínimo de A
mini=min(A(:));
%media de A
medi=mean(A(:));
%varianza de A
vari=var(A(:),1);
end
3 – Escribir el script ajuste.m que calcula el polinomio P de grado 2 que mejor ajusta a la
función raíz cuadrada en el intervalo [0,2] con 100 puntos. Calcular el error cuadrático
medio de la aproximación en ecm y representar gráficamente ambas funciones superpuestas
(polinomio en azul continuo y raíz cuadrada en rojo discontínuo -puntitos-).
x=linspace(0,2,100)
y=sqrt(x)
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4963292
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
%gráfica
plot(x,Y,'b-')
hold on
plot (x,y,'r:')
4 – Hacer la función [vari] = mivarianza(f) que lea el archivo datos.txt (no hay que
mandarlo) y que devuelva la varianza de los datos de la fila f de la tabla que contiene.
Debe enviarse solo el archivo mivarianza.m
Nota: se puede usar la función Matlab dlmread (xlsread en sistemas Windows con Office
para leer archivos de Excel).
function [vari]= mivarianza(f)
%cuando lo ejecute pondré minivarianza(4) por ejemplo, para selecionar
la
%fila 4.
x=M(f,:);
vari=var(x,1);
disp('varianza')
disp(vari)
end
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4963292
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
%n= numero de elementos
%a0 es el primer elemento de la serie
%a2 es el segundo elemento de la serie
f=[a0 a1];
end
end
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4963292
end
for i=1:length(v)
if M<v(i)
M=v(i);
ind=i;
end
end
matpos.m
function p=matpos(B)
[m,n] = size(B);
p=0;
for i=1:m
for j=1:n
if B(i,j)>=0
p=p+1;
end
end
end
end
matpos1.m
function p=matpos1(B)
[m,n] = size(B);
p=0;
for i=1:m
for j=1:n
if B(i,j)>=0
p=sum(sum(B>=0));
end
end
end
end
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4963292
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Informática. Ingeniería química Irene Palomo Cantero
for i=1:l
if(cad(i)>='A') && (cad(i)<='Z')
cad(i)=cad(i)+32;
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
end
end
g=cad;
end
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4963292
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Página 206, problema 16
n=4; m=5;
A=zeros(m,n);
for i = 1:m
for j = 1:n
if i<j
A(i,j) = (-1)^(i+j);
else
A(i,j)=i+j;
end
end
end
surf(A)
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4963292
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
q=poly(h)
end
for i=1:iter
a=polyval(p,x0)
b=polyval(d,x0)
x0=x0-(a/b)
end
sol=x0
end
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4963292
if n(i)>=5
cont=0;
elseif n(i)<0
cont=0;
else
b=b+1;
cont=b;
end
end
else
cont=0;
end
%respuestas
if cont==length(n)
P=1; %número válido
else
P=0; %número inválido
end
end
function d=p5b(n)
P=p5a(n)
e=[0:length(n)-1]
if P==1
d=sum(n.*(5.^e));
else
d=NaN
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4963292
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Informática. Ingeniería química Irene Palomo Cantero
end
Página 215, problema 7
function B=p7(A)
[fil,col]=size (A);
if col==fil
for i=1:fil
for j=1:col
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
if A(i,j)<0
B(i,j)=-1;
elseif A(i,j)==0
B(i,j)=0;
elseif A(i,j)>0
B(i,j)=1;
end
end
end
else
B=[];
end
end
x=M-N;
r=mod(x,7);%resto
if M==fix(M)&&N==fix(N)
if r==0
K=1;
else
K=0;
end
else
K=-1;
end
end
end
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4963292
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
if M==fix(M)&&N==fix(N)&&M<=N %naturales y M menor que N
%vector con lo números desde M hasta N
for i=M:N
v=[v;M];
M=M+1;
end
%Vector con los restos de dividir entre 7
for j=1:length(v)
a=mod(v(j),7);
w=[w;a];
end
%si el cont=1 es que hay multiplos de 7
for k=1:length(w)
if w(k)==0
cont=1;
break
else
cont=0;
end
end
%Para decir cuando K es 1 o 0
if cont==1
K=1;
else
K=0;
end
else
K=0;
end
end
Las líneas en negrita en este ejercicio creo que se pueden omitir. Pero no estoy segura. Yo lo
entregué tal cual está así.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4963292
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
end
if isempty(v)
Z=NaN
else
if v==a
Z=0 %si todos son positivos
else
Z=1 %si hay alguno negativo
end
end
end
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4963292
end
end
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4963292
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Informática. Ingeniería química Irene Palomo Cantero
prodB=f*c
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
El producto no es conmutativo, ya que cuando multiplicamos a fila 9 (que es una matriz 1x25)
por la columna 20 (que es una matriz 25x1) obtenemos una matriz 1x1. Si hacemos la
multiplicación al revés (haciendo la columna por la fila) obtenemos una matriz 25x25.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-4963292