Matlab - iteración otra vez

 
Vista:

iteración otra vez

Publicado por holyo (30 intervenciones) el 11/03/2009 19:50:48
Hola, perdón porque no me había explicado bien. Mi problema es el siguiente.
a se calcula con h
h se calcula con I
I se calcula con a

Por eso es un problema iterativo, ¿cómo lo resuelvo?

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

RE:iteración otra vez

Publicado por Angel (75 intervenciones) el 11/03/2009 20:02:25
¿tienes algun valor inicia?
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:iteración otra vez

Publicado por holyo (30 intervenciones) el 11/03/2009 20:25:47
Si, tengo un valor inicial de I, le puedes llamar IO. Ese IO lo calculo con unas fórmulas muy parecidas a las que uso pero sin complicarlas tanto, es decir, es una aproximación del valor I, por eso vale como valor inicial
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:iteración otra vez

Publicado por Angel (75 intervenciones) el 12/03/2009 09:46:39
Prueba algo así
I=100*IO; %Valor desproporcionadamente grande para no salir en la
%1ªIteración
I=[ I I0]; %DAdo que no existen problemas de memoria concatenaremos
%todos los valores de I
while(abs(I(length(I)) - (I(length(I))-1) > 0.001)
%Restamos en valor absoluto los dos ultimos elementos de I y comparmos
%con 0.001
a=f1(I);
h=f2(a);
I = [ I f3(h)]; %volvemos a concatenar para que el while compare este ultimo
%con el de la anterior iteracion
end
A ver que tal te va.
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:iteración otra vez

Publicado por holyo (58 intervenciones) el 12/03/2009 19:39:23
Hola, no me ha funcionado, te escribo mis lineas de código para que puedas entender mejor el problema:

epsilon=1.34
H= 2
a2= 3
I0=atand((1+a2)/(l*(1+H))); %Valor inicial que tomo para calcular I
I=100*I0;
I=[I I0];
while abs(I(length(I)) - (I(length(I))-1)) > 0.001
a=2*I*l^2;
h=1+((1-a)*tand(I-epsilon)/l);
f3=atand((1+a)/(l*(1+h)));
I = [I f3];
end

Me dá error:

??? Error using ==> mtimes
Inner matrix dimensions must agree.

Error in ==> nuevoeolico at 31
h=1+((1-a)*tand(I-epsilon)/l);

Muchísimas gracias por tu ayuda.
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:iteración otra vez

Publicado por Angel (75 intervenciones) el 12/03/2009 21:09:00
Una par de cosas previas, yo no tengo una funcion atand, pero lo que he puesto atan, si eso tan solo has de cambiarlo; otra cosita, he provao y con este valor inicial de I necesita menos operaciones que con el inicial, puede que sea una tontería pero aún así, de este modo funciona, pruebalo; A partir del comentario es una pichotada mia, puedes borrarla, es solo para ver como funciona; y lo importante para que aprendas de los errores, al ser I un vector en este caso, siempre que quieras referirte a el lo haras a toda la matriz a no ser que especifiques algún valor concreto, como veras te he cambiado un I por un
I(length(I)) ya que lo que realmente necesitas en ese caso es el último elemento de I. Yo me he inventado ele = 2 por ser el unico valro que no tenía y funciona, pero no se si esta ele esta bien o no, repasalo, e codigo es este:

epsilon=1.34;
H= 2;
a2= 3;
I0=atan((1+a2)/(l*(1+H))); %Valor inicial que tomo para calcular I
I=[0 I0];

while abs(I(length(I)) - (I(length(I)-1))) > 0.001
a=2*I*l^2;
h=1+((1-a)*tan(I(length(I))-epsilon)/l);
f3=atan((1+a)/(l*(1+h)));
I = [I f3];
end

%a partir de aqui puedes borrar despues de probar
figure; plot(I); grid on;
title(['Proceso de aproximacion de I en ' int2str(length(I)) ' iteraciones']);
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