Matlab - Dos ficheros simples que me dan error

   
Vista:

Dos ficheros simples que me dan error

Publicado por Tobias (3 intervenciones) el 28/10/2017 14:24:33
El enunciado del primer ejercicio es el siguiente:

"Programar una función que factorice un número entero. Por ejemplo, si le pasamos el número 24=2³x3 la función devolverá el vector [2 2 2 3]"

Y yo en mi fichero he escrito lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
function [factors]=opcional5(x)
 
p = primes(x);
lp = length(p);
 
for i = 1:lp
    if rem(x,p(i)) ~= 0
    p(i) = [];
    end
end
 
factors = p;

Me da el siguiente error y no consigo solucionarlo:

Index exceeds matrix dimensions.

"Error in opcional5 (line 7)
if rem(x,q(i)) ~= 0"

En el segundo ejercicio me piden lo siguiente:

"Programar una función que ordene de menor a mayor un vector pasado como argumento de entrada"

Y yo escribo:

1
2
3
4
5
6
7
8
9
10
11
12
13
function [xf] = opcional4(x)
 
t = x;
n = length(t);
xf=zeros(1,n);
for i = 1:n
    if t - t(i) >= 0
        for k = 1:n
            v(k)=t(i);
            t(i) = [];
        end
    end
end

El error es el siguiente:

Index exceeds matrix dimensions.

"Error in opcional4 (line 9)
v(k)=t(i);"

Estoy iniciándome en la programación con Matlab así que perdonad una duda que probablemente sea muy muy simple.

Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JOSE JEREMIAS CABALLERO

Dos ficheros simples que me dan error

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (4442 intervenciones) el 29/10/2017 16:04:58
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function factors=opcional5(x)
if nargin==0
    x=24;
end
p = primes(x);
lp = length(p);
k=1;
for i = 1:lp
    if rem(x,p(i)) == 0
    P(k) = p(i);
    k=k+1;
    end
end
n=1;
for i=1:length(P)
    cond=0;
    while cond==0
         if rem(x,P(i)) == 0
             x=x/P(i);
             f(n)=P(i);
             n=n+1;
         else
             i=i+1;
             cond=1;
         end
    end
end
factors = f;
end

1
2
3
4
5
6
7
8
9
10
>> x=24, factors=opcional5(x)
x =
    24
factors =
     2     2     2     3
>> x=36, factors=opcional5(x)
x =
    36
factors =
     2     2     3     3



Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Servicios de programación matlab


http://matlabcaballero.blogspot.com
https://www.facebook.com/matlabcaballero
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Dos ficheros simples que me dan error

Publicado por Tobias (3 intervenciones) el 29/10/2017 21:59:05
Muchísimas gracias. Aun así tengo aún alguna duda:

En el opcional5, ¿para qué sirven las líneas de código 16,17 y 24? En concreto no entiendo la función de "cond". No la hemos usado en clase y a pesar de leer sobre ella bajo "help cond" y en la página de referencia no consigo entender qué función tiene dentro del programa opcional5. Si "cond" es simplemente un índice, ¿por qué bajo "else" le otorgas a la variable "cond" el valor de 1 si la condición para que calcule el "if" es que "cond" sea igual a 0?

Muchas gracias de veras por todo!!

Saludos,

Tobias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Dos ficheros simples que me dan error

Publicado por Tobias (3 intervenciones) el 29/10/2017 22:03:26
Perdona, no me dio tiempo a editar el comentario después de darme cuenta de que cond era solo un nombre para la variable. Sin embargo la duda de por qué es 1 tras "else" persiste.

Muchas gracias de nuevo,

Tobias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar