Matlab - Problema con ciclo for

 
Vista:
sin imagen de perfil

Problema con ciclo for

Publicado por Patricio (5 intervenciones) el 14/11/2016 15:43:00
Estimados:

He estado tratando de hacer un fichero .m que me genere el polinomio de Legendre, a partir de la expansión por sumas de la fórmula de Rodrigues, lo que se traduce en lo siguiente:

chart

El tema es que he hecho el siguiente código:

1
2
3
4
5
6
7
function [P]=legpoly(n,x)
	N=floor(n/2);
	for k=0:N
		P(k)=((-1).^k.*factorial(2.*n-2.*k))./(2.^n.*factorial(k).*factorial(n-k).*factorial(n-2.*k)).*x.^(n-2.*k);
                P=sum(P);
        end
end

pero al tratar de hacerlo andar, se despliega el error "Subscript indices must either be real positive integers or logicals."

Agradezco desde ya cualquier ayuda.
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 Royeth
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Problema con ciclo for

Publicado por Royeth (1818 intervenciones) el 14/11/2016 18:00:43
lo que pasa es que k va de 0 hasta N y en matlab los vectores no comienzan de 0 sino de 1 entonces debes poner k+1 , sería así :

1
2
3
4
5
6
7
function [P]=legpoly(n,x)
	N=floor(n/2);
	for k=0:N
		P(k+1)=((-1).^k.*factorial(2.*n-2.*k))./(2.^n.*factorial(k).*factorial(n-k).*factorial(n-2.*k)).*x.^(n-2.*k);
                P=sum(P);
        end
end


saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

Problema con ciclo for

Publicado por Patricio (5 intervenciones) el 15/11/2016 21:42:49
Aprovechando el espacio, cómo podría hacer lo mismo pero ahora considerando a "x" como una variable simbólica? Saludos!
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

Problema con ciclo for

Publicado por Patricio (5 intervenciones) el 15/11/2016 22:10:56
Me responderé a mi mismo, ya que me "crugió" jajaja
Implementando el siguiente código, pude hacer lo que comenté en el comentario anterior.

1
2
3
4
5
6
7
8
9
function [P]=legpoly(n,x)
    syms z k
    sym x;
    N=floor(n/2);
    p(z,k)=(-1).^k.*factorial(2*n-2*k)./(2.^n.*factorial(k).*factorial(n-k).*factorial(n-2*k)).*z.^(n-2*k);
    k=0:N;
    P(z)=sum(p(z,k));
    P=P(x);
end

Puede que haya que pulirla algo más, pero creo que de momento funciona bien.

Saludos!
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