0% encontró este documento útil (0 votos)
20 vistas4 páginas

Examen de MATLAB: Funciones y Ejercicios

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
20 vistas4 páginas

Examen de MATLAB: Funciones y Ejercicios

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

EXAMEN

APELLIDOS ORDINARIO
Bloque II
NOMBRE
ESCUELA TÉCNICA SUPERIOR INFORMÁTICA
DE INGENIEROS INDUSTRIALES Grupo: D.N.I: Enero 2019

NORMAS DEL EXAMEN


 La duración de la prueba será de 2 horas y 15 minutos.
 No se corregirá nada que no esté escrito con un método de escritura indeleble.
 No se permite el uso de ningún material salvo un bolígrafo y papel.
 Solo se permite el uso de las siguientes funciones de MATLAB: size, length, input, floor, ceil, round, rand,
error, warning, disp, rem, mod, zeros, ones, ischar, char, exp, sqrt, log, log10, sin, cos, fopen,
fclose, fprintf, fread, fwrite, fscanf, fseek, ftell.

EJERCICIOS (10 puntos)

1. (2 puntos) Escribir una función llamada vandermonde que reciba un número entero positivo, n, como argumento de
entrada y devuelva la matriz de Vandermonde, V, de dimensión nxn. Cada columna j de la matriz contendrá los
primeros n números naturales elevados a una cierta potencia que dependerá de dicha columna.
Ejemplos:
>> V=vandermonde(5) >> V=vandermonde(3)
V= V=
1 1 1 1 1 1 1 1
1 2 4 8 16 1 2 4
1 3 9 27 81 1 3 9
1 4 16 64 256
1 5 25 125 625

Nota: En caso de que no se introduzca el valor de n, o no sea correcto, se mostrará un mensaje de error.

function [V] = vandermonde(n)


% Chequeo de errores
if (nargin==0 || n<1 || n~=floor(n))
error ('No se ha introducido el tamaño o este no es correcto')
end

