Matlab - iteraciones condicionadas

   
Vista:

iteraciones condicionadas

Publicado por nazareno (14 intervenciones) el 05/11/2009 17:07:20
primero perdón por el titulo, no se como describir mejor la duda.
es así: tengo q encontrar, dentro de un proceso iterativo, el valor maximo de G, q es funcion de 'a'. ok, eso lo puedo hacer. sin embargo después tengo q usar ese valor de 'a' q hizo máximo G para seguir otro loop. como hago para identificar o apartar ese valor de la variable 'a' q me hizo maximo a G?

for i=1:250
a(i)=0.002*i; % 'a' varia desde 0.002 hasta 0.5 en saltos de a 0.002, lo q da 250 valores de a
omega=rpm*pi/30;
tangfi=(-1+sqrt(1+4*(v1/(omega*r))^2*a(i)*(1-a(i))))/(2*a(i)*v1/(omega*r));
fi=atan(tangfi);
aprima=v1*(1-a(i))/(omega*r*tangfi)+1;
f=N*(R-r)/(2*R*sin(fi));
F=2/pi*acos(exp(-f));
G=F*(1-a(i))*aprima
end
max(G) % puedo obtener el valor maximo de G.

yo tomo 'a' como variable y la hago ir creciendo desde 0.002 hasta 0.5. de todas las varibles q se definen despues de 'a' (tangfi, fi, aprima, etc) tengo q quedarme con las q hacen a G maximo. como hago eso? despues de encontrar eso tengo q usar todas esas variables para otros calculos, por lo tanto no me interesa el valor maximo de G, sino los valores de 'a', tangfi, fi, etc.. q hicieron maximo a G.
en el titulo digo q son iteraciones condicionadas, porq no me interesa calcular todo el rango q puede tomar la variable 'a', solo me interesa q calcule hasta encontrar el maximo de G y despues usar las variables secundarias (tangfi, fi, aprima, etc..) para hacer otras cuentas. quiza eso se pueda hacer comparando el valor de G con el valor anterior calculado de G.
lo q no se es como condicionar el proceso iterativo para un valor maximo de G. ni tampoco se como extraer esas variables secundarias una vez encontrado el maximo de G.
gracias anticipadas!
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

RE:iteraciones condicionadas

Publicado por fismat (391 intervenciones) el 05/11/2009 17:35:37
Hola Nazareno,

Respecto a tu programa, sugiero alguna modificaciones, principalmente debes almacenar estos valores que vas encontrando en nuevos vectores que incrementas en funcion a si cumple la condicion de designas

valores=.002:0.002:0.5;
inc=1;

v1=[];
v2=[];
v3=[];

for i=1:length(valores)
a=valores(i); % 'a' varia desde 0.002 hasta 0.5 en saltos de a 0.002
omega=rpm*pi/30;
tangfi=(-1+sqrt(1+4*(v1/(omega*r))^2*a*(1-a)))/(2*a(i)*v1/(omega*r));
fi=atan(tangfi);
aprima=v1*(1-a(i))/(omega*r*tangfi)+1;
f=N*(R-r)/(2*R*sin(fi));
F=2/pi*acos(exp(-f));
G=F*(1-a)*aprima

if G>= maximo? (aca debes agregar tu condicion)
v1(inc)=a;
v2(inc)=tangfi;
v3(inc)=fi;

inc=inc+1;

end
end
max(G) % puedo obtener el valor maximo de G.

saludos
Fismat
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

RE:iteraciones condicionadas

Publicado por nazareno (14 intervenciones) el 05/11/2009 18:24:29
antes q nada muchas gracias por tratar de desasnarme....jejej

intento hacer lo siguiente: voy a definir vectores columna para cada variable (asi puedo guardarlos como vos me recomendabas) de modo q para cada iteracion se crea un nuevo elemento del vector. luego quiero comparar el valor de G en la iteracion 'i', con el valor de G en la iteracion anterior (i-1), si la nueva G es mayor q la anterior es porq llegue a un maximo, y entonces le digo q me muestre cuales son esos resultados q cumplieron esa condicion.
sin dudas estoy errando en algo, pero la verdad q no se donde....

