Matlab - For e input

   
Vista:

For e input

Publicado por J.M.P. (2 intervenciones) el 08/06/2012 12:16:40
Hola, necesito crear un sumatorio de varios escalares a partir de unos vectores. Me explico mejor, tengo unos vectores que se multiplican escalarmente y luego tengo que sumar los resultados. Hay unos vectores que son constantes, los cuales se pueden definir perfectamente, y luego están los del problema, son unos vectores que determinan la posición y la longitud de los lados de un poligono, y claro el sumatorio va de 1 hasta M, siendo M el número de lados del poligono, por lo que tengo los vectores a1, a2, ..., aM. Tengo pensado en que el programa pida los vectores de los lados del polígono mediante la función input (introducir los vectores) y la for, para que repita la input para cada uno de los lados, algo así

M=input ('introduzca el número de lados')
for n=1:M
a(n)=input('introduzca las cordenadas del lado' n)
expresión del sumatorio con a(n)
end,

es decir introducir los vectores y que los memorice, de tal forma que pueda preguntarle cuál es el vector a1,..., aM
el 1er problema a(n) no me sirve ya que esa expresión sólo me vale para que Matlab me diga cuál es el valor del vector a en la posición (n)
el 2º problema, menos importante, es que no consigo que cuándo me pida introducir el vector, me salga el valor de n.
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

For e input

Publicado por Gerardo (95 intervenciones) el 09/06/2012 01:30:51
Hola JMP!

No entendi muy bien lo que pusiste :P

1
2
3
4
5
6
7
8
9
10
% Suma de los primeros 10 nros naturales
s1 = 0;
for i = 1:10
    s1 = s1 + i;
end
s2 = sum(1:10);
s3 = 10*(10 + 1)/2; % para comprobar
display(s1)
display(s2)
display(s3)


De igual modo puedes trabajar con elementos de un vector:

1
2
3
4
5
6
v = [round(10*rand(10,1)),round(10*rand(10,1))];
display(v)
% Suma elementos primera columna
S1 = sum(v(:,1));
% Suma elementos segunda columna
S2 = sum(v(:,2));


Solo son ejemplos muy especificos, pero espero te pueda ayudar para tu problema. Cualquie duda o aclaracion solo hazla.

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

For e input

Publicado por J.M.P. (2 intervenciones) el 11/06/2012 10:08:51
Muchas gracias por tu sugerencia, pero no me sirvía para lo que era mi duda, seguro que me expliqué mal, la duda era como introducir varios vectores y luego utilizar dichos vectores en el sumatorio. Para introducir los vectores lo que hago es

m=input('introduzca el nº de lados: ');
while m<3
m=input('Debe introducir un nº igual o mayor a 3 \n o bien dejelo en blanco para salir: ' );
if isempty(m)
return
else
m;
end
end

for l=1:m %Introducción de los vértices de la placa mediante coordenadas
a(l,:)=input(['Introduzca posición del vértice ' num2str(l) ' de la placa ([X Y Z]): ']);
end
for l=1:m %cálculo de los bordes de la placa a partir de los vértices (b), así como el vector %posición de su punto medio
% y cálculo vector posición del punto medio de cada borde
% (bmed)
if l<m
b(l,:)=a(l+1,:)-a(l,:);
bmed(l,:)=(a(l+1,:)+a(l,:))/2;
else
b(l,:)=a(1,:)-a(l,:);
bmed(l,:)=(a(1,:)+a(l,:))/2;
end

end

Son los vectores b(l,:) y los bmed(.,:) los que debo introducir en el sumatorio, de forma:
dot(b(1,:),r)+dot(b(2,:),r)+...+dot(b(m,:),r), donde r es un vector constante, para lo que espero que pueda utilizar la función suma que me has indicado, o si no probaré con algún otro for, Y parecido con bmed
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

For e input

Publicado por Gerardo (95 intervenciones) el 13/06/2012 20:33:06
Hola JMP!

Bueno... xD
Creo que seria algo asi la sumatoria q quieres usar...
1
2
3
4
s = 0;
for i=1:n
    s = s + dot(b(1,:),r);
end


% s es la sumatoria.
Lo de bmed puede ser similar pero no te podria decir pues no se como es la forma de la sumatoria. Cualquiero otra cosa, solo comenta :)

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

For e input

Publicado por Gerardo (95 intervenciones) el 13/06/2012 20:36:27
Hola!

lo siento me confundi! :/
en vez de 1 ponle i ...

1
2
3
4
s = 0;
for i=1:n
    s = s + dot(b(i,:),r);
end


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