% Algoritmo
% Creamos la matriz
V = ones(n);
for i = 2:n
for j = 2:n
V(i,j) = i^(j-1);
end
end
% Por si a alguien le interesa, aqui teneis una version sin bucles
% ([1:n]'*ones(1,n)).^(ones(n,1)*[0:n-1])
return
EXAMEN
APELLIDOS ORDINARIO
Bloque II
NOMBRE
ESCUELA TÉCNICA SUPERIOR INFORMÁTICA
DE INGENIEROS INDUSTRIALES Grupo: D.N.I: Enero 2019

2. (3 puntos) Entre otras muchas propiedades de la serie de Fibonacci, la división de un término de la serie entre el anterior
tiende a un número conocido como “la divina proporción” cuando la longitud de la serie tiende a infinito. Para calcular
su valor, se pide escribir una función llamada divina_proporcion que recibiendo como argumento de entrada un
umbral de tolerancia, t, calcule la divina proporción con un error menor a dicha tolerancia. La función devolverá el
valor calculado, dp, así como el valor de truncamiento n.
Nota: El valor de la divina proporción se considerará calculado con una aproximación satisfactoria cuando la diferencia
entre el término n y el n-1 sea menor que dicha tolerancia. Si no se recibe el valor de tolerancia se utilizará t=0.001
por defecto. Se valorará la eficiencia del código.
Ejemplo:
n 0 1 2 3 4 5 6 7 8 9 10 11 12
fn 0 1 1 2 3 5 8 13 21 34 55 89 144
dp 1 2 1.5000 1.6667 1.6000 1.6250 1.6154 1.6190 1.6176 1.6182 1.6180
t = 0.01 → dp = 1.6154, n = 8
t = 0.001 → dp = 1.6182, n = 11
function [dp, n]=divina_proporcion(t)

if(nargin==0)
t=0.001;
end

% Inicializamos los dos primeros valores de la dp y


% los terminos de fibonacci correspondientes
n = 3;
fn_1 = 1;
fn_2 = 1;
fn = fn_1+fn_2;
dp = fn/fn_1;
dp_1 = fn_1/fn_2;

while( mi_abs(dp-dp_1) > t )


n = n+1;
fn_2 = fn_1;
fn_1 = fn;
fn = fn_1+fn_2;
dp_1 = dp;
dp = fn/fn_1;
end

return;
end

function a = mi_abs(n)
if nargin==0
error('Faltan el valor');
end
a = n;
if(n<0)
a=-n;
end
return;
end
EXAMEN
APELLIDOS ORDINARIO
Bloque II
NOMBRE
ESCUELA TÉCNICA SUPERIOR INFORMÁTICA
DE INGENIEROS INDUSTRIALES Grupo: D.N.I: Enero 2019

3. (2 puntos) La media móvil de n elementos de un vector, v, se define como otro vector, mm, que contiene en cada
posición la media de n de los elementos de v contados desde dicha posición. Realice una función llamada
media_movil que, recibiendo como parámetros de entrada un vector, v, y un número de elementos n, devuelva el
vector, mm, que contenga la media móvil de n elementos de v.
Ejemplos:
v=(6, 9, 9, 8, 8, 8, 8, 7, 5, 10), n=4 → mm=(8.00, 8.50, 8.25, 8.00, 7.75, 7.00, 7.50)
v=(6, 9, 9, 8, 8, 7, 5, 6), n=8 → mm=(7.25)

Nota: Si sólo se recibe el vector, v, se calculará por defecto la media móvil de 5 elementos. Si no se recibe ningún
argumento de entrada, o si n no es un valor válido, se mostrará el correspondiente mensaje de error. Ejemplos:
v=(6, 9, 9, 8, 8, 5, 10) → mm=(8.00, 7.80, 8.00)
v=(6, 9, 9, 8, 8, 7, 5, 6), n=-4 → error

function [mm]=media_movil(v,n)

% Chequeo de existencia
if(nargin==0)
error('Se debe introducir al menos un vector');
elseif(nargin==1)
n=5;
end
% Chequeo de errores
if(n<1 || n~=round(n) || n>length(v))
error('El valor de n no es valido');
end

% Creamos mm relleno de 0s puesto que podemos calcular su tamaño


mm=zeros(1,length(v)-n+1);

for i=1:length(v)-n+1
% Media entre las posiciones i e i+n-1
acc = 0;
for k=0:n-1
acc = acc + v(i+k);
end
mm(i)=acc/n;
end

return;
end

4. (3 puntos) Escribir un fichero de comandos que lea desde teclado un verbo y lo muestre por pantalla conjugado en
presente de indicativo. Las desinencias de los verbos se deberán leer desde un fichero previamente creado (para evitar
problemas de codificación, no se incluirán los acentos). Suponga que los ficheros se nombran con respecto a cada
conjugación como ‘[Link]’, ’[Link]’ y ‘[Link]’.
Ejemplo:
>> conjugar
Indique el verbo que desea conjugar: saltar
Presente de indicativo del verbo saltar
yo salto
tu saltas
el salta
nosotros saltamos
vosotros saltais
ellos saltan
EXAMEN
APELLIDOS ORDINARIO
Bloque II
NOMBRE
ESCUELA TÉCNICA SUPERIOR INFORMÁTICA
DE INGENIEROS INDUSTRIALES Grupo: D.N.I: Enero 2019

Contenidos del fichero ‘[Link]’:


yo -o
tu -as
el -a
nosotros -amos
vosotros -ais
ellos -an

Nota: Existen tres conjugaciones –ar, -er, -ir. Se supondrá que los verbos introducidos son regulares. Si la palabra
introducida no se corresponde con un verbo, el fichero de comandos debe avisar de ello y solicitar de nuevo un verbo
que sea válido.

% Fichero de comandos para conjugar verbos en presente de indicativo


valido = 0;
% Lectura robusta del verbo
while valido == 0
verbo = input('Indique el verbo que desea conjugar: ','s');
conj = verbo(length(verbo)-1:length(verbo));
if (conj(2)== 'r')&&(conj(1)=='a' || conj(1)=='e' || conj(1)=='i')
valido = 1;
raiz = verbo(1:length(verbo)-2);
else
fprintf('Introduzca un verbo correcto en castellano');
end
end
% Elegimos el fichero con las conjugacion
switch(conj)
case 'ar'
fichero = '[Link]';
case 'er'
fichero = '[Link]';
case 'ir'
fichero = '[Link]';
end
% Abrimos el fichero de conjugacion
iden = fopen(fichero,'r');
if iden < 1
error('El fichero de conjugacion no ha podido abrirse');
end
fprintf('Presente de indicativo del verbo %s\n',verbo);
for i = 1:6
% Vamos leyendo las personas y las desinencias ...
% (tambien se podria hacer con %c y luego buscando los guiones)
persona = fscanf(iden,'%s -',1);
if length(persona)<8
persona = [persona,char(' '*ones(1,8-length(persona)))];
end
desi = fscanf(iden,'%s\n',1);
% ... e imprimiendo por pantalla la conjugación
fprintf('%s %s%s\n', persona, raiz, desi);
end
% Cerramos el fichero
if (fclose(iden)~=0)
error('No se ha podido cerrar el fichero de conjugacion correctamente');
end
return

También podría gustarte