Mostrando entradas con la etiqueta Matlab. Mostrar todas las entradas
Mostrando entradas con la etiqueta Matlab. Mostrar todas las entradas

3 números primos en Matlab


function out=funcion_practica(n)
%
% Visualiza primeros tres números primos en caso que el argumento de
% entrada sea menor a 3.
if n==1
    out=true;
    return
end
%
if n==2
    out=true;
    return
end
%
% Incializa variables.
i=3;
val=3;
%
% Inicializa primeros 3 numeros primos.
prime=(1:3);
%
while length(prime)~=n
    val=val+2;
    fac=length(factor(val));
    if fac==1
        prime(i+1)=val;
        i=i+1;
    end
end
i=1;
while i<=length(prime)

if n==prime(i)

out=true;
return;

end
i=i+1;

end
out=false;
end

Codificar texto en Matlab

function out = funcion_practica()
   
    x=input('Ingresa el texto a codificar: ', 's');
    n=input('Ingrese el desplazamiento. ');
   
   
   
    i=((x-n)-97);%resta 97 a los valores ascci
    j=mod(i,26);%realiza la operacion modulo
    k=(j+97);%suma 97 al modulo
    l=char(k);%se pasa de numero a caracter
    disp('su decodificacion es');
    disp(l);
   
end

Primos en Matlab

function primos=practica()
n=1000;

enteros=2:n;
primos =[1];
    while length(enteros)>0
        sicPrim=enteros(1) ;
        primos=[primos,sicPrim];
        enteros1=[];
        for i=1:length(enteros)
            if(mod(enteros(i),sicPrim)~=0)
                enteros1=[enteros1, enteros(i)]
            end % if
        end % for
        enteros=enteros1;
    end % while  
end % function

Cifrado en Matlab

function r=codifica_vigemere(texto,clave)
    r='';
    k2=1;
    for k=1:length(texto)
        if texto(k)>='A' && texto(k) <= 'Z' %En caso de ser una letra mayuscula...
            desp=clave(mod(k2-1,length(clave))+1)-'A'; %%Habia un +1
            r(k)='A'+mod(texto(k)-'A'+desp, 'Z'-'A'+1);
            k2=k2+1;
        else
            r(k)=texto(k);
        end
    end
end

Ajuste por míninos cuadrados en Matlab

function[]=ejer ()


X=importdata('Regresion.csv');

b=((length(X.data)*sum(X.data(:,1).*X.data(:,2)))-(sum(X.data(:,1))*sum(X.data(:,2))))/(length(X.data)*sum(X.data(:,1).^2)-(sum(X.data(:,1)))^2);
a=(sum(X.data(:,2))-b*sum(X.data(:,1)))/length(X.data);


y=a*(X.data(:,1))+b;


figure,plot(X.data(:,1),X.data(:,2),'o r')
hold on

plot(X.data(:,1),y,'g')
end

Saber si un número es primo en Matlab


function out=funcion()
n=input('Introduce un numero para saber si es primo o no: ');
if n==1
    out=false;
    return
end
%
if n==2
    out=true;
    return
end
%

i=3;
val=3;
%

prime=(1:3);
%
while length(prime)~=n
    val=val+2;
    fac=length(factor(val));
    if fac==1
        prime(i+1)=val;
        i=i+1;
    end
end
i=1;
while i<=length(prime)

if n==prime(i)

out=true;
return;

end
i=i+1;

end
out=false;


if(out==true)
    disp('primo');
else
    disp('primo');
end
end

Tratamiento de ficheros en Matlab

Descargar el fichero .rar de la dirección
https://drive.google.com/a/unileon.es/file/d/0B6NAKkjT2LpeWlpvQU0ybGlybzA/view?usp=sharing
Dentro del archivo .rar existen dos ficheros, Dataset1.txt y Dataset_corto.txt. El fichero corto será utilizado como test con el fin de simplificar la depuración de código.
Se busca realizar un código lo más eficiente posible que cumpla los siguientes objetivos:
• Importar los datos del fichero a Matlab. Generar una matriz en la que la primera columna es la fecha hora de la muestra y las demás columnas se corresponden con los datos.
• Encontrar muestras perdidas en los datos sabiendo que el muestreo es constante a un minuto. Las muestras perdidas se rellenarán con NaN’s.
• Construir un histograma con los datos de la tensión y etiquetar la figura.
• Calcular el valor máximo de potencia consumida y el instante de tiempo en el que se produce
• Calcular el valor medio de la potencia consumida por hora, para ello agrupar los datos de potencias por hora y calcular la media con la función nanmean que descarta los valores NaN. Para facilitar el cálculo hacer que los datos comiencen en un instante de tiempo HH:00:00 y finalice en HH:59:00.
• Dibujar la gráfica de potencia horaria y etiquetar la gráfica


a=importdata('Dataset_corto.txt');
fecha1=datenum(a.textdata(2:end,1),'dd/mm/yy');
fecha2=datenum(a.textdata(2:end,2),'HH:MM:SS');
fecha=fecha1+fecha2-datenum('01/01/2015');
b=[fecha a.data]

[f,~]=size(b);
f=(etime(datevec(datestr(b(f,1))),datevec(datestr(b(1,1))))/60);

for q=1:f
    if ~isnan(b(q,1))
        if ~strcmp(datestr(addtodate(b(q,1),1,'minute')), datestr(b(q+1,1)))
            num=(etime(datevec(datestr(b(q+1,1))),datevec(datestr(b(q,1))))/60)-1
        end
    end
end

hist(b(:,4));title('Histograma del voltaje');xlabel('Voltajes');ylabel('Frecuencias')

[maximo,pos]=max(b(:,2))
datestr(datestr(b(pos,1)),'HH:MM:SS',0)
for q=0:23
    nanmean(b(hour(b(:,1))==q,2))
end

for q=1:10
    q=q-1;
end

q=datevec(datestr(b(1,1)))
w=datevec(datestr(b(1587,1)))
etime(w,q)
x=b(:,1)
y=b(:,2)
plot(x,y)
ylabel('Potencia')
xlabel('Horas')
title('Grafica de la distribucion de potencia')
datestick('x','HH:MM')

Optimización de código en Matlab

Implementar una función que calcule los cuadrados de los 1000 y 10000 primeros números naturales de 3 formas distintas:
• Utilizando un bucle for sin declarar las variables.
• Utilizando un bucle for declarando previamente la variable.
• Calculando el cuadrado del vector correspondiente (operación componente a
componente).
Calcular, con la ayuda de la instrucción de Matlab cputime el tiempo que se tarda en realizar el cálculo con cada uno de los tres métodos. La función a implementar debe tener como variable de entrada el número N, y como salida el tiempo que se tarda con cada uno de los tres métodos (t1, t2, t3).


fprintf('Para %d\n',N)
 
tic;
for i=1:1:N
    cuadrados(i)=i^2;
end
toc;


tic;
cuadrados=1:1:N;
for i=1:1:N
    cuadrados(i)=i^2;
end
toc;

tic;
numeros=1:1:N;
cuadrados=numeros.^2;
toc;

end

Gráficas en Matlab 2

Dibujar utilizando curvas de nivel tanto en 2D como en 3D la función siguiente:

z =1/(9 + x! + y!)

Crear una superficie tridimensional de la función anterior así como una proyección en 2D de la misma.

[X,Y]=meshgrid(-5:.1:5,-5:0.1:5);
Z=1./(9+X.^2+Y.^2);

figure()
subplot(2,2,1)
contour(Z)
title('Curva de nivel 2D')

subplot(2,2,2)
contour3(Z)
title('Curva de nivel 3D')

subplot(2,2,3)
mesh(X,Y,Z)
title('Superficie tridimensional')

subplot(2,2,4)
pcolor(X,Y,Z)
title('Proyeccion 2D')

Gráficas en Matlab

Crear en una figura tres gráficas en las que se representen las relaciones
trigonométricas del ángulo alpha y alpha+pi/4. Una gráfica será continua en color rojo
y la otra discontinua en color negro. Etiquetar cada una de ellas convenientemente.

pi=180;
x=linspace(0,400);
y1=sind(x);
y2=cosd(x);
y3=tand(x);
z1=sind(x+pi/4);
z2=cosd(x+pi/4);
z3=tand(x+pi/4);

figure,subplot(2,2,1)
plot(x,y1,'k--')
hold on
plot(x,z1,'r'),grid
title('Senos')
legend('alpha','alpha+pi/4')

subplot(2,2,2)
plot(x,y2,'k--')
hold on
plot(x,z2,'r'),grid
title('Cosenos')
legend('alpha','alpha+pi/4')

subplot(2,2,3.5)
plot(x,y3,'k--'),grid
hold on
plot(x,z3,'r')
axis([0 400 -15 15])
title('Tangentes')
legend('alpha','alpha+pi/4')

Entrada y salida por pantalla en Matlab

Escribir un programa que pida por pantalla un un entero y un carácter. La salida debe
ser un triángulo dibujado con el carácter dado y de anchura máxima dada por el entero
leído. Por ejemplo si el entero es 7 y el carácter es ‘O’, el triángulo debe ser:
         O
      OOO
   OOOOO
OOOOOOO


entero=input('Introduzca un entero: ');
caracter=input('Introduzca un caracter: ','s');

for i=1:2:entero
    for k=1:1:(caracter-i)/2
           fprintf(' ')
        end
    for j=1:1:i
      fprintf(caracter)
    end
    fprintf('\n')
end


Manejo de strings en Matlab


Escribir una función que convierta un número romano a su equivalente decimal. Los valores de los números romanos son:
        I            1
        V          5
        X        10
        L        50
        C      100
Se utilizará como representación el sistema en el que la posición de los caracteres importa, es decir, el valor 4 sería IV.


function out = practica1_10()

    num=input('Ingrese el numero romano: ', 's');
    total=0;
    valor_anterior=0;
    for i=1:length(num)
        letra=num(i);
        switch letra
            case 'C'
                valor=100;
            case 'M'
                valor=1000;
            case 'D'
                valor=500;
            case 'L'
                valor=50;
            case 'X'
                valor=10;
            case 'V'
                valor=5;
            case 'I'
                valor=1;
        end
        if (valor>valor_anterior&&valor_anterior>0)
            valor_anterior = 0-valor_anterior;
        end
        total = total + valor_anterior;
        valor_anterior = valor;
        
        
    end
    out=total+valor_anterior;
end



Escribir una función que se le pase como parámetro una frase y que devuelva un cell array con todas las palabras que se han utilizado en la frase y el número de veces que se repite cada palabra.
Probar los resultados con las frases ‘Primera frase de prueba de este ejercicio’ ‘Otra frase para la prueba de la frase de la practica’

function out = practica1_ejercicio11() 
    resto = input('Introduzca la frase: ','s'); 
    separadas = {}; 
    i = 1; 
    while length(resto) ~=0 
        [primera,resto] = strtok(resto); 
        separadas{i} = primera; 
        i = i+1; 
    end
    lonngitudCellArray=i-1;
    posicion=1;
    numeroPalabras={};
    for j=1:lonngitudCellArray
        contador=0;
        for k=1:lonngitudCellArray
            if(strcmp(separadas{j},separadas{k})==1)
                contador=contador+1;
            end
            
        end    
        
        numeroPalabras{posicion}=contador;
        posicion=posicion+1;
        
    end
    out=[separadas;numeroPalabras];
    
end 


Como calcular la letra de un DNI en Matlab

Escribir una función en Matlab una función cuyo parámetro de entrada sea un número
comprendido entre 1.000.000 y 99.999.999 que permita calcular la letra del DNI. La
función debe devolver la letra del DNI.


function letra = Ej8DNI ()
numero = input('Ingrese el valor de la variable: ');
if(numero<1000000||numero>99999999)
    letra=99;
else
resto = mod(numero, 23);
switch resto
    case 0
        letra = 'T';
    case 1
        letra = 'R';
    case 2
        letra = 'W';
    case 3
        letra = 'A';
    case 4
        letra = 'G';
    case 5
        letra = 'M';
    case 6
        letra = 'Y';
    case 7
        letra = 'F';
    case 8
        letra = 'P';
    case 9
        letra = 'D';
    case 10
        letra = 'X';
    case 11
        letra = 'B';
    case 12
        letra = 'N';
    case 13
        letra = 'J';
    case 14
        letra = 'Z';
    case 15
        letra = 'S';
    case 16
        letra = 'Q';
    case 17
        letra = 'V';
    case 18
        letra = 'H';
    case 19
        letra = 'L';
    case 20
        letra = 'C';
    case 21
        letra = 'K';
    case 22
        letra = 'E';
      
    otherwise
        letra = 99;
end    
end
%letra  = dni(23);

Criba de Eratóstenes Matlab

Escribir un script de Matlab que calcule números primos existentes entre los primeros 1000 número naturales. Para ello se implementará aplicando lo que se conoce como “criba de Eratóstenes”. Este procedimiento consiste en la eliminación sucesiva de los múltiplos de un determinado número, a partir de 2, considerando dicho número inicial como primo si no ha sido eliminado.



function primos=practica1_8()
n=1000;

enteros=2:n;  
primos =[1];  
    while length(enteros)>0  
        sicPrim=enteros(1) ; 
        primos=[primos,sicPrim]; 
        enteros1=[];
        for i=1:length(enteros) 
            if(mod(enteros(i),sicPrim)~=0) 
                enteros1=[enteros1, enteros(i)] 
            end % if  
        end % for 
        enteros=enteros1;  
    end % while   
end % function


Ejercicios vectores Matlab

Generación de vectores


%Generar un vector de 10 elementos que cubra el intervalo[-pi, e]

linspace ( -pi, exp(1), 10)

%Generar sin utilizar ninguna funcion un vector de 500 puntos para el

%intervalo [0,10]

linspace ( 0, 10, 500)


Operaciones lógicas



%Generar una matriz cuadrada cuyos valores sean una secuencia uniforme de
%amplitud 3 con 400 puntos
A = rand(20)*3 
%Determinar:
%Filas y columnas de los elementos de la matriz cuyo valor este comprendido
%entre 1 y 2
find((A>1)&(A<2))
%Elementos de la matriz cuyos valores sean o menores que 1 o mayores que 2
A((A<1)|(A>2))
%Redondear los elementos de la matriz al entero mas proximo y determinar
%los valores que no son iguales a 1
B = round(A)
find(B~=1)

Distancia entre elementos


%Generar una matriz aleatoria cuyos valores sean enteros y esten
%comprendidas en el intervalo -10 y 10. Las dimensiones de la matriz seran
%de 10 filas y 4 columnas.
A = round(-10 + (10-(-10)).*rand(10,4))

%Crear una matriz cuyas dimensiones sean 10*10 cuyos elementos sean las
%distancias euclideas entre todos los elementos de la matriz generada
%aleatoria.

sqrt (sum((A(1,:)-A(2,:)).^2))

[n,N]=size(A);
temp=[];
for i=1:10
    for j=1:10
        tempp=0;
        for k=1:N
            temp(k)=(A(j,k))^2;
            tempp=tempp+temp(k);
        end

        d(i,j)=sqrt(tempp);
    end
end
disp(d);



%Generar una matriz aleatoria cuyos valores sean enteros y esten
%comprendidas en el intervalo -10 y 10. Las dimensiones de la matriz seran
%de 10 filas y 4 columnas.
A = round(-10 + (10-(-10)).*rand(10,4))

%Crear una matriz cuyas dimensiones sean 10*10 cuyos elementos sean las
%distancias euclideas entre todos los elementos de la matriz generada
%aleatoria.

sqrt (sum((A(1,:)-A(2,:)).^2))

[n,N]=size(A);
temp=[];
for i=1:10
    for j=1:10
        tempp=0;
        for k=1:N
            temp(k)=(A(j,k))^2;
            tempp=tempp+temp(k);
        end

        d(i,j)=sqrt(tempp);
    end
end
disp(d);

Ejercicios matrices Matlab


%Definir las siguientes matrices 
%Matriz A
A=[1,0,5,5;-1,3,2,2;2,0,1,1;5,-4,3,1]
%Matriz B
B=[2,1,-2,3;0,2,4,2;3,1,6,1;1,-1,-2,0]

%Realizar los siguientes cálculos:
3*A
A-7
%A*B traspuesta
A*B'
%inversa de B
inv(B)
%Eliminar de la matriz A la fila 3 y la columma 2 y almacenarla en la
%matriz C
C=A
C(3,:)=[]
C(:,2)=[]
%Convertir la matriz A en una matriz 2*8 y la matriz B en 8*2 y realizar el
%producto matricial
A = reshape(A, 2, 8)
B = reshape(A, 8, 2)
A*B



%Definir la siguiente matriz
A=[2,2,1;3,4,0;1,5,4]

%Calcular el maximo de cada fila y el maximo de la matriz
max(A, [],2)
max(max(A))
%Calcular el minimo de cada columna y el minimo de la matriz
min(A, [],1)
min(min(A))
%Calcular el sumatorio de los elementos de la primera columna y de la
%tercera
sum(A(:, 1))
sum(A(:, 3))


Ejercicio de matrices en Matlab

Almacenar la variable Matriz1 la siguiente matriz:

𝐴 = (1 -3 5, 9 3 1, 2 -1 4)

• Calcular su transpuesta y guardarla en Matriz2
• Calcular el producto elemento a elemento entre Matriz1 y Matriz2
• Calcular la suma de Matriz1 y el producto anterior y almacenarlo en Matriz3
• Calcular el producto matricial entre Matriz1 y Matriz2 y almacenarlo en prodM1M2
• Calcular el producto matricial entre Matriz1 y Matriz2 y almacenarlo en prodM2M1
• Cambiar el valor del elemento central de Matriz1 a 9
• Guardar en una matriz llamada esquinas de tamaño 2x2 los elementos de las esquinas de Matriz1
• Guardar en un vector fila diagonalM1 los elementos de la diagonal principal de Matriz1
• Guardar en un vector columna diagonalM2 los elementos de la primera fila de la Matriz2
• Calcular el producto escalar de diagonalM1 y diagonalM2
• Calcular el producto vectorial de diagonalM1 y diagonalM2



%Almacenar la variable Matriz1 la matriz A.
Matriz1=[1,-3,5 ;9,3 1; 2,-1,4]
%Calcular su transpuesta y guardarla en Matriz2
 Matriz2=Matriz1'
 %Calcular el producto elemento a elemento entre Matriz1 y Matriz2
 Matriz1.*Matriz2
 %Calcular la suma de Matriz1 y el producto anterior y almacenarlo en
 %Matriz3
 Matriz3 = Matriz1 + (Matriz1.*Matriz2)
 %Calcular el producto matricial entre Matriz1 y Matriz2 y almacenarlo en
 %prodM1M2
 prodM1M2 = Matriz1 * Matriz2
  %Calcular el producto matricial entre Matriz2 y Matriz1 y almacenarlo en
 %prodM2M1
 
 prodM2M1 = Matriz2 * Matriz1
 %Cambiar el valor del elemento central de Matriz1 a 9
 Matriz1(2,2) = 9
 %Guardar en una matriz llamada esquinas de tamaño 2*2 los elementos de las
 %esquinas de Matriz1
 esquinas = Matriz1 ([1 3], [1 3])
 %Guardar en un vector fila diagonalM1 los elementos de la diagonal
 %principal de Matriz1
 diagonalM1 = (diag(Matriz1)')
  %Guardar en un vector columna diagonalM2 los elementos de la primera fila
 %de la Matriz2
 diagonalM2 = [1 9 2]'
 %Calcular el producto escalar entre diagonalM1 y diagonalM2
 productoEscM1M2 = dot(diagonalM1, diagonalM2)
 %Calcular el producto vectorial entre diagonalM1 y diagonalM2
 productoVecM1M2 = cross(diagonalM1, diagonalM2)