Matlab - Dos ficheros simples que me dan error

 
Vista:
sin imagen de perfil

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
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Dos ficheros simples que me dan error

Publicado por JOSE JEREMIAS CABALLERO (5917 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
sin imagen de perfil

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
sin imagen de perfil

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