for i=1:250;
a(i,1)=0.002*i;
tangfi(i,1)=(-1+sqrt(1+4*(v1/(omega*r))^2*a(i,1)*(1-a(i,1))))/(2*a(i,1)*v1/(omega*r));
fi(i,1)=atan(tangfi(i,1));
aprima(i,1)=v1*(1-a(i,1))/(omega*r*tangfi(i,1))+1;
f(i,1)=N*(R-r)/(2*R*sin(fi(i,1)));
F(i,1)=2/pi*acos(exp(-f(i,1)));
G(i,1)=F(i,1)*(1-a(i,1))*aprima(i,1);
if G(i,1)>G(i-1,1),
max=i;
end;
end
resultados=[a(max,1) tangfi(max,1) fi(max,1)]

el error me lo marca en la desigualdad.....
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

RE:iteraciones condicionadas

Publicado por nazareno (14 intervenciones) el 05/11/2009 19:37:39
estoy pensandolo de otra manera: puedo hacer q me calcule todas las variables y las guarde en vectores. luego, afuera del bucle for-end le digo q el elemento de esos vectores q me interesa es el que me hace maximo a G.

for i=1:250;
a(i,1)=0.002*i;
tangfi(i,1)=(-1+sqrt(1+4*(v1/(omega*r))^2*a(i,1)*(1-a(i,1))))/(2*a(i,1)*v1/(omega*r));
fi(i,1)=atan(tangfi(i,1));
aprima(i,1)=v1*(1-a(i,1))/(omega*r*tangfi(i,1))+1;
f(i,1)=N*(R-r)/(2*R*sin(fi(i,1)));
F(i,1)=2/pi*acos(exp(-f(i,1)));
G(i,1)=F(i,1)*(1-a(i,1))*aprima(i,1);
end

ahi estan todos los vectores calculados. lo q no se como hacer ahora es decirle q el indice 'maximo' es el q corresponde con el 'i' q me hace max(G(:,1))
¿como le pregunto cual es el 'i' q me hizo el max(G(:,1))?
una vez q sepa cual fue ese i: maximo=i

resultados=[a(maximo,1) tangfi(maximo,1) fi(maximo,1)]

quiza haya una manera mas elegante, no?
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

RE:iteraciones condicionadas

Publicado por nazareno (14 intervenciones) el 05/11/2009 20:21:16
encontre una manera de solucionarlo. se q no es la mas elegante y no me gusta mucho porq estoy calculando todo todo y despues de tener todo calculado busco el maximo. a mi me hubiera gustado encontrar la manera de deter el proceso de iteraciones una vez llegado al maximo. en este caso no es muy problematico porq solo son 250 iteraciones, pero si hubieran sido muchas mas seria problematico.

for i=1:250;
a(i,1)=0.002*i;
tangfi(i,1)=(-1+sqrt(1+4*(v1/(omega*r))^2*a(i,1)*(1-a(i,1))))/(2*a(i,1)*v1/(omega*r));
fi(i,1)=atan(tangfi(i,1));
aprima(i,1)=v1*(1-a(i,1))/(omega*r*tangfi(i,1))+1;
f(i,1)=N*(R-r)/(2*R*sin(fi(i,1)));
F(i,1)=2/pi*acos(exp(-f(i,1)));
G(i,1)=F(i,1)*(1-a(i,1))*aprima(i,1);
end

for j=5:245;
if G(j+1,1)>G(j,1)
max=j+1;
end
end

resultados=[a(max,1) tangfi(max,1) fi(max,1) aprima(max,1) f(max,1) F(max,1) G(max,1)]

el vector de resultados me identifica los elementos de las matrices q coinciden con el elemento q maximizo a G.
muchas gracias de todos modos